94 lines
2.8 KiB
Plaintext
94 lines
2.8 KiB
Plaintext
# ==== Purpose ====
|
|
#
|
|
# Verify if the slave SQL thread is avoiding to update position when a Rotate
|
|
# event is applied in the middle of a group.
|
|
#
|
|
# This test will execute two INSERT statements in the master and will use
|
|
# a debug sync point in the slave to rotate the relay log (restarting the IO
|
|
# thread) after each Write_rows event be queued into the relay log.
|
|
#
|
|
# The slave SQL thread should not update its position while in the middle of
|
|
# the transaction.
|
|
#
|
|
# After the last stop of the IO thread, the SQL thread will also be stopped.
|
|
#
|
|
# Both threads will be started to finish the test.
|
|
#
|
|
# A problematic SQL thread will restart in the middle of the transaction and
|
|
# will skip the first INSERT statement.
|
|
#
|
|
# ==== Related Bugs and Worklogs ====
|
|
#
|
|
# Bug #18482854 RPL : ROTATE_LOG_EVENT INCORRECTLY ADVANCES GROUP_RELAY_LOG_POS
|
|
# IN A GROUP
|
|
#
|
|
--source include/have_binlog_format_row.inc
|
|
--source include/master-slave.inc
|
|
# Test should run only on debug build
|
|
source include/have_debug.inc;
|
|
source include/have_debug_sync.inc;
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state");
|
|
--enable_query_log
|
|
|
|
--echo # Initial setup
|
|
--source include/rpl_connection_master.inc
|
|
CREATE TABLE t1 (c1 INT) ENGINE=InnoDB;
|
|
|
|
--echo # Sync slave with master and setup debug sync point
|
|
--source include/sync_slave_sql_with_master.inc
|
|
SET @save_debug=@@global.debug;
|
|
SET GLOBAL DEBUG='d,stop_io_after_reading_write_rows_log_event';
|
|
|
|
--echo # Insert the data in the master
|
|
--source include/rpl_connection_master.inc
|
|
|
|
--let iterations= 2
|
|
--let $inserts= 0
|
|
BEGIN;
|
|
while ($inserts < $iterations)
|
|
{
|
|
--eval INSERT INTO t1 (c1) VALUES ($inserts)
|
|
--inc $inserts
|
|
}
|
|
COMMIT;
|
|
|
|
--echo # Restart the IO thread keeping SQL thread running until last relay log split
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $restarts= $iterations
|
|
|
|
while ($restarts)
|
|
{
|
|
--source include/wait_for_slave_io_to_stop.inc
|
|
--dec $restarts
|
|
if ($restarts)
|
|
{
|
|
START SLAVE IO_THREAD;
|
|
}
|
|
}
|
|
|
|
--echo # Stop the SQL thread (it should be in the middle of the transaction/group)
|
|
--let $slave_sql_errno= convert_error(ER_MTS_INCONSISTENT_DATA)
|
|
--source include/stop_slave_sql.inc
|
|
|
|
--echo # Remove the debug point and restart the both threads
|
|
SET GLOBAL DEBUG= @save_debug;
|
|
--source include/start_slave.inc
|
|
|
|
--echo # Do one more insert on master and then sync slave with master
|
|
--source include/rpl_connection_master.inc
|
|
--eval INSERT INTO t1 (c1) VALUES ($inserts)
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--echo # Now compare master and slave's t1 table data
|
|
--source include/rpl_connection_master.inc
|
|
--let diff_tables= master:t1, slave:t1
|
|
--source include/diff_tables.inc
|
|
|
|
--echo # Cleanup
|
|
--source include/rpl_connection_master.inc
|
|
DROP TABLE t1;
|
|
--source include/rpl_end.inc
|