config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/rpl/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/rpl/t/rpl_xa_prepare.test

###############################################################################
# Bug#25041920 GTID AUTO SKIP DOES NOT WORK ON XA TRANSACTION ON SQL THREAD
#
# Problem: Server has a mechanism to skip (silently) a GTID transaction if
#           it is already executed that particular transaction in the past.
#           This GTID transaction skipping mechanism is not working properly
#           for XA transaction.
#
# Steps to reproduce:
#  1: Execute a XA transaction on Master.
#  2: While Slave is downloading the XA transaction, rotate the relaylog in
#     between the transaction (exactly before XA_PREPARE event which is
#     needed to test step 3.1.
#  3: Test the XA transaction on Slave that can go through four
#     different execution paths
#         3.1>  gtid_pre_statement_post_implicit_commit_checks returns
#               GTID_STATEMENT_CANCEL
#         3.2>  gtid_pre_statement_checks returns GTID_STATEMENT_CANCEL
#         3.3>  XA transaction is succesfully applied
#         3.4>  gtid_pre_statement_checks returns GTID_STATEMENT_SKIP
###############################################################################

# Gtids are mandatory for the test.
--source include/have_gtid.inc

# This test should run only on debug build
# (rpl_receive_count.inc's restriction)
--source include/have_debug.inc
--source include/have_debug_sync.inc

# This test script changes SQL thread coordinates in between
# which is not possible if AUTO_POSITION is active. So disable
# it for the testing purpose.
--let $use_gtids=0

# Start Master-slave replication
--source include/master-slave.inc

# Initial setup
CREATE TABLE t1 (c1 INT);
CREATE TABLE t2 (c1 INT);
--source include/sync_slave_sql_with_master.inc
FLUSH RELAY LOGS;
CALL mtr.add_suppression("@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON");
CALL mtr.add_suppression("When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK");
CALL mtr.add_suppression("Cannot execute the current event group");
CALL mtr.add_suppression("The slave coordinator and worker threads are stopped");
--source include/stop_slave.inc

###################################################
# Step-1: Execute a XA transaction on Master.
###################################################

--source include/rpl_connection_master.inc
XA START 'trx1';
--disable_warnings
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (1);
--enable_warnings
XA END 'trx1';
XA PREPARE 'trx1';
XA COMMIT 'trx1';

###############################################################################
# Step-2: While Slave is downloading the XA transaction, rotate the relaylog in
#         between the transaction (exactly before XA_PREPARE event which is
#         needed to test step 3.1.
###############################################################################
--source include/rpl_connection_slave.inc
--let $rpl_after_received_events_action= flush
--let $rpl_skip_event_count_print_in_result_log= 1
if (`SELECT @@BINLOG_FORMAT != 'STATEMENT'`)
{
  --let $rpl_event_count= 7
}
if (`SELECT @@BINLOG_FORMAT = 'STATEMENT'`)
{
  --let $rpl_event_count= 5
}
--source include/rpl_receive_event_count.inc

# Assert that the XA_PREPARE is in the expected relay log file
--let $binlog_limit= 2, 3
--let $binlog_file=slave-relay-bin.000005
--source include/show_relaylog_events.inc

--source include/rpl_connection_master.inc
--source include/sync_slave_io_with_master.inc

###############################################################################
# Step-3: Test the XA transaction on Slave that can go through four
#         different execution paths
#         3.1>  gtid_pre_statement_post_implicit_commit_checks returns
#               GTID_STATEMENT_CANCEL
#         3.2>  gtid_pre_statement_checks returns GTID_STATEMENT_CANCEL
#         3.3>  XA transaction is succesfully applied
#         3.4>  gtid_pre_statement_checks returns GTID_STATEMENT_SKIP
###############################################################################
# Stop IO thread which is not needed for the rest of this step.
--source include/stop_slave_io.inc

###############################################################################
# Step 3.1: Make gtid_pre_statement_post_implicit_commit_checks to return
#           GTID_STATEMENT_CANCEL. If a transaction is started without
#           executing it's GTID_NEXT, it will complain with error
#           ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON
#           or ER_MTS_CANT_PARALLEL (incase of MTS enabled server).
###############################################################################
CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000005', RELAY_LOG_POS=4;
START SLAVE SQL_THREAD;
--let $sts_error= convert_error(ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON)
--let $mts_error= convert_error(ER_MTS_CANT_PARALLEL)
--let $slave_sql_errno= $sts_error, $mts_error
--source include/wait_for_slave_sql_error.inc

###############################################################################
# Step 3.2: Make gtid_pre_statement_checks to return GTID_STATEMENT_CANCEL.
#           If a transaction is involved with non-transactional DML followed
#           by transactional DML, gtid_pre_statement_checks will complain that
#           GTID_NEXT is set to UNDEFINED_GROUP while it is executing
#           transactional DML as GTID that came from Master is utilized by
#           non-transaction DML alone.
###############################################################################
# Change table t1's engine to MyISAM.
ALTER TABLE t1 engine=MyISAM;

# Start SQL thread from the begining of the XA transaction.
CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4;
START SLAVE SQL_THREAD;

# SQL thread should fail with ER_GTID_NEXT_TYPE_UNDEFINED_GROUP
--let $slave_sql_errno= convert_error(ER_GTID_NEXT_TYPE_UNDEFINED_GROUP)
--source include/wait_for_slave_sql_error.inc

# Cleanup the mess created by this testcase
ALTER TABLE t1 engine=Innodb;
DELETE FROM t1;
RESET MASTER;

###############################################################################
# Step-3.3: Start SQL thread from the begining of the XA transaction.
#           This time SQL thread should succesfully apply full XA transaction
#           without any issues.
###############################################################################
CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4;
--source include/start_slave_sql.inc
--source include/rpl_connection_master.inc
--source include/sync_slave_sql_with_master.inc

# Assert that the data was inserted into slave's tables.
# (i.e., the GTID transaction wasn't skipped)
--let diff_tables=master:t1, slave:t1
--source include/diff_tables.inc

--let diff_tables=master:t2, slave:t2
--source include/diff_tables.inc

###############################################################################
# Step-3.4: Again start SQL thread from the begining of the XA transaction.
#           This time SQL thread should skip these gtid transactions
#           without any issues (as the gtid transactions are already
#           executed once).
###############################################################################
--source include/stop_slave_sql.inc
CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.000004', RELAY_LOG_POS=4;
--source include/start_slave_sql.inc

# Check that SQL thread reached end point.
--source include/sync_slave_sql_with_io.inc

# Assert that no new data was inserted into slave's tables.
# (i.e., the GTID transaction was skipped)
--let diff_tables=master:t1, slave:t1
--source include/diff_tables.inc

--let diff_tables=master:t2, slave:t2
--source include/diff_tables.inc

###########
# Cleanup
###########
--source include/start_slave_io.inc
--source include/rpl_connection_master.inc
DROP TABLE t1, t2;
CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction");
--source include/rpl_end.inc

Man Man