You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
6.2 KiB
262 lines
6.2 KiB
# Skipping the test when logbin is enabled due to Bug#22292900
|
|
--source include/not_log_bin.inc
|
|
|
|
# This file contains XA-related test cases that requires mysql server
|
|
# built with debug.
|
|
--source include/not_valgrind.inc
|
|
--source include/have_debug.inc
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("Found 1 prepared XA transactions");
|
|
--enable_query_log
|
|
|
|
--echo #
|
|
--echo # WL#7155: Test 1: check that prepared transaction branch
|
|
--echo # is recovered after abnormal server termination.
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT) ENGINE=INNODB;
|
|
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
XA PREPARE 'xid1';
|
|
|
|
--disable_query_log
|
|
set session debug="+d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
# Write file to make mysql-test-run.pl wait for the server to stop
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
|
|
--error 2013
|
|
XA RECOVER;
|
|
|
|
# Call script that will poll the server waiting for it to disappear
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--source include/start_mysqld.inc
|
|
|
|
--disable_query_log
|
|
set session debug="-d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
XA RECOVER;
|
|
SELECT * FROM t1;
|
|
XA COMMIT 'xid1';
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # WL#7155: Test 2: check that in case of abnormal server termination
|
|
--echo # the changes done by unprepared transaction branch will be rolled back
|
|
--echo # after the server restart.
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT) ENGINE=INNODB;
|
|
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
|
|
--disable_query_log
|
|
set session debug="+d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
# Write file to make mysql-test-run.pl wait for the server to stop
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
|
|
--error 2013
|
|
XA RECOVER;
|
|
|
|
# Call script that will poll the server waiting for it to disappear
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--source include/start_mysqld.inc
|
|
|
|
--disable_query_log
|
|
set session debug="-d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
XA RECOVER;
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # WL#7155: Test 3: Check that escaped "'" symbol for xid value
|
|
--echo # is handled correctly during recovering XA transaction.
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT) ENGINE=INNODB;
|
|
|
|
XA START 'xid1', 'br\'_1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1', 'br\'_1';
|
|
XA PREPARE 'xid1', 'br\'_1';
|
|
|
|
--disable_query_log
|
|
set session debug="+d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
# Write file to make mysql-test-run.pl wait for the server to stop
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
|
|
--error 2013
|
|
XA RECOVER;
|
|
|
|
# Call script that will poll the server waiting for it to disappear
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--source include/start_mysqld.inc
|
|
|
|
--disable_query_log
|
|
set session debug="-d,crash_after_xa_recover";
|
|
--enable_query_log
|
|
|
|
XA RECOVER;
|
|
XA ROLLBACK 'xid1', 'br\'_1';
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#18068253 - XA START WITH THE EXIST XID, AND THEN XA COMMIT WITH THE XID WILL FAILED
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT) ENGINE=INNODB;
|
|
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
XA PREPARE 'xid1';
|
|
|
|
set session debug="+d,crash_after_xa_recover";
|
|
|
|
# Write file to make mysql-test-run.pl wait for the server to stop
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
|
|
--error 2013
|
|
XA RECOVER;
|
|
|
|
# Call script that will poll the server waiting for it to disappear
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--source include/start_mysqld.inc
|
|
|
|
set session debug="-d,crash_after_xa_recover";
|
|
|
|
XA RECOVER;
|
|
|
|
--error ER_XAER_DUPID
|
|
XA START 'xid1';
|
|
|
|
XA COMMIT 'xid1';
|
|
DROP TABLE t1;
|
|
|
|
|
|
--echo #
|
|
--echo # Bug#20538956 - XA PREPARE ERROR BRANCH LEAVES THE TRANSACTION IN SCREWED STATE
|
|
--echo #
|
|
--connect (con1, 127.0.0.1,root,,test,$MASTER_MYPORT,)
|
|
CREATE TABLE t1 (a INT);
|
|
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
SET @@session.debug = '+d,simulate_xa_failure_prepare';
|
|
--error ER_XA_RBROLLBACK
|
|
XA PREPARE 'xid1';
|
|
SET @@session.debug = '-d,simulate_xa_failure_prepare';
|
|
|
|
--error ER_XAER_NOTA
|
|
XA ROLLBACK 'xid1';
|
|
|
|
#
|
|
# The following query failed before patch applied.
|
|
#
|
|
|
|
XA START 'trx_another_one';
|
|
--disconnect con1
|
|
|
|
--connection default
|
|
--echo #
|
|
--echo # Bug#20488921 - ERROR PROPAGATION DOES NOT FULLY WORK IN XA
|
|
--echo #
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
XA PREPARE 'xid1';
|
|
SET @@session.debug= '+d,simulate_xa_commit_log_failure';
|
|
--error ER_XAER_RMERR
|
|
XA COMMIT 'xid1';
|
|
# Without a patch for the bug#20488921 execution of the following SET statement
|
|
# led to an assert firing.
|
|
SET @@session.debug= '-d,simulate_xa_commit_log_failure';
|
|
# The following statement is just to check that there isn't any XA transaction
|
|
# independently from its state.
|
|
INSERT INTO t1 VALUES (2);
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # Bug#23264552 - XA: ASSERT `m_status == da_error' IN mysql_errno:sql_error.h:385
|
|
--echo #
|
|
--connect (con1, 127.0.0.1,root,,test,$MASTER_MYPORT,)
|
|
CREATE TABLE t1 (a INT);
|
|
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
SET @@session.debug = '+d,simulate_xa_failure_prepare_in_engine';
|
|
--error ER_XA_RBROLLBACK
|
|
XA PREPARE 'xid1';
|
|
SET @@session.debug = '-d,simulate_xa_failure_prepare_in_engine';
|
|
|
|
--error ER_XAER_NOTA
|
|
XA ROLLBACK 'xid1';
|
|
|
|
#
|
|
# Check that subsequent XA transaction can be initiated.
|
|
#
|
|
|
|
XA START 'trx_another_one';
|
|
--disconnect con1
|
|
--source include/wait_until_disconnected.inc
|
|
--connection default
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # BUG#29293279 -- XA COMMIT MAY LEAD REPLICATION BROKEN
|
|
--echo #
|
|
|
|
--echo Establish session con1
|
|
connect (con1,localhost,root,,);
|
|
CREATE TABLE t1(a INT);
|
|
XA START 'xid1';
|
|
INSERT INTO t1 VALUES (1);
|
|
XA END 'xid1';
|
|
XA PREPARE 'xid1';
|
|
--echo Disconnect con1 to save the XA transaction with xid1 into the cache
|
|
--disconnect con1
|
|
--source include/wait_until_disconnected.inc
|
|
|
|
--enable_connect_log
|
|
connect (con2,localhost,root,,);
|
|
|
|
set debug_sync='external_xa_commit_after_acquire_commit_lock SIGNAL parked WAIT_FOR go';
|
|
--send XA COMMIT 'xid1'
|
|
|
|
--connection default
|
|
set debug_sync='now WAIT_FOR parked';
|
|
set debug_sync='external_xa_commit_before_acquire_xa_lock SIGNAL go';
|
|
--error ER_XAER_NOTA
|
|
XA COMMIT 'xid1';
|
|
|
|
DROP TABLE t1;
|
|
--disable_connect_log
|
|
|