File: gr_applier_slave_commands.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 (262 lines) | stat: -rw-r--r-- 11,118 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
################################################################################
# BUG#21142784 - CRASH ON 'START/STOP SLAVE FOR CHANNEL' AND 'START/STOP
#                GROUP_REPLICATION'
# BUG#21154282 - RSA..CHANNEL 'GROUP_REPLICATION_APPLIER' SHOULD NOT BE ALLOWED
#                WITHOUT STOP GR
#
# This test checks to see that user should not be allowed to execute
# set of commands for the group_replication_applier channel.
#
# a). When group_replication is ONLINE.
# b). when group_replication is OFFLINE.
#
# Test:
# 0. The test requires two servers: M1 and M2.
#
# 1. Start GR on member i.e. make M1 ONLINE. Now, check the execution of
#    following commands on the GR channels.
#  a) CHANGE MASTER command is blocked for other options than
#     `PRIVILEGE_CHECKS_USER` for group replication applier channel.
#  b) START SLAVE IO_THREAD is blocked on group_replication_applier
#  c) START SLAVE IO_THREAD with UNTIL option is blocked on
#     group_replication_applier
#  d) STOP SLAVE IO_THREAD is blocked on group_replication_applier
#  r) START SLAVE is blocked on group_replication_applier
#  f) STOP SLAVE is blocked on group_replication_applier
#  g) SHOW SLAVE STATUS is blocked on group_replication_applier
#  h) START SLAVE SQL_THREAD is not allowed on group_replication_applier
#  i) START SLAVE SQL_THREAD with UNTIL option is not allowed on
#     group_replication_applier
#  j) STOP SLAVE SQL_THREAD is not allowed on group_replication_applier
#  k) SHOW RELAYLOG EVENTS is allowed on group_replication_applier
#
# 2. Stop GR on member i.e. make M1 OFFLINE. Now, check the execution of
#    following commands on the GR channels.
#  a) CHM is blocked on group_replication_applier
#  b) START SLAVE IO_THREAD is blocked on group_replication_applier
#  c) STOP SLAVE IO_THREAD is blocked on group_replication_applier
#  d) START SLAVE is blocked on group_replication_applier
#  e) STOP SLAVE is blocked on group_replication_applier
#  f) SHOW SLAVE STATUS is blocked on group_replication_applier
#  g) START SLAVE SQL_THREAD is allowed on group_replication_applier
#  h) STOP SLAVE SQL_THREAD is allowed on group_replication_applier
#  i) SHOW RELAYLOG EVENTS is allowed on group_replication_applier
#
# 3. Start GR on M1. Connect to M2 which is ONLINE.
#  a) RESET SLAVE ALL is blocked on group_replication_applier
#  b) RESET SLAVE is blocked on group_replication_applier
#
# 4. Stop GR on M2 (OFFLINE).
#  a) RESET SLAVE is allowed on group_replication_applier
#
# 5. Start GR on M2 (ONLINE).
#  a) RESET SLAVE is blocked on group_replication_applier
#
# 6. Stop GR on M2 (OFFLINE).
#  a) RESET SLAVE ALL is allowed on group_replication_applier
#
# 7. Start GR on M2 (ONLINE). STOP SLAVE SQL_THREAD on the channel. Then,
#  a) RESET SLAVE is blocked on group_replication_applier
#  b) RESET SLAVE ALL is blocked on group_replication_applier
#
# 8. START SLAVE SQL_THREAD on the channel. Stop GR on M2 (OFFLINE). Then,
#  a) RESET SLAVE ALL is allowed on group_replication_applier
#  b) RESET SLAVE - check that channel doesn't exists
################################################################################
--source include/big_test.inc
--source include/have_group_replication_plugin.inc
--source include/group_replication.inc

--let $rpl_connection_name= server1
--source include/rpl_connection.inc
# Part 1 - Checking the execution of the command when group_replication is ON.

--echo
--echo # CHANGE MASTER command is blocked for other options than `PRIVILEGE_CHECKS_USER`.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
CHANGE REPLICATION SOURCE TO SOURCE_HOST="localhost", SOURCE_PORT=10 FOR CHANNEL "group_replication_applier";

--echo
--echo # CHANGE MASTER command is blocked for other options than `PRIVILEGE_CHECKS_USER`.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
CHANGE REPLICATION SOURCE TO SOURCE_CONNECTION_AUTO_FAILOVER=1 FOR CHANNEL "group_replication_applier";

--echo
--echo # CHANGE MASTER command is blocked for option `PRIVILEGE_CHECKS_USER` when GR is running
--error ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER='user' FOR CHANNEL "group_replication_applier";

--echo
--echo # error when executing START SLAVE IO_THREAD FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE IO_THREAD FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing STOP SLAVE IO_THREAD FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
STOP SLAVE IO_THREAD FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing START SLAVE IO_THREAD FOR CHANNEL with UNTIL option
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE IO_THREAD UNTIL SOURCE_LOG_FILE = 'server-binary-log.000001', SOURCE_LOG_POS = 781 FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing START SLAVE FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing STOP SLAVE FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
STOP SLAVE FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing SHOW SLAVE STATUS FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier';

--echo
--echo # START SLAVE SQL_THREAD command will not work for group_replication_applier
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START REPLICA SQL_THREAD FOR CHANNEL "group_replication_applier";

--echo
--echo # STOP SLAVE SQL_THREAD command will not work for group_replication_applier
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
STOP REPLICA SQL_THREAD FOR CHANNEL "group_replication_applier";

--echo # START SLAVE SQL_THREAD with UNTIL option will not work for group_replication_applier
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='11111111-1111-1111-1111-111111111111:1-23' FOR CHANNEL 'group_replication_applier';

--echo # START SLAVE SQL_THREAD with UNTIL option will not work for group_replication_applier
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE SQL_THREAD UNTIL RELAY_LOG_FILE = 'server-relay-log-group_replication_applier.000002', RELAY_LOG_POS = 10000 FOR CHANNEL 'group_replication_applier';

--echo
--echo # SHOW RELAYLOG EVENTS for channel will work for all channels
--let $relay_log_name= query_get_value(SHOW RELAYLOG EVENTS FOR CHANNEL 'group_replication_applier', Log_name, 1)
--let $assert_text= Relay log name should not be empty as the command successfully executed.
--let $assert_cond= "$relay_log_name" <> ""
--source include/assert.inc

# Part 2 - Checking the execution of the command when group_replication is OFF

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

--echo
--echo # CHANGE MASTER command is blocked for other options than `PRIVILEGE_CHECKS_USER`.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
CHANGE REPLICATION SOURCE TO SOURCE_HOST="localhost", SOURCE_PORT=10 FOR CHANNEL "group_replication_applier";

--echo
--echo # CHANGE MASTER command is blocked for other options than `PRIVILEGE_CHECKS_USER`.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
CHANGE REPLICATION SOURCE TO SOURCE_CONNECTION_AUTO_FAILOVER=1 FOR CHANNEL "group_replication_applier";

--echo
--echo # CHANGE MASTER command allows option `PRIVILEGE_CHECKS_USER` when GR is stopped
SET SESSION sql_log_bin= 0;
CREATE USER gr_applier_slave_user;
SET SESSION sql_log_bin= 1;

CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER='gr_applier_slave_user' FOR CHANNEL "group_replication_applier";
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER=NULL FOR CHANNEL "group_replication_applier";

SET SESSION sql_log_bin= 0;
DROP USER gr_applier_slave_user;
SET SESSION sql_log_bin= 1;

--echo
--echo # error when executing START SLAVE IO_THREAD FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE IO_THREAD FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing STOP SLAVE IO_THREAD FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
STOP SLAVE IO_THREAD FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing START SLAVE FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
START SLAVE FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing STOP SLAVE FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
STOP SLAVE FOR CHANNEL 'group_replication_applier';

--echo
--echo # error when executing SHOW SLAVE STATUS FOR CHANNEL
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
SHOW SLAVE STATUS FOR CHANNEL 'group_replication_applier';

--echo
--echo # START SLAVE SQL_THREAD command will work for group_replication_applier
--source include/gr_start_applier_sql_thread.inc

--echo
--echo # STOP SLAVE SQL_THREAD command will work for group_replication_applier
--source include/gr_stop_applier_sql_thread.inc

--echo
--echo # SHOW RELAYLOG EVENTS for channel will work for all channels
--let $relay_log_name= query_get_value(SHOW RELAYLOG EVENTS FOR CHANNEL 'group_replication_applier', Log_name, 1)
--let $assert_text= Relay log name should not be empty as the command successfully executed.
--let $assert_cond= "$relay_log_name" <> ""
--source include/assert.inc

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

--source include/start_group_replication.inc

# Checking the RESET SLAVE [ALL] commands execution.

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

--echo
--echo # RESET SLAVE [ALL] command is blocked only when channel is running.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
RESET SLAVE ALL FOR CHANNEL "group_replication_applier";

--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
RESET SLAVE FOR CHANNEL "group_replication_applier";

--echo
--echo # This is command should work without problem.
--source include/stop_group_replication.inc
RESET SLAVE FOR CHANNEL "group_replication_applier";
--source include/start_group_replication.inc

--echo
--echo # This is command should work without problem.
--source include/stop_group_replication.inc
RESET SLAVE ALL FOR CHANNEL "group_replication_applier";

# RESET SLAVE should not be allowed when Group_replication is running.
--source include/start_group_replication.inc
--echo # RESET SLAVE should not be allowed when GR is ONLINE.
--echo # So this command will fail.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
RESET SLAVE FOR CHANNEL "group_replication_applier";

--echo # RESET SLAVE ALL should not be allowed when GR is ONLINE.
--echo # So this command will fail.
--error ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED
RESET SLAVE ALL FOR CHANNEL "group_replication_applier";

--echo # stop the channel and try reset slave for channel again. It should work.
--source include/stop_group_replication.inc

RESET SLAVE ALL FOR CHANNEL "group_replication_applier";

--error ER_REPLICA_CHANNEL_DOES_NOT_EXIST
RESET SLAVE FOR CHANNEL "group_replication_applier";

--source include/group_replication_end.inc