@@ -15,11 +15,15 @@ call mtr.add_suppression("reply failed");
1515call mtr.add_suppression("Replication event checksum verification");
1616call mtr.add_suppression("Relay log write failure");
1717call 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;
1820connection server_3;
1921call mtr.add_suppression("reply failed");
2022call mtr.add_suppression("Replication event checksum verification");
2123call mtr.add_suppression("Relay log write failure");
2224call 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;
2327connection server_1;
2428CREATE TABLE t1 (a int);
2529connection server_2;
@@ -40,15 +44,15 @@ connection server_1;
4044#-- Enable semi-sync on slaves
4145let slave_last= 3
4246connection server_2;
43- set global rpl_semi_sync_slave_enabled = 1;
4447include/stop_slave.inc
48+ set global rpl_semi_sync_slave_enabled = 1;
4549include/start_slave.inc
4650show status like 'Rpl_semi_sync_slave_status';
4751Variable_name Value
4852Rpl_semi_sync_slave_status ON
4953connection server_3;
50- set global rpl_semi_sync_slave_enabled = 1;
5154include/stop_slave.inc
55+ set global rpl_semi_sync_slave_enabled = 1;
5256include/start_slave.inc
5357show status like 'Rpl_semi_sync_slave_status';
5458Variable_name Value
@@ -67,24 +71,20 @@ show status like 'Rpl_semi_sync_master_clients';
6771Variable_name Value
6872Rpl_semi_sync_master_clients 2
6973#-- Prepare servers to simulate delay or error
70- connection server_1;
71- SET @@GLOBAL.debug_dbug= "";
7274connection server_2;
7375SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
7476connection server_3;
7577SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
7678#--
7779#-- 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";
7883connection server_1;
7984#-- Begin semi-sync transaction
8085INSERT INTO t1 VALUES (1);
8186connection server_1_con2;
8287#-- 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";
8888#-- Begin master shutdown
8989SHUTDOWN WAIT FOR ALL SLAVES;
9090connection server_1;
@@ -111,22 +111,19 @@ count(*)=1
111111#-- Re-synchronize slaves with master and disable semi-sync
112112#-- Stop slaves
113113connection 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;
117118connection 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;
121123#-- Bring the master back up
122124connection server_1_con2;
123125connection default;
124126connection 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
130127TRUNCATE TABLE t1;
131128#-- Bring slaves back up
132129connection server_2;
@@ -157,15 +154,15 @@ connection server_1;
157154#-- Enable semi-sync on slaves
158155let slave_last= 3
159156connection server_2;
160- set global rpl_semi_sync_slave_enabled = 1;
161157include/stop_slave.inc
158+ set global rpl_semi_sync_slave_enabled = 1;
162159include/start_slave.inc
163160show status like 'Rpl_semi_sync_slave_status';
164161Variable_name Value
165162Rpl_semi_sync_slave_status ON
166163connection server_3;
167- set global rpl_semi_sync_slave_enabled = 1;
168164include/stop_slave.inc
165+ set global rpl_semi_sync_slave_enabled = 1;
169166include/start_slave.inc
170167show status like 'Rpl_semi_sync_slave_status';
171168Variable_name Value
@@ -184,24 +181,20 @@ show status like 'Rpl_semi_sync_master_clients';
184181Variable_name Value
185182Rpl_semi_sync_master_clients 2
186183#-- Prepare servers to simulate delay or error
187- connection server_1;
188- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
189184connection 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 ";
191186connection 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 ";
193188#--
194189#-- 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";
195193connection server_1;
196194#-- Begin semi-sync transaction
197195INSERT INTO t1 VALUES (1);
198196connection server_1_con2;
199197#-- 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";
205198#-- Begin master shutdown
206199SHUTDOWN WAIT FOR ALL SLAVES;
207200connection server_1;
@@ -226,24 +219,33 @@ count(*)=0
2262191
227220#
228221#-- 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";
229234#-- Stop slaves
230235connection 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;
234240connection 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;
238245#-- Bring the master back up
239246connection server_1_con2;
240247connection default;
241248connection 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
247249TRUNCATE TABLE t1;
248250#-- Bring slaves back up
249251connection server_2;
@@ -275,15 +277,15 @@ connection server_1;
275277#-- Enable semi-sync on slaves
276278let slave_last= 3
277279connection server_2;
278- set global rpl_semi_sync_slave_enabled = 1;
279280include/stop_slave.inc
281+ set global rpl_semi_sync_slave_enabled = 1;
280282include/start_slave.inc
281283show status like 'Rpl_semi_sync_slave_status';
282284Variable_name Value
283285Rpl_semi_sync_slave_status ON
284286connection server_3;
285- set global rpl_semi_sync_slave_enabled = 1;
286287include/stop_slave.inc
288+ set global rpl_semi_sync_slave_enabled = 1;
287289include/start_slave.inc
288290show status like 'Rpl_semi_sync_slave_status';
289291Variable_name Value
@@ -302,24 +304,20 @@ show status like 'Rpl_semi_sync_master_clients';
302304Variable_name Value
303305Rpl_semi_sync_master_clients 2
304306#-- Prepare servers to simulate delay or error
305- connection server_1;
306- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
307307connection 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 ";
309309connection server_3;
310310SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
311311#--
312312#-- 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";
313316connection server_1;
314317#-- Begin semi-sync transaction
315318INSERT INTO t1 VALUES (1);
316319connection server_1_con2;
317320#-- 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";
323321#-- Begin master shutdown
324322SHUTDOWN WAIT FOR ALL SLAVES;
325323connection server_1;
@@ -344,24 +342,28 @@ count(*)=1
3443421
345343#
346344#-- 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";
347352#-- Stop slaves
348353connection 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;
352358connection 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;
356363#-- Bring the master back up
357364connection server_1_con2;
358365connection default;
359366connection 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
365367TRUNCATE TABLE t1;
366368#-- Bring slaves back up
367369connection server_2;
@@ -399,15 +401,15 @@ connection server_1;
399401#-- Enable semi-sync on slaves
400402let slave_last= 3
401403connection server_2;
402- set global rpl_semi_sync_slave_enabled = 1;
403404include/stop_slave.inc
405+ set global rpl_semi_sync_slave_enabled = 1;
404406include/start_slave.inc
405407show status like 'Rpl_semi_sync_slave_status';
406408Variable_name Value
407409Rpl_semi_sync_slave_status ON
408410connection server_3;
409- set global rpl_semi_sync_slave_enabled = 1;
410411include/stop_slave.inc
412+ set global rpl_semi_sync_slave_enabled = 1;
411413include/start_slave.inc
412414show status like 'Rpl_semi_sync_slave_status';
413415Variable_name Value
@@ -426,24 +428,20 @@ show status like 'Rpl_semi_sync_master_clients';
426428Variable_name Value
427429Rpl_semi_sync_master_clients 2
428430#-- Prepare servers to simulate delay or error
429- connection server_1;
430- SET @@GLOBAL.debug_dbug= "+d,mysqld_delay_kill_threads_phase_1";
431431connection 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 ";
433433connection server_3;
434434SET @@GLOBAL.debug_dbug= "+d,simulate_delay_semisync_slave_reply";
435435#--
436436#-- 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";
437440connection server_1;
438441#-- Begin semi-sync transaction
439442INSERT INTO t1 VALUES (1);
440443connection server_1_con2;
441444#-- 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";
447445#-- Begin master shutdown
448446SHUTDOWN WAIT FOR ALL SLAVES;
449447connection server_1;
@@ -468,24 +466,28 @@ count(*)=1
4684661
469467#
470468#-- 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";
471476#-- Stop slaves
472477connection 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;
476482connection 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;
480487#-- Bring the master back up
481488connection server_1_con2;
482489connection default;
483490connection 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
489491TRUNCATE TABLE t1;
490492#-- Bring slaves back up
491493connection server_2;
@@ -509,9 +511,13 @@ COUNT(*)=0
509511#############################
510512connection server_2;
511513include/stop_slave.inc
514+ SET @@GLOBAL.rpl_semi_sync_slave_enabled = @sav_enabled_server_2;
515+ SET @@GLOBAL.debug_dbug= @sav_server_2_dbug;
512516include/start_slave.inc
513517connection server_3;
514518include/stop_slave.inc
519+ SET @@GLOBAL.rpl_semi_sync_slave_enabled = @sav_enabled_server_3;
520+ SET @@GLOBAL.debug_dbug= @sav_server_3_dbug;
515521include/start_slave.inc
516522connection server_1;
517523drop table t1;
0 commit comments