1000 lines
26 KiB
Plaintext
1000 lines
26 KiB
Plaintext
#Want to skip this test from daily Valgrind execution
|
|
--source include/no_valgrind_without_big.inc
|
|
--source include/not_group_replication_plugin.inc
|
|
# Adding big test option for this test.
|
|
--source include/big_test.inc
|
|
--source include/have_debug_sync.inc
|
|
|
|
################################################################################
|
|
# This test case checks if a set of properties related to the GTIDs hold
|
|
# after rotating the binary/relay logs and after crashes. The properties
|
|
# are as follows:
|
|
#
|
|
# 1. Guarantee that an event generated on the master appears everywhere.
|
|
#
|
|
# Property 1.1 The set of GTIDs generated on the master are unique and
|
|
# monotonically created.
|
|
#
|
|
# Property 1.2 The set of GTIDs generated on the master are preserved
|
|
# in the relay log after being fetched.
|
|
#
|
|
# Property 1.2 The set of GTIDs generated on the master are preserved
|
|
# in the slave's binary log after execution.
|
|
#
|
|
# 2. Guarantee that the Previous GTIDs events are correctly stored everywhere.
|
|
#
|
|
# Property 2.1 - The Previous GTIDs stored in a binary log must represent the
|
|
# set of transactions stored in the previous binary logs.
|
|
#
|
|
# Property 2.2 - The Previous GTIDs stored in a relay log must represent the
|
|
# set of complete transactions stored in the previous relay
|
|
# logs.
|
|
#
|
|
# 3. Guarantee that RESET SLAVE/RESET MASTER cleans the appropriate states.
|
|
#
|
|
# Property 3.1 - RESET SLAVE cleans the GTIDs and previous GTIDs' state
|
|
# stored in the relay log.
|
|
#
|
|
# Property 3.2 - RESET MASTER cleans the GTIDs and previous GTIDs' state
|
|
# stored in the binary log.
|
|
#
|
|
# 4. With CHANGE MASTER TO MASTER_AUTO_POSITION coordinates are not used.
|
|
#
|
|
# Property 4.1 - When MASTER_AUTO_POSITION is specified only missing data
|
|
# transactions on the slave are retrieved from the master.
|
|
#
|
|
# We check if the aforementioned properties hold after generating a set
|
|
# of transactions and rotating logs through different methods:
|
|
#
|
|
# 1. On both master and slave, rotate logs through FLUSH LOGS.
|
|
# 2. On the slave, generate spreaded events by rotating the relay log using
|
|
# FLUSH RELAY LOGS when the IO thread is in the middle of a transaction.
|
|
# On the master, rotate logs through FLUSH LOGS.
|
|
# 3. On the slave, rotate logs by restarting the server. On the master,
|
|
# rotate logs through FLUSH LOGS.
|
|
# 4. On the slave, rotate logs by start/stop. On the master, rotate logs by
|
|
# restarting the server.
|
|
# 5. RESET SLAVE must not affect its binary log. On the master, rotate logs
|
|
# by restarting the server.
|
|
# 6. On the slave, rotate logs by start/stop and calling CHANGE MASTER TO
|
|
# with MASTER_AUTO_POSITION enabled. On the master, rotate logs through
|
|
# FLUSH LOGS.
|
|
# 7. On the slave, rotate logs by start/stop and calling START SLAVE UNTIL
|
|
# GTID. On the master, rotate logs through FLUSH LOGS.
|
|
#
|
|
# We also check if the aforementioned properties hold after crashes:
|
|
#
|
|
# 8. Binary logs without Previous GTIDs are generated simulating a crash
|
|
# right after the file is created.
|
|
#
|
|
# 9. Binary logs with corrupted GTIDs are generated simulating a crash
|
|
# while writing such information into the binary log.
|
|
################################################################################
|
|
--source include/not_windows.inc
|
|
--source include/have_debug.inc
|
|
--source include/master-slave.inc
|
|
|
|
--disable_warnings
|
|
call mtr.add_suppression("Recovery from master pos .*");
|
|
call mtr.add_suppression("Error in Log_event::read_log_event()");
|
|
call mtr.add_suppression("Failed to read information on Previous GTIDs.");
|
|
call mtr.add_suppression("Error reading GTIDs from binary log");
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1(id INTEGER) ENGINE= Innodb;
|
|
|
|
--let $master_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
|
|
--connection slave
|
|
--let $slave_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
|
|
|
|
|
|
#
|
|
# 1. This part of the test case:
|
|
#
|
|
# 1.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 1.2 - Makes the slave to retrieve and apply these transactions.
|
|
#
|
|
# 1.3 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 1 ====
|
|
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 1.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# Check property 1.1 and 2.1.
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 1.2 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--connection slave
|
|
|
|
# Check property 1.2 and 2.1.
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# Check property 1.3 and 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# Check property 1.1 and 2.1.
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $slave_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 1.3 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 2. This part of the test case:
|
|
#
|
|
# 2.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 2.2 - Makes the slave to retrieve these transactions and
|
|
# spread their events into two relay logs. Then apply
|
|
# the events.
|
|
#
|
|
# 2.3 - Rotates the binary log on the master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 2 ====
|
|
|
|
# This test was designed to sync slave with the master using positions
|
|
# instead of GTIDs. However, if the test is ran with GTID_MODE=ON it
|
|
# uses GTIDs to sync the slave with the master.
|
|
# When MTS is enabled, the slave may have the GITDs of transactions
|
|
# in the GTID_EXECUTED before updating slave's applier position, and
|
|
# this situation may lead to fail in this part of the test.
|
|
# So, it is better to ignore GTIDs on sync.
|
|
--let $ignore_gtids_on_sync= 1
|
|
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
--connection master
|
|
# This transaction will be the MASTER_UUID:1
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(0);
|
|
COMMIT;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
--source include/rpl_connection_slave.inc
|
|
--let $debug_point= pause_on_queuing_event
|
|
--source include/add_debug_point.inc
|
|
|
|
# 2.1 - Generates a set of transactions on the master.
|
|
# Each transaction will have more than three events
|
|
# depending on binlog format:
|
|
#
|
|
# GTID + QUERY(BEGIN) + QUERY(INSERT) + QUERY(INSERT) + XID
|
|
# or
|
|
# GTID + QUERY(BEGIN) + TABLE_MAP + ROWS + XID
|
|
#
|
|
# So, this part of the test will issue an "FLUSH LOCAL RELAY LOGS"
|
|
# on the slave right before queuing the fourth event of the
|
|
# transaction.
|
|
--source include/rpl_connection_master.inc
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
--let $event_counter= 3
|
|
--source include/rpl_connection_slave.inc
|
|
while ($event_counter > 0)
|
|
{
|
|
--echo Waiting for $event_counter more event(s) before flushing relaylog
|
|
# Wait for the IO thread to reach the beginning of queue_event.
|
|
SET DEBUG_SYNC='now WAIT_FOR reached_queuing_event';
|
|
# Let IO thread continue its work
|
|
SET DEBUG_SYNC= 'now SIGNAL continue_queuing_event';
|
|
--dec $event_counter
|
|
}
|
|
# Make the IO thread to create a new relaylog file while in the middle
|
|
# of a transaction.
|
|
FLUSH LOCAL RELAY LOGS;
|
|
# Wait for the IO thread to reach the beginning of queue_event.
|
|
SET DEBUG_SYNC='now WAIT_FOR reached_queuing_event';
|
|
# Make sure the test will not stop again in the beginning of queue_event.
|
|
--source include/remove_debug_point.inc
|
|
# Let IO thread continue its work
|
|
SET DEBUG_SYNC= 'now SIGNAL continue_queuing_event';
|
|
|
|
# 2.2 - Makes the slave to retrieve these transactions and
|
|
# spread their events into two relay logs. Then apply
|
|
# the events.
|
|
--source include/rpl_connection_master.inc
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check property 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i`
|
|
--let $gtid_ini=
|
|
--let $gtid_end=
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 2.3 - Rotates the binary log on the master.
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
--let $ignore_gtids_on_sync= 0
|
|
|
|
#
|
|
# 3. This part of the test case:
|
|
#
|
|
# 3.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 3.2 - Makes the slave to retrieve and apply these transactions
|
|
#
|
|
# 3.3 - Restarts the slave server to rotate binary and relay logs.
|
|
#
|
|
# 3.4 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 3 ====
|
|
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
|
|
--source include/stop_slave.inc
|
|
SET GLOBAL debug="";
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 3.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# 3.2 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check property 1.2 and 2.1.
|
|
--connection slave
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# Check property 1.3 and 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 3.3 - Restarts the slave server to rotate binary and relay logs.
|
|
--source include/stop_slave.inc
|
|
--let $rpl_server_number= 2
|
|
--source include/rpl_restart_server.inc
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
# 3.4 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 4. This part of the test case:
|
|
#
|
|
# 4.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 4.2 - Makes the slave to retrieve and apply these transactions
|
|
#
|
|
# 4.3 - Stops the slave, restart the master server and starts the
|
|
# slave to rotate both slave and master's binary and slave's
|
|
# relay logs.
|
|
#
|
|
# 4.4 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 4 ====
|
|
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 4.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# Check property 1.1 and 2.1.
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 4.2 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check property 1.2 and 2.1.
|
|
--connection slave
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# Check property 1.3 and 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 4.3 - Stops the slave, restart the master server and starts the
|
|
# slave.
|
|
--source include/stop_slave.inc
|
|
--connection master
|
|
--let $rpl_server_number= 1
|
|
--source include/rpl_restart_server.inc
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
# 4.4 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 5. This part of the test case:
|
|
#
|
|
# 5.1 - Resets the IO Thread's state but not SQL Thread's state.
|
|
#
|
|
# 5.2 - Generates a set of transactions on the master.
|
|
#
|
|
# 5.3 - Stops the slave, restart the master server and starts the
|
|
# slave to rotate both slave and master's binary and slave's
|
|
# relay logs.
|
|
#
|
|
# 5.4 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 5 ====
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 5.1 - Resets the IO Thread's state but not SQL Thread's state.
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
RESET SLAVE;
|
|
RESET MASTER;
|
|
--connection master
|
|
RESET MASTER;
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
# 5.2 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# 5.3 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
# Check property 1.2, 2.1, 3.1 and 3.2
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
--let $gtid_set_ini=
|
|
--let $gtid_set_end=
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 2
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 5.4 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 6. This part of the test case:
|
|
#
|
|
# 6.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 6.2 - Makes the slave to retrieve and apply these transactions through
|
|
# sync_slave_gtids_with_master
|
|
#
|
|
# 6.3 - Stop the slave, call CHANGE MASTER TO with MASTER_AUTO_POSITION and
|
|
# start the slave to rotate the relay log.
|
|
#
|
|
# 6.4 - Rotates the binary log on master by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 6 ====
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
RESET SLAVE;
|
|
RESET MASTER;
|
|
--connection master
|
|
RESET MASTER;
|
|
--connection slave
|
|
--let $slave_master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1)
|
|
--error ER_BAD_SLAVE_AUTO_POSITION
|
|
CHANGE MASTER TO MASTER_AUTO_POSITION= 1, MASTER_LOG_FILE= 'master-bin.000001', MASTER_LOG_POS= 4;
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
--let $slave_uuid= `SELECT @@GLOBAL.SERVER_UUID`
|
|
--connection master
|
|
--let $master_uuid= `SELECT @@GLOBAL.SERVER_UUID`
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 6.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
--let $wait_gtids_first= query_get_value(SHOW MASTER STATUS, Executed_Gtid_Set, 1)
|
|
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
--let $wait_gtids_second= query_get_value(SHOW MASTER STATUS, Executed_Gtid_Set, 1)
|
|
|
|
if (`SELECT ($i % 2) = 0`)
|
|
{
|
|
--connection slave
|
|
--replace_result $master_uuid MASTER_UUID $slave_uuid SLAVE_UUID
|
|
--disable_result_log
|
|
--eval SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('$wait_gtids_first', 300)
|
|
--enable_result_log
|
|
--replace_result $master_uuid MASTER_UUID $slave_uuid SLAVE_UUID
|
|
--disable_result_log
|
|
--eval SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('$wait_gtids_second', 300)
|
|
--enable_result_log
|
|
}
|
|
|
|
if (`SELECT ($i % 2) = 1`)
|
|
{
|
|
--connection slave
|
|
--replace_result $master_uuid MASTER_UUID $slave_uuid SLAVE_UUID
|
|
--disable_result_log
|
|
--eval SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('$wait_gtids_first')
|
|
--enable_result_log
|
|
--replace_result $master_uuid MASTER_UUID $slave_uuid SLAVE_UUID
|
|
--disable_result_log
|
|
--eval SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('$wait_gtids_second')
|
|
--enable_result_log
|
|
}
|
|
|
|
# Check property 4.1
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
--let $gtid_set_ini=
|
|
--let $gtid_set_end=
|
|
--let $gtid_ini= `SELECT ($i * 2) - 1`
|
|
--let $gtid_end= `SELECT $i * 2`
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 6.3 - Stop and start the slave, call CHANGE MASTER TO with MASTER_AUTO_POSITION.
|
|
--source include/stop_slave.inc
|
|
--replace_result $slave_master_host SLAVE_MASTER_HOST
|
|
--eval CHANGE MASTER TO MASTER_HOST= '$slave_master_host', MASTER_AUTO_POSITION= 1
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
# 6.4 - Rotates the binary log on master by calling FLUSH LOGS.
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 7. This part of the test case:
|
|
#
|
|
# 7.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 7.2 - Makes the slave to retrieve and apply these transactions through
|
|
# START SLAVE UNTIL GTID.
|
|
#
|
|
# 7.3 - Rotates the binary log on master by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 7 ====
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
RESET SLAVE;
|
|
RESET MASTER;
|
|
--connection master
|
|
RESET MASTER;
|
|
--connection slave
|
|
--let $slave_master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1)
|
|
--replace_result $slave_master_host SLAVE_MASTER_HOST
|
|
--eval CHANGE MASTER TO MASTER_HOST= '$slave_master_host', MASTER_AUTO_POSITION= 1
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 7.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# 7.2 - Makes the slave to retrieve and apply these transactions.
|
|
--connection slave
|
|
--let $sequence= `SELECT ($i * 2)`
|
|
--replace_result $master_uuid MASTER_UUID
|
|
--disable_warnings
|
|
--eval START SLAVE UNTIL SQL_BEFORE_GTIDS= "$master_uuid:$sequence"
|
|
--enable_warnings
|
|
--source include/wait_for_slave_sql_to_stop.inc
|
|
--source include/stop_slave.inc
|
|
|
|
# Check property 1.2 and 4.1.
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
--let $gtid_set_ini=
|
|
--let $gtid_set_end=
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= `SELECT ($i * 2) - 1`
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 7.3 - Rotates the binary log on master by calling FLUSH LOGS.
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 8. This part of the test case:
|
|
#
|
|
# 8.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 8.2 - Makes the slave to retrieve and apply these transactions
|
|
#
|
|
# 8.3 - Restarts the slave server to rotate binary and relay logs.
|
|
# However, binary logs without Previous Gtids are created.
|
|
#
|
|
# 8.4 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 8 ====
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
RESET MASTER;
|
|
RESET SLAVE;
|
|
--eval CHANGE MASTER TO MASTER_HOST= '$slave_master_host', MASTER_AUTO_POSITION= 0
|
|
--connection master
|
|
RESET MASTER;
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 8.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# 8.2 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check property 1.2 and 2.1.
|
|
--connection slave
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# Check property 1.3 and 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
# Post relay log recovery the previous GTIDs set should
|
|
# be empty.
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 8.3 - Restarts the slave server to rotate binary and relay logs.
|
|
--source include/stop_slave.inc
|
|
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --relay-log-recovery=1 --debug=d,skip_writing_previous_gtids_log_event
|
|
--source include/rpl_restart_server.inc
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --relay-log-recovery=1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
# 8.4 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
#
|
|
# 9. This part of the test case:
|
|
#
|
|
# 9.1 - Generates a set of transactions on the master.
|
|
#
|
|
# 9.2 - Makes the slave to retrieve and apply these transactions
|
|
#
|
|
# 9.3 - Restarts the slave server to rotate binary and relay logs.
|
|
# However, binary logs with corrupted Previous Gtids are created.
|
|
#
|
|
# 9.4 - Rotates both the binary logs on the slave and master
|
|
# by calling FLUSH LOGS.
|
|
#
|
|
|
|
--echo ==== Part 9 ====
|
|
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
|
|
--let $i=1
|
|
while ($i != 5)
|
|
{
|
|
--echo ---- i=$i ----
|
|
|
|
# 9.1 - Generates a set of transactions on the master.
|
|
--connection master
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES(1);
|
|
INSERT INTO t1 VALUES(2);
|
|
COMMIT;
|
|
|
|
# 9.2 - Makes the slave to retrieve and apply these transactions.
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check property 1.2 and 2.1.
|
|
--connection slave
|
|
--let $binlog= binlog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 1
|
|
--let $gtid_set_end= `SELECT $i - 1`
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# Check property 1.3 and 2.2.
|
|
--let $binlog= relaylog
|
|
--let $server_uuid= $master_uuid
|
|
if ($i == 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= 1
|
|
--let $gtid_end= 1
|
|
}
|
|
# Post relay log recovery the previous GTIDs set should
|
|
# be empty.
|
|
if ($i != 1)
|
|
{
|
|
--let $gtid_set_ini= 0
|
|
--let $gtid_set_end= 0
|
|
--let $gtid_ini= `SELECT $i`
|
|
--let $gtid_end= `SELECT $i`
|
|
}
|
|
--source extra/rpl_tests/rpl_check_gtid.inc
|
|
|
|
# 9.3 - Restarts the slave server to rotate binary and relay logs.
|
|
--source include/stop_slave.inc
|
|
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --relay-log-recovery=1 --debug=d,write_partial_previous_gtids_log_event
|
|
--source include/rpl_restart_server.inc
|
|
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --relay-log-recovery=1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
--connection slave
|
|
--disable_warnings
|
|
--source include/start_slave.inc
|
|
--enable_warnings
|
|
# 9.4 - Rotates both the binary logs on the slave and master.
|
|
FLUSH LOGS;
|
|
--connection master
|
|
FLUSH LOGS;
|
|
|
|
inc $i;
|
|
}
|
|
|
|
--disable_warnings
|
|
--source include/rpl_reset.inc
|
|
--enable_warnings
|
|
|
|
--connection master
|
|
DROP TABLE t1;
|
|
|
|
--echo # Failure on creating compression thread
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--source include/stop_slave.inc
|
|
call mtr.add_suppression("Can not create thread to compress gtid_executed table .*");
|
|
--let $rpl_server_number= 2
|
|
--let $rpl_server_parameters= --debug=d,simulate_create_compress_thread_failure
|
|
--source include/rpl_restart_server.inc
|
|
--let $assert_text= compression thread is destroied;
|
|
--let $assert_cond= COUNT(*) = 0 FROM performance_schema.threads WHERE NAME LIKE "%compress_gtid_table"
|
|
--source include/assert.inc
|
|
call mtr.add_suppression("Plugin 'InnoDB' will be forced to shutdown");
|
|
call mtr.add_suppression("Plugin 'InnoDB' has ref_count=.* after shutdown");
|
|
--let $rpl_server_parameters=
|
|
# Restart slave server without setting simulate_create_compress_thread_failure
|
|
--source include/rpl_restart_server.inc
|
|
--source include/start_slave.inc
|
|
|
|
--source include/rpl_end.inc
|