@@ -15,11 +15,15 @@ call mtr.add_suppression("reply failed");
15
15
call mtr.add_suppression("Replication event checksum verification");
16
16
call mtr.add_suppression("Relay log write failure");
17
17
call mtr.add_suppression("Failed to kill the active semi-sync connection");
18
+ set @sav_enabled_server_2= @@GLOBAL.rpl_semi_sync_slave_enabled;
19
+ set @sav_server_2_dbug= @@GLOBAL.debug_dbug;
18
20
connection server_3;
19
21
call mtr.add_suppression("reply failed");
20
22
call mtr.add_suppression("Replication event checksum verification");
21
23
call mtr.add_suppression("Relay log write failure");
22
24
call mtr.add_suppression("Failed to kill the active semi-sync connection");
25
+ set @sav_enabled_server_3= @@GLOBAL.rpl_semi_sync_slave_enabled;
26
+ set @sav_server_3_dbug= @@GLOBAL.debug_dbug;
23
27
connection server_1;
24
28
CREATE TABLE t1 (a int);
25
29
connection server_2;
@@ -40,15 +44,15 @@ connection server_1;
40
44
#-- Enable semi-sync on slaves
41
45
let slave_last= 3
42
46
connection server_2;
43
- set global rpl_semi_sync_slave_enabled = 1;
44
47
include/stop_slave.inc
48
+ set global rpl_semi_sync_slave_enabled = 1;
45
49
include/start_slave.inc
46
50
show status like 'Rpl_semi_sync_slave_status';
47
51
Variable_name Value
48
52
Rpl_semi_sync_slave_status ON
49
53
connection server_3;
50
- set global rpl_semi_sync_slave_enabled = 1;
51
54
include/stop_slave.inc
55
+ set global rpl_semi_sync_slave_enabled = 1;
52
56
include/start_slave.inc
53
57
show status like 'Rpl_semi_sync_slave_status';
54
58
Variable_name Value
@@ -67,24 +71,20 @@ show status like 'Rpl_semi_sync_master_clients';
67
71
Variable_name Value
68
72
Rpl_semi_sync_master_clients 2
69
73
#-- Prepare servers to simulate delay or error
70
- connection server_1;
71
- SET @@GLOBAL.debug_dbug= "";
72
74
connection server_2;
73
75
SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
74
76
connection server_3;
75
77
SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
76
78
#--
77
79
#-- Test begins
80
+ connection server_1_con2;
81
+ #-- Give enough time after timeout/ack received to query yes_tx/no_tx
82
+ SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
78
83
connection server_1;
79
84
#-- Begin semi-sync transaction
80
85
INSERT INTO t1 VALUES (1);
81
86
connection server_1_con2;
82
87
#-- Wait until master recognizes a connection is awaiting semi-sync ACK
83
- show status like 'Rpl_semi_sync_master_wait_sessions';
84
- Variable_name Value
85
- Rpl_semi_sync_master_wait_sessions 1
86
- #-- Give enough time after timeout/ack received to query yes_tx/no_tx
87
- SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
88
88
#-- Begin master shutdown
89
89
SHUTDOWN WAIT FOR ALL SLAVES;
90
90
connection server_1;
@@ -111,22 +111,19 @@ count(*)=1
111
111
#-- Re-synchronize slaves with master and disable semi-sync
112
112
#-- Stop slaves
113
113
connection server_2;
114
- SET @@GLOBAL.debug_dbug= "";
115
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
116
- include/stop_slave.inc
114
+ include/stop_slave_io.inc
115
+ include/stop_slave_sql.inc
116
+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
117
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_2;
117
118
connection server_3;
118
- SET @@GLOBAL.debug_dbug= "";
119
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
120
- include/stop_slave.inc
119
+ include/stop_slave_io.inc
120
+ include/stop_slave_sql.inc
121
+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
122
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_3;
121
123
#-- Bring the master back up
122
124
connection server_1_con2;
123
125
connection default;
124
126
connection server_1;
125
- SET @@GLOBAL.debug_dbug= "";
126
- SET @@GLOBAL.rpl_semi_sync_master_enabled = 0;
127
- show status like 'Rpl_semi_sync_master_status';
128
- Variable_name Value
129
- Rpl_semi_sync_master_status OFF
130
127
TRUNCATE TABLE t1;
131
128
#-- Bring slaves back up
132
129
connection server_2;
@@ -157,15 +154,15 @@ connection server_1;
157
154
#-- Enable semi-sync on slaves
158
155
let slave_last= 3
159
156
connection server_2;
160
- set global rpl_semi_sync_slave_enabled = 1;
161
157
include/stop_slave.inc
158
+ set global rpl_semi_sync_slave_enabled = 1;
162
159
include/start_slave.inc
163
160
show status like 'Rpl_semi_sync_slave_status';
164
161
Variable_name Value
165
162
Rpl_semi_sync_slave_status ON
166
163
connection server_3;
167
- set global rpl_semi_sync_slave_enabled = 1;
168
164
include/stop_slave.inc
165
+ set global rpl_semi_sync_slave_enabled = 1;
169
166
include/start_slave.inc
170
167
show status like 'Rpl_semi_sync_slave_status';
171
168
Variable_name Value
@@ -184,24 +181,20 @@ show status like 'Rpl_semi_sync_master_clients';
184
181
Variable_name Value
185
182
Rpl_semi_sync_master_clients 2
186
183
#-- Prepare servers to simulate delay or error
187
- connection server_1;
188
- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
189
184
connection server_2;
190
- SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event";
185
+ SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event,delay_semisync_kill_connection_for_mdev_28141 ";
191
186
connection server_3;
192
- SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event";
187
+ SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event,delay_semisync_kill_connection_for_mdev_28141 ";
193
188
#--
194
189
#-- Test begins
190
+ connection server_1_con2;
191
+ #-- Give enough time after timeout/ack received to query yes_tx/no_tx
192
+ SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
195
193
connection server_1;
196
194
#-- Begin semi-sync transaction
197
195
INSERT INTO t1 VALUES (1);
198
196
connection server_1_con2;
199
197
#-- Wait until master recognizes a connection is awaiting semi-sync ACK
200
- show status like 'Rpl_semi_sync_master_wait_sessions';
201
- Variable_name Value
202
- Rpl_semi_sync_master_wait_sessions 1
203
- #-- Give enough time after timeout/ack received to query yes_tx/no_tx
204
- SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
205
198
#-- Begin master shutdown
206
199
SHUTDOWN WAIT FOR ALL SLAVES;
207
200
connection server_1;
@@ -226,24 +219,33 @@ count(*)=0
226
219
1
227
220
#
228
221
#-- Re-synchronize slaves with master and disable semi-sync
222
+ #-- FIXME: workaround for MDEV-28141, preventing errored replicas from
223
+ # killing their semi-sync connections
224
+ connection server_2;
225
+ set debug_sync= "now wait_for at_semisync_kill_connection";
226
+ set debug_sync= "now signal continue_semisync_kill_connection";
227
+ # Wait for debug_sync signal to have been received before issuing RESET
228
+ set debug_sync= "reset";
229
+ connection server_3;
230
+ set debug_sync= "now wait_for at_semisync_kill_connection";
231
+ set debug_sync= "now signal continue_semisync_kill_connection";
232
+ # Wait for debug_sync signal to have been received before issuing RESET
233
+ set debug_sync= "reset";
229
234
#-- Stop slaves
230
235
connection server_2;
231
- SET @@GLOBAL.debug_dbug= "";
232
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
233
- include/stop_slave.inc
236
+ include/stop_slave_io.inc
237
+ include/stop_slave_sql.inc
238
+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
239
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_2;
234
240
connection server_3;
235
- SET @@GLOBAL.debug_dbug= "";
236
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
237
- include/stop_slave.inc
241
+ include/stop_slave_io.inc
242
+ include/stop_slave_sql.inc
243
+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
244
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_3;
238
245
#-- Bring the master back up
239
246
connection server_1_con2;
240
247
connection default;
241
248
connection server_1;
242
- SET @@GLOBAL.debug_dbug= "";
243
- SET @@GLOBAL.rpl_semi_sync_master_enabled = 0;
244
- show status like 'Rpl_semi_sync_master_status';
245
- Variable_name Value
246
- Rpl_semi_sync_master_status OFF
247
249
TRUNCATE TABLE t1;
248
250
#-- Bring slaves back up
249
251
connection server_2;
@@ -275,15 +277,15 @@ connection server_1;
275
277
#-- Enable semi-sync on slaves
276
278
let slave_last= 3
277
279
connection server_2;
278
- set global rpl_semi_sync_slave_enabled = 1;
279
280
include/stop_slave.inc
281
+ set global rpl_semi_sync_slave_enabled = 1;
280
282
include/start_slave.inc
281
283
show status like 'Rpl_semi_sync_slave_status';
282
284
Variable_name Value
283
285
Rpl_semi_sync_slave_status ON
284
286
connection server_3;
285
- set global rpl_semi_sync_slave_enabled = 1;
286
287
include/stop_slave.inc
288
+ set global rpl_semi_sync_slave_enabled = 1;
287
289
include/start_slave.inc
288
290
show status like 'Rpl_semi_sync_slave_status';
289
291
Variable_name Value
@@ -302,24 +304,20 @@ show status like 'Rpl_semi_sync_master_clients';
302
304
Variable_name Value
303
305
Rpl_semi_sync_master_clients 2
304
306
#-- Prepare servers to simulate delay or error
305
- connection server_1;
306
- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
307
307
connection server_2;
308
- SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event";
308
+ SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event,delay_semisync_kill_connection_for_mdev_28141 ";
309
309
connection server_3;
310
310
SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
311
311
#--
312
312
#-- Test begins
313
+ connection server_1_con2;
314
+ #-- Give enough time after timeout/ack received to query yes_tx/no_tx
315
+ SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
313
316
connection server_1;
314
317
#-- Begin semi-sync transaction
315
318
INSERT INTO t1 VALUES (1);
316
319
connection server_1_con2;
317
320
#-- Wait until master recognizes a connection is awaiting semi-sync ACK
318
- show status like 'Rpl_semi_sync_master_wait_sessions';
319
- Variable_name Value
320
- Rpl_semi_sync_master_wait_sessions 1
321
- #-- Give enough time after timeout/ack received to query yes_tx/no_tx
322
- SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
323
321
#-- Begin master shutdown
324
322
SHUTDOWN WAIT FOR ALL SLAVES;
325
323
connection server_1;
@@ -344,24 +342,28 @@ count(*)=1
344
342
1
345
343
#
346
344
#-- Re-synchronize slaves with master and disable semi-sync
345
+ #-- FIXME: workaround for MDEV-28141, preventing errored replicas from
346
+ # killing their semi-sync connections
347
+ connection server_2;
348
+ set debug_sync= "now wait_for at_semisync_kill_connection";
349
+ set debug_sync= "now signal continue_semisync_kill_connection";
350
+ # Wait for debug_sync signal to have been received before issuing RESET
351
+ set debug_sync= "reset";
347
352
#-- Stop slaves
348
353
connection server_2;
349
- SET @@GLOBAL.debug_dbug= "";
350
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
351
- include/stop_slave.inc
354
+ include/stop_slave_io.inc
355
+ include/stop_slave_sql.inc
356
+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
357
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_2;
352
358
connection server_3;
353
- SET @@GLOBAL.debug_dbug= "";
354
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
355
- include/stop_slave.inc
359
+ include/stop_slave_io.inc
360
+ include/stop_slave_sql.inc
361
+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
362
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_3;
356
363
#-- Bring the master back up
357
364
connection server_1_con2;
358
365
connection default;
359
366
connection server_1;
360
- SET @@GLOBAL.debug_dbug= "";
361
- SET @@GLOBAL.rpl_semi_sync_master_enabled = 0;
362
- show status like 'Rpl_semi_sync_master_status';
363
- Variable_name Value
364
- Rpl_semi_sync_master_status OFF
365
367
TRUNCATE TABLE t1;
366
368
#-- Bring slaves back up
367
369
connection server_2;
@@ -399,15 +401,15 @@ connection server_1;
399
401
#-- Enable semi-sync on slaves
400
402
let slave_last= 3
401
403
connection server_2;
402
- set global rpl_semi_sync_slave_enabled = 1;
403
404
include/stop_slave.inc
405
+ set global rpl_semi_sync_slave_enabled = 1;
404
406
include/start_slave.inc
405
407
show status like 'Rpl_semi_sync_slave_status';
406
408
Variable_name Value
407
409
Rpl_semi_sync_slave_status ON
408
410
connection server_3;
409
- set global rpl_semi_sync_slave_enabled = 1;
410
411
include/stop_slave.inc
412
+ set global rpl_semi_sync_slave_enabled = 1;
411
413
include/start_slave.inc
412
414
show status like 'Rpl_semi_sync_slave_status';
413
415
Variable_name Value
@@ -426,24 +428,20 @@ show status like 'Rpl_semi_sync_master_clients';
426
428
Variable_name Value
427
429
Rpl_semi_sync_master_clients 2
428
430
#-- Prepare servers to simulate delay or error
429
- connection server_1;
430
- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
431
431
connection server_2;
432
- SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event,slave_delay_killing_semisync_connection ";
432
+ SET @@GLOBAL.debug_dbug= "+d,corrupt_queue_event,delay_semisync_kill_connection_for_mdev_28141 ";
433
433
connection server_3;
434
434
SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
435
435
#--
436
436
#-- Test begins
437
+ connection server_1_con2;
438
+ #-- Give enough time after timeout/ack received to query yes_tx/no_tx
439
+ SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
437
440
connection server_1;
438
441
#-- Begin semi-sync transaction
439
442
INSERT INTO t1 VALUES (1);
440
443
connection server_1_con2;
441
444
#-- Wait until master recognizes a connection is awaiting semi-sync ACK
442
- show status like 'Rpl_semi_sync_master_wait_sessions';
443
- Variable_name Value
444
- Rpl_semi_sync_master_wait_sessions 1
445
- #-- Give enough time after timeout/ack received to query yes_tx/no_tx
446
- SET @@GLOBAL.debug_dbug= "+d,delay_shutdown_phase_2_after_semisync_wait";
447
445
#-- Begin master shutdown
448
446
SHUTDOWN WAIT FOR ALL SLAVES;
449
447
connection server_1;
@@ -468,24 +466,28 @@ count(*)=1
468
466
1
469
467
#
470
468
#-- Re-synchronize slaves with master and disable semi-sync
469
+ #-- FIXME: workaround for MDEV-28141, preventing errored replicas from
470
+ # killing their semi-sync connections
471
+ connection server_2;
472
+ set debug_sync= "now wait_for at_semisync_kill_connection";
473
+ set debug_sync= "now signal continue_semisync_kill_connection";
474
+ # Wait for debug_sync signal to have been received before issuing RESET
475
+ set debug_sync= "reset";
471
476
#-- Stop slaves
472
477
connection server_2;
473
- SET @@GLOBAL.debug_dbug= "";
474
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
475
- include/stop_slave.inc
478
+ include/stop_slave_io.inc
479
+ include/stop_slave_sql.inc
480
+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
481
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_2;
476
482
connection server_3;
477
- SET @@GLOBAL.debug_dbug= "";
478
- SET @@GLOBAL.rpl_semi_sync_slave_enabled= 0;
479
- include/stop_slave.inc
483
+ include/stop_slave_io.inc
484
+ include/stop_slave_sql.inc
485
+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
486
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled= @sav_enabled_server_3;
480
487
#-- Bring the master back up
481
488
connection server_1_con2;
482
489
connection default;
483
490
connection server_1;
484
- SET @@GLOBAL.debug_dbug= "";
485
- SET @@GLOBAL.rpl_semi_sync_master_enabled = 0;
486
- show status like 'Rpl_semi_sync_master_status';
487
- Variable_name Value
488
- Rpl_semi_sync_master_status OFF
489
491
TRUNCATE TABLE t1;
490
492
#-- Bring slaves back up
491
493
connection server_2;
@@ -509,9 +511,13 @@ COUNT(*)=0
509
511
#############################
510
512
connection server_2;
511
513
include/stop_slave.inc
514
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled = @sav_enabled_server_2;
515
+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
512
516
include/start_slave.inc
513
517
connection server_3;
514
518
include/stop_slave.inc
519
+ SET @@GLOBAL.rpl_semi_sync_slave_enabled = @sav_enabled_server_3;
520
+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
515
521
include/start_slave.inc
516
522
connection server_1;
517
523
drop table t1;
0 commit comments