File: gr_force_peer_addresses_option.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (312 lines) | stat: -rw-r--r-- 13,987 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
################################################################################
# Verify that group_replication_force_members does behave as expected
# when:
#   0) The test requires two servers: M1 and M2.
#   1) A empty value is set on a OFFLINE member. It should succeed.
#   2) A value is set on a OFFLINE member. It should fail.
#   3) A empty value is set on a ONLINE member. It should succeed.
#   4) An IP is set on group with majority reachable. It should fail.
#   5) A empty value is set on a RECOVERING member. It should succeed.
#   6) A value is set on a RECOVERING member. It should fail.
#   7) Restart member with group_replication_force_members set. Group
#      Replication automatic start will error out.
#   8) Start Group Replication with group_replication_force_members set,
#      start will error out.
#   9) Clear group_replication_force_members, start will work.
#   10) Kill and restart a member to group loose majority.
#   11) Invalid address is set on a ONLINE member with majority unreachable. It
#       should fail.
#   12) Address of an UNREACHABLE member is set on a ONLINE member with majority
#       unreachable. It should fail.
#   13) IP address is set on a ONLINE member with majority unreachable. It
#       should succeed.
#   14) Clean up.
################################################################################
--source include/big_test.inc
--source include/have_debug_sync.inc
--source include/have_group_replication_plugin.inc
--source include/force_restart.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $uuid_server2= `SELECT @@GLOBAL.SERVER_UUID`
--let $member2_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address`
SET SESSION sql_log_bin= 0;
call mtr.add_suppression("Member is not ONLINE, it is not possible to force a new group membership.");
call mtr.add_suppression("group_replication_force_members must be empty on group start. Current value: '127.0.0.1:10000'");
call mtr.add_suppression("Unable to start Group Replication on boot");
call mtr.add_suppression("force_members can only be updated when Group Replication is running*");
call mtr.add_suppression("The member lost contact with a majority of the members in the group. Until the network is restored.*");
call mtr.add_suppression("\\[GCS\\] Peer address .* is not valid.");
call mtr.add_suppression("\\[GCS\\] The peers list contains invalid addresses.Please provide a list with only valid addresses.");
call mtr.add_suppression("Error setting group_replication_force_members value .* on group communication interfaces");
call mtr.add_suppression("The member resumed contact with a majority of the members in the group.*");
call mtr.add_suppression("Replica SQL for channel 'group_replication_applier': ... The replica coordinator and worker threads are stopped.*");
call mtr.add_suppression(".*Only alive members in the current configuration should be present in a forced configuration list.*");
call mtr.add_suppression("\\[GCS\\] Error reconfiguring group.");

SET SESSION sql_log_bin= 1;

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $member1_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address`
--let $group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds`
--let $member1_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
--let $uuid_server1= `SELECT @@GLOBAL.SERVER_UUID`
SET SESSION sql_log_bin= 0;
call mtr.add_suppression("Member is OFFLINE, it is not possible to force a new group membership");
call mtr.add_suppression("force_members can only be updated when Group Replication is running*");
SET SESSION sql_log_bin= 1;


--echo
--echo ############################################################
--echo # 1. Set empty string value to
--echo #    group_replication_force_members on a OFFLINE
--echo #    member.
SET GLOBAL group_replication_force_members= "";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc


--echo
--echo ############################################################
--echo # 2. Set group_replication_force_members on a OFFLINE
--echo #    member.
--error ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE
SET GLOBAL group_replication_force_members= "127.0.0.1:10000";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc


--echo
--echo ############################################################
--echo # 3. Set empty string value to
--echo #    group_replication_force_members on a ONLINE
--echo #    member.
--source include/start_and_bootstrap_group_replication.inc
SET GLOBAL group_replication_force_members= "";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc

--echo
--echo ############################################################
--echo # 4. Set valid IP string value to
--echo #    group_replication_force_members on a ONLINE member and
--echo #    majority of group members are reachable
--error ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE
SET GLOBAL group_replication_force_members= "127.0.0.1:10001";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc


--echo
--echo ############################################################
--echo # 5. Set empty string value to
--echo #    group_replication_force_members on a RECOVERING
--echo #    member.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
SET @@GLOBAL.DEBUG='+d,recovery_thread_wait_before_finish';

--let $group_replication_start_member_state= RECOVERING
--source include/start_group_replication.inc

SET GLOBAL group_replication_force_members= "";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc


--echo
--echo ############################################################
--echo # 6. Set group_replication_force_members on a RECOVERING
--echo #    member.
--let $group_replication_member_state= RECOVERING
--source include/gr_wait_for_member_state.inc

--error ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE
SET GLOBAL group_replication_force_members= "127.0.0.1:10000";

SET DEBUG_SYNC= "now WAIT_FOR signal.recovery_thread_wait_before_finish_reached";
SET @@GLOBAL.DEBUG='-d,recovery_thread_wait_before_finish';
SET DEBUG_SYNC= "now SIGNAL signal.recovery_end";

--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $group_replication_member_state= ONLINE
--source include/gr_wait_for_member_state.inc

SET DEBUG_SYNC= 'RESET';


--echo
--echo ############################################################
--echo # 7. Restart member with group_replication_force_members
--echo #    set. Group Replication start will error out.
--echo #    2 members.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $allow_rpl_inited=1
--let $_group_replication_local_address= `SELECT @@GLOBAL.group_replication_local_address`
--let $_group_replication_group_seeds= `SELECT @@GLOBAL.group_replication_group_seeds`
--let $restart_parameters=restart:--group_replication_local_address=$_group_replication_local_address --group_replication_group_seeds=$_group_replication_group_seeds --group_replication_start_on_boot=1 --group-replication-group-name=$group_replication_group_name --group_replication_force_members="127.0.0.1:10000"
--replace_result $_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS $_group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--source include/restart_mysqld.inc

--let $rpl_server_number= 2
--source include/rpl_reconnect.inc

--let $assert_text= Member 2 is OFFLINE
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE"] = 1
--source include/assert.inc


--echo
--echo ############################################################
--echo # 8. Start Group Replication while
--echo #    group_replication_force_members is set. Start
--echo #    will error out.

--let $assert_text= group_replication_force_members must be 127.0.0.1:10000
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "127.0.0.1:10000"
--source include/assert.inc

--error ER_GROUP_REPLICATION_CONFIGURATION
START GROUP_REPLICATION;

--let $assert_text= Member 2 is OFFLINE
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_state="OFFLINE"] = 1
--source include/assert.inc


--echo
--echo ############################################################
--echo # 9. Clear group_replication_force_members and start
--echo #    Group Replication. Group will have the 2 members.
SET GLOBAL group_replication_force_members= "";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc

--source include/start_group_replication.inc

# Server 1
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--let $group_replication_number_of_members= 2
--source include/gr_wait_for_number_of_members.inc

--let $assert_text= Server 1 must be present on group members
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server1"] = 1
--source include/assert.inc
--let $assert_text= Server 2 must be present on group members
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server2"] = 1
--source include/assert.inc

# Server 2
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $group_replication_number_of_members= 2
--source include/gr_wait_for_number_of_members.inc

--let $assert_text= Server 1 must be present on group members
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server1"] = 1
--source include/assert.inc
--let $assert_text= Server 2 must be present on group members
--let $assert_cond= [SELECT COUNT(*) FROM performance_schema.replication_group_members WHERE member_id="$uuid_server2"] = 1
--source include/assert.inc

--let $assert_text= group_replication_force_members must be empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc

--echo
--echo ############################################################
--echo # 10. Kill and restart a member to group loose majority.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $restart_parameters=restart:--group_replication_local_address=$member1_group_replication_local_address --group_replication_group_seeds=$group_replication_group_seeds --group_replication_group_name=$group_replication_group_name
--replace_result $member1_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS1 $group_replication_group_seeds GROUP_REPLICATION_GROUP_SEEDS $group_replication_group_name GROUP_REPLICATION_GROUP_NAME
--source include/kill_and_restart_mysqld.inc

--let $rpl_server_number= 1
--source include/rpl_reconnect.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

# confirm member is unreachable
--let $group_replication_member_state= UNREACHABLE
--let $group_replication_member_id= $member1_uuid
--source include/gr_wait_for_member_state.inc


--echo
--echo ############################################################
--echo # 11. Set invalid  IP string value to
--echo #    group_replication_force_members on a ONLINE member and
--echo #    majority of group members are unreachable.

--error ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE
SET GLOBAL group_replication_force_members= "256.256.256.777:1234";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc

--echo
--echo ############################################################
--echo # 12. Set IP of an UNREACHABLE member to
--echo #    group_replication_force_members on a ONLINE member .

--replace_result $member1_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS1
--error ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE
--eval SET GLOBAL group_replication_force_members= "$member1_group_replication_local_address";

--let $assert_text= group_replication_force_members is empty
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = ""
--source include/assert.inc


--echo
--echo ############################################################
--echo # 13. Set valid  IP string value to
--echo #    group_replication_force_members on a ONLINE member and
--echo #    majority of group members are unreachable

# unblock group
--replace_result $member2_group_replication_local_address GROUP_REPLICATION_LOCAL_ADDRESS1
eval SET GLOBAL group_replication_force_members= "$member2_group_replication_local_address";

--let $assert_text= group_replication_force_members has member2 local address
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_force_members]" = "$member2_group_replication_local_address"
--source include/assert.inc


--echo
--echo ############################################################
--echo # 14. Clean up.

# rejoin M1 to group
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--source include/start_group_replication.inc

--source include/group_replication_end.inc