Commit 632dd304 authored by Brandon Nesterenko's avatar Brandon Nesterenko

MDEV-34554: rpl_change_master_demote sporadically fails on buildbot

MDEV-34274 did not fix the test failure. The test has a START SLAVE
UNTIL condition, where we can't use sync_with_master_gtid.inc,
wait_for_slave_to_start.inc, or wait_for_slave_to_stop.inc because
our MTR connection thread races with the start/stop of the SQL/IO
threads. So instead, for slave start, we prove the threads started
by waiting for the connection count to increase by 2; and for slave
stop, we wait for the processlist count to return to its pre start
slave number.
parent fa804497
...@@ -501,8 +501,7 @@ Warnings: ...@@ -501,8 +501,7 @@ Warnings:
Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mariadbd restart Note 1278 It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mariadbd restart
# Slave needs time to start and stop automatically # Slave needs time to start and stop automatically
# Waiting for both SQL and IO threads to have started.. # Waiting for both SQL and IO threads to have started..
# Waiting for SQL thread to be killed.. # Waiting for Slave SQL and IO threads to be killed..
# Waiting for IO thread to be killed..
# Validating neither SQL nor IO threads are running.. # Validating neither SQL nor IO threads are running..
# ..success # ..success
# Clean slave state of master # Clean slave state of master
......
...@@ -277,36 +277,43 @@ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHER ...@@ -277,36 +277,43 @@ SELECT VARIABLE_NAME, GLOBAL_VALUE FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES WHER
--echo # position pointing to a previous event (because --echo # position pointing to a previous event (because
--echo # master_demote_to_slave=1 merges gtid_binlog_pos into gtid_slave_pos). --echo # master_demote_to_slave=1 merges gtid_binlog_pos into gtid_slave_pos).
--let $pre_start_slave_thread_count= query_get_value(SHOW STATUS LIKE 'Connections', Value, 1) # Note that we can't use sync_with_master_gtid.inc,
# wait_for_slave_to_start.inc, or wait_for_slave_to_stop.inc because our MTR
# connection thread races with the start/stop of the SQL/IO threads. So
# instead, for slave start, we prove the threads started by waiting for the
# connection count to increase by 2; and for slave stop, we wait for the
# processlist count to return to its pre start slave number.
--let $pre_start_slave_conn_count= query_get_value(SHOW STATUS LIKE 'Connections', Value, 1)
--let $pre_start_slave_process_count= `SELECT count(*) from information_schema.PROCESSLIST`
--replace_result $ssu_middle_binlog_pos ssu_middle_binlog_pos --replace_result $ssu_middle_binlog_pos ssu_middle_binlog_pos
eval START SLAVE UNTIL master_gtid_pos="$ssu_middle_binlog_pos"; eval START SLAVE UNTIL master_gtid_pos="$ssu_middle_binlog_pos";
--echo # Slave needs time to start and stop automatically --echo # Slave needs time to start and stop automatically
--echo # Waiting for both SQL and IO threads to have started.. --echo # Waiting for both SQL and IO threads to have started..
--let $expected_cons_after_start_slave= `SELECT ($pre_start_slave_thread_count + 2)` --let $expected_cons_after_start_slave= `SELECT ($pre_start_slave_conn_count + 2)`
--let $status_var= Connections --let $status_var= Connections
--let $status_var_value= $expected_cons_after_start_slave --let $status_var_value= $expected_cons_after_start_slave
--let $status_var_comparsion= >= --let $status_var_comparsion= >=
--source include/wait_for_status_var.inc --source include/wait_for_status_var.inc
--let $status_var_comparsion= --let $status_var_comparsion=
--echo # Waiting for SQL thread to be killed.. --echo # Waiting for Slave SQL and IO threads to be killed..
--let $wait_condition= SELECT count(*)=0 from information_schema.PROCESSLIST where COMMAND="Slave_SQL" --let $wait_condition= SELECT count(*)=$pre_start_slave_process_count from information_schema.PROCESSLIST
--source include/wait_condition.inc
--echo # Waiting for IO thread to be killed..
--let $wait_condition= SELECT count(*)=0 from information_schema.PROCESSLIST where COMMAND="Slave_IO"
--source include/wait_condition.inc --source include/wait_condition.inc
--echo # Validating neither SQL nor IO threads are running.. --echo # Validating neither SQL nor IO threads are running..
--let $io_state= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1) --let $io_state= query_get_value("SHOW SLAVE STATUS", Slave_IO_State, 1)
if (`SELECT strcmp("$io_state","") != 0`) if (`SELECT strcmp("$io_state","") != 0`)
{ {
--echo # Slave_IO_State is "$io_state" but should be empty
die "IO thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID"; die "IO thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID";
} }
--let $sql_state= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running_State, 1) --let $sql_state= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running_State, 1)
if (`SELECT strcmp("$sql_state","") != 0`) if (`SELECT strcmp("$sql_state","") != 0`)
{ {
--echo # Slave_SQL_Running_State is "$sql_state" but should be empty
die "SQL thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID"; die "SQL thread should not be running after START SLAVE UNTIL master_gtid_pos using a pre-existing GTID";
} }
--echo # ..success --echo # ..success
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment