Skip to content

Commit dd95c58

Browse files
bnesterevuvova
authored andcommitted
MDEV-33331: IO Thread Relay Log Inconsistent Statistics After MDEV-32551
After MDEV-32551, in a master/slave setup, if the replica's IO thread quickly and successively reconnects (i.e quickly running STOP SLAVE IO_THREAD followed by START SLAVE IO_THREAD), the relay log rotation behavior changes. That is, MDEV-32551 changed the logic of the binlog_dump_thread on the primary, such that it can stop itself before sending any events if it sees a new connection has been created to a replica with the same server_id. Pre MDEV-32551, the connection would establish and it would send a "fake" rotate event to populate the log name. Post MDEV-32551, the connection stops itself, and a rotate event is not sent. This made the test rpl.rpl_mariadb_slave_capability unstable because it is reliant on the name of the relay logs (which is dependent on the number of rotates); and the pre-amble of the test would quickly start/stop the IO thread. There a binlog dump thread could end itself before sending a rotate event to the replica, thereby changing the name of the relay log. This patch fixes this by adding in a synchronization in-between IO thread restarts, such that it waits for the primary's binlog dump threads to sync up with the state of the replica.
1 parent 8c5db7a commit dd95c58

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

mysql-test/suite/rpl/r/rpl_mariadb_slave_capability.result

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ connection slave;
66
include/stop_slave.inc
77
CHANGE MASTER TO MASTER_USE_GTID=NO;
88
include/start_slave.inc
9+
connection master;
10+
# Ensure only the new binlog dump thread is alive (wait for the old one
11+
# to complete its kill)
12+
# And that it has already sent its fake rotate
13+
connection slave;
914
include/stop_slave.inc
1015
# Test slave with no capability gets dummy event, which is ignored.
1116
set @old_dbug= @@global.debug_dbug;

mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@ connection slave;
1818
CHANGE MASTER TO MASTER_USE_GTID=NO;
1919
--source include/start_slave.inc
2020

21+
--connection master
22+
--echo # Ensure only the new binlog dump thread is alive (wait for the old one
23+
--echo # to complete its kill)
24+
--let $wait_condition= select count(*)=1 from information_schema.processlist where command='Binlog Dump'
25+
--source include/wait_condition.inc
26+
27+
--echo # And that it has already sent its fake rotate
28+
--let $wait_condition= select count(*)=1 from information_schema.processlist where state LIKE '%Master has sent all binlog to slave%' and command='Binlog Dump'
29+
--source include/wait_condition.inc
30+
31+
32+
--connection slave
2133
--source include/stop_slave.inc
2234
--echo # Test slave with no capability gets dummy event, which is ignored.
2335
set @old_dbug= @@global.debug_dbug;

0 commit comments

Comments
 (0)