You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Copy file name to clipboardExpand all lines: mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
+12Lines changed: 12 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,18 @@ connection slave;
18
18
CHANGE MASTER TO MASTER_USE_GTID=NO;
19
19
--source include/start_slave.inc
20
20
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
21
33
--source include/stop_slave.inc
22
34
--echo # Test slave with no capability gets dummy event, which is ignored.
0 commit comments