136 lines
5.2 KiB
PHP
136 lines
5.2 KiB
PHP
# This file is used by rpl.rpl_perfschema_connection_applier_status and
|
|
# rpl.rpl_perfschema_connection_applier_status_mts
|
|
#
|
|
# Five transaction types are tested:
|
|
# - create table
|
|
# - insert
|
|
# - update
|
|
# - delete
|
|
# - drop table
|
|
# For each statement, the test asserts that the information concerning the
|
|
# transaction that is currently being processed matches what is expected
|
|
# before and after each of the following replication stages is completed for
|
|
# that transaction:
|
|
# 1) The connection thread queues the transaction to be applied by the applier
|
|
# thread (table: performance_schema.replication_connection_status)
|
|
# 2) If MTS is enabled, the coordinator puts the transaction into a worker's
|
|
# queue (table: performance_schema.replication_applier_status_by_coordinator)
|
|
# 3) The applier thread applies the transaction
|
|
# (table: performance_schema.replication_applier_status_by_worker)
|
|
#
|
|
# param: $is_mts [0,1] 1 if MTS test
|
|
|
|
|
|
--let $current_gtid= ANONYMOUS
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--let $last_gtid= query_get_value(select LAST_QUEUED_TRANSACTION from performance_schema.replication_connection_status, LAST_QUEUED_TRANSACTION, 1)
|
|
# when an mts slave is stopped, the table
|
|
# performance_schema.replication_applier_status_by_worker is cleared, which
|
|
# means that LAST_APPLIED_TRANSACTION will be void.
|
|
--let $last_gtid_applied= query_get_value(select LAST_APPLIED_TRANSACTION from performance_schema.replication_applier_status_by_worker, LAST_APPLIED_TRANSACTION, 1)
|
|
--let $debug_point= rpl_ps_tables
|
|
--source include/add_debug_point.inc
|
|
|
|
--source include/stop_slave_io.inc
|
|
--source include/rpl_connection_master.inc
|
|
|
|
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
|
|
{
|
|
--let $current_gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1
|
|
--disable_query_log
|
|
eval SET SESSION GTID_NEXT= '$current_gtid';
|
|
--enable_query_log
|
|
}
|
|
CREATE TABLE t (a int);
|
|
|
|
--let $is_first_stmt= 1
|
|
--source extra/rpl_tests/rpl_check_ps_connection_applier_status_tables.inc
|
|
--let $is_first_stmt= 0
|
|
|
|
--source include/stop_slave_io.inc
|
|
--source include/rpl_connection_master.inc
|
|
--let $last_gtid= $current_gtid
|
|
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
|
|
{
|
|
--let $current_gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2
|
|
--disable_query_log
|
|
eval SET SESSION GTID_NEXT= '$current_gtid';
|
|
--enable_query_log
|
|
}
|
|
INSERT INTO t VALUES(1);
|
|
--source extra/rpl_tests/rpl_check_ps_connection_applier_status_tables.inc
|
|
|
|
--source include/stop_slave_io.inc
|
|
--source include/rpl_connection_master.inc
|
|
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
|
|
{
|
|
--let $last_gtid= $current_gtid
|
|
--let $current_gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:3
|
|
--disable_query_log
|
|
eval SET SESSION GTID_NEXT= '$current_gtid';
|
|
--enable_query_log
|
|
}
|
|
UPDATE t SET a=2;
|
|
--source extra/rpl_tests/rpl_check_ps_connection_applier_status_tables.inc
|
|
|
|
--source include/stop_slave_io.inc
|
|
--source include/rpl_connection_master.inc
|
|
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
|
|
{
|
|
--let $last_gtid= $current_gtid
|
|
--let $current_gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:4
|
|
--disable_query_log
|
|
eval SET SESSION GTID_NEXT= '$current_gtid';
|
|
--enable_query_log
|
|
}
|
|
DELETE FROM t WHERE a=2;
|
|
--source extra/rpl_tests/rpl_check_ps_connection_applier_status_tables.inc
|
|
|
|
--source include/stop_slave_io.inc
|
|
--source include/rpl_connection_master.inc
|
|
if ( `SELECT @@GLOBAL.GTID_MODE = 'ON'` )
|
|
{
|
|
--let $last_gtid= $current_gtid
|
|
--let $current_gtid= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:5
|
|
--disable_query_log
|
|
eval SET SESSION GTID_NEXT= '$current_gtid';
|
|
--enable_query_log
|
|
}
|
|
DROP TABLE t;
|
|
--source extra/rpl_tests/rpl_check_ps_connection_applier_status_tables.inc
|
|
|
|
--let $debug_point= rpl_ps_tables
|
|
--source include/remove_debug_point.inc
|
|
|
|
# Assert that the information in the worker table is kept when the slave is
|
|
# stopped and started in case of a STS, or that assert that the
|
|
# information in the worker table is kept and cleared correctly when the slave
|
|
# is stopped and restarted when MTS is in use.
|
|
--let $last_applied_gtid_before_stop= query_get_value(select LAST_APPLIED_TRANSACTION from performance_schema.replication_applier_status_by_worker, LAST_APPLIED_TRANSACTION, 1)
|
|
--source include/stop_slave.inc
|
|
--let $last_applied_gtid= query_get_value(select LAST_APPLIED_TRANSACTION from performance_schema.replication_applier_status_by_worker, LAST_APPLIED_TRANSACTION, 1)
|
|
--let $assert_text= Assert that the gtid is kept while the slave is stopped
|
|
--let $assert_cond= "$last_applied_gtid" = "$last_applied_gtid_before_stop"
|
|
--source include/assert.inc
|
|
--source include/start_slave.inc
|
|
--let $last_applied_gtid= query_get_value(select LAST_APPLIED_TRANSACTION from performance_schema.replication_applier_status_by_worker, LAST_APPLIED_TRANSACTION, 1)
|
|
if ( $is_mts )
|
|
{
|
|
--let $assert_text= Assert that the gtid is clear because the slave was stopped and started
|
|
--let $assert_cond= "$last_applied_gtid" = ""
|
|
}
|
|
if ( !$is_mts)
|
|
{
|
|
--let $assert_text= Assert that the gtid is kept after the slave was stopped and started
|
|
--let $assert_cond= "$last_applied_gtid" = "$last_applied_gtid_before_stop"
|
|
}
|
|
--source include/assert.inc
|
|
|
|
|
|
--source include/rpl_connection_master.inc
|
|
SET SESSION GTID_NEXT= AUTOMATIC;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--source include/rpl_connection_master.inc
|