File: gr_primary_mode_group_operations_01.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 (239 lines) | stat: -rw-r--r-- 8,001 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
###############################################################################
#
# To execute a configuration change the member must be on ONLINE
# state and belong to a reachable group majority.
#
# Also tested:
# You cannot execute configuration changes when there is an active
# table lock
#
# Test:
#   0. The test requires two servers: M1 and M2.
#   1. Execute a switch to multi primary mode, it must be a no op since the
#      group is already on multi primary mode.
#   2. Executing a mode change or primary election on an OFFLINE member must
#      fail.
#   3. Executing a mode change or primary election on a RECOVERING member
#      must fail.
#   4. Allow recovery to complete.
#   5. Executing a mode change or primary election on an ERRORed member must
#      fail. Rectify the cause of error and bring back member ONLINE.
#   6. Lock a table and try to execute a mode change. It must fail.
#   7. Kill server1 to create a network partition on group.
#   8. Executing a mode change or primary election on a network partition
#      must fail.
#   9. Cleanup.
#
###############################################################################

--source include/have_debug_sync.inc
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--source include/group_replication.inc

--source include/start_and_bootstrap_group_replication.inc

--echo
--echo # 1. Execute a switch to multi primary mode, it must be a no op since the
--echo #    group is already on multi primary mode.

SELECT group_replication_switch_to_multi_primary_mode();

--let $server1_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)

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

--echo
--echo # 2. Executing a mode change or primary election on an OFFLINE member
--echo #    must fail.

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_set_as_primary("$server1_uuid")

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_multi_primary_mode();

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_single_primary_mode();

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_switch_to_single_primary_mode("$server1_uuid")

--echo
--echo # 3. Executing a mode change or primary election on a RECOVERING member
--echo #    must fail.

--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

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_set_as_primary("$server1_uuid")

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_multi_primary_mode();

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_single_primary_mode();

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_switch_to_single_primary_mode("$server1_uuid")

--echo
--echo # 4. Allow recovery to complete.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc

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 $group_replication_member_state= ONLINE
--source include/gr_wait_for_member_state.inc

SET DEBUG_SYNC= 'RESET';

--let $server2_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)

--echo
--echo # 5. Executing a mode change or primary election on an ERRORed member
--echo #    must fail.

CREATE TABLE test.t1 (a INT PRIMARY KEY);

set session sql_log_bin=0;
INSERT INTO test.t1 VALUES (1);
set session sql_log_bin=1;

--source include/rpl_sync.inc

--let $rpl_connection_name= server1
--source include/rpl_connection.inc
INSERT INTO test.t1 VALUES (1);

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

--let $group_replication_member_state= ERROR
--source include/gr_wait_for_member_state.inc

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_set_as_primary("$server1_uuid")

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_multi_primary_mode();

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_single_primary_mode();

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_switch_to_single_primary_mode("$server1_uuid")

--echo
--echo # Rectify the cause of error and bring back member ONLINE.
--source include/stop_group_replication.inc

set session sql_log_bin=0;
TRUNCATE TABLE t1;
set session sql_log_bin=1;

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

--echo
--echo # 6. Lock a table and try to execute a mode change. It must fail.

LOCK TABLE t1 WRITE;

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_set_as_primary("$server1_uuid")

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_multi_primary_mode();

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_single_primary_mode();

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_switch_to_single_primary_mode("$server1_uuid")

UNLOCK TABLES;

DROP TABLE t1;

--source include/rpl_sync.inc

--echo
--echo # 7. Kill server1 to create a network partition on group.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server 0
--source include/wait_until_disconnected.inc

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

--let $group_replication_member_state= UNREACHABLE
--let $group_replication_member_id= $server1_uuid
--source include/gr_wait_for_member_state.inc

--echo
--echo # 8. Executing a mode change or primary election on a network partition
--echo #    must fail.

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_set_as_primary("$server1_uuid")

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_multi_primary_mode();

--error ER_CANT_INITIALIZE_UDF
SELECT group_replication_switch_to_single_primary_mode();

--replace_result $server1_uuid MEMBER1_UUID
--error ER_CANT_INITIALIZE_UDF
--eval SELECT group_replication_switch_to_single_primary_mode("$server1_uuid")

--echo
--echo # 9. Cleanup.

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

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

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

set session sql_log_bin=0;
call mtr.add_suppression("Timeout while waiting for the group communication engine to exit!");
call mtr.add_suppression("The member has failed to gracefully leave the group.");
call mtr.add_suppression("read failed");
call mtr.add_suppression("Could not execute Write_rows event on table test.t1");
call mtr.add_suppression("The applier thread execution was aborted. Unable to process more transactions, this member will now leave the group.");
call mtr.add_suppression("Fatal error during execution on the Applier process of Group Replication. The server will now leave the group.");
call mtr.add_suppression("The server was automatically set into read only mode after an error was detected.");
call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going.");
call mtr.add_suppression("The replica coordinator and worker threads are stopped");
set session sql_log_bin=1;

--let $rpl_group_replication_single_primary_mode=1
--let $rpl_group_replication_reset_persistent_vars=1
--source include/group_replication_end.inc