132 lines
3.6 KiB
Plaintext
132 lines
3.6 KiB
Plaintext
# ==== Purpose ====
|
|
#
|
|
# Auxiliary test file included by 'binlog_gtid_next_xa.test'.
|
|
#
|
|
# This executes an XA PREPARE transaction, followed by an XA COMMIT or
|
|
# XA ROLLBACK transaction. It sets specified values of GTID_NEXT
|
|
# before each of the two transactions. After each transaction it
|
|
# verifies that GTID ownership is as expected.
|
|
#
|
|
# ==== Usage ====
|
|
#
|
|
# --let $gtid1= [<GTID> | ANONYMOUS | AUTOMATIC]
|
|
# --let $gtid2= [<GTID> | ANONYMOUS | AUTOMATIC | none]
|
|
# --let $commit= [COMMIT | ROLLBACK]
|
|
# --let $error= [0 | N]
|
|
# --let $one_phase = [one phase]
|
|
# --source extra/rpl_tests/rpl_gtid_next_xa.test
|
|
#
|
|
# Parameters:
|
|
#
|
|
# $commit
|
|
# If this is COMMIT, the second transaction will be an XA COMMIT
|
|
# transaction. If this is ROLLBACK, the second transaction will be
|
|
# an XA ROLLBACK transaction.
|
|
#
|
|
# $gtid1
|
|
# The value to use for GTID_NEXT for the first transaction
|
|
# (XA PREPARE).
|
|
#
|
|
# $gtid2
|
|
# The value to use for GTID_NEXT for the second transaction
|
|
# (XA COMMIT/ROLLBACK). If this is 'none', no SET GTID_NEXT
|
|
# statement is used and the previous value is reused.
|
|
#
|
|
# $error
|
|
# This is GTID setting related error.
|
|
# Normally, this script expects all statements to succeed. For
|
|
# those cases, the caller must set $error=0. But if $gtid1 is a
|
|
# GTID and $gtid2 is none, ER_GTID_NEXT_TYPE_UNDEFINED_GTID is
|
|
# expected for the second transaction. Then the caller must set
|
|
# $error= ER_GTID_NEXT_TYPE_UNDEFINED_GTID.
|
|
#
|
|
# $one_phase
|
|
# Option to commit XA in one phase
|
|
|
|
|
|
--echo ---- XID $xid, $commit: $gtid1 + $gtid2 ----
|
|
--source include/rpl_connection_master.inc
|
|
|
|
if ($gtid1 != none)
|
|
{
|
|
eval SET GTID_NEXT= '$gtid1';
|
|
}
|
|
|
|
eval XA START '$xid';
|
|
eval INSERT INTO t1 VALUES($xid);
|
|
eval XA END '$xid';
|
|
if (!$one_phase)
|
|
{
|
|
eval XA PREPARE '$xid';
|
|
|
|
|
|
--let $assert_text= Thread should not own any GTID.
|
|
--let $assert_cond= @@SESSION.GTID_OWNED = ""
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_master1.inc
|
|
|
|
--let $assert_text= No thread should own any GTID.
|
|
--let $assert_cond= @@GLOBAL.GTID_OWNED = ""
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= No thread should hold anonymous ownership.
|
|
--let $assert_cond= [SHOW STATUS LIKE "ONGOING_ANONYMOUS_TRANSACTION_COUNT", Value, 1] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
|
|
--echo error=$error
|
|
if ($gtid2 != none)
|
|
{
|
|
eval SET GTID_NEXT= '$gtid2';
|
|
}
|
|
|
|
if ($error)
|
|
{
|
|
# Generate erratic statement, check that GTID ownership is ok, then
|
|
# set GTID_NEXT to valid value to allow the statement to execute
|
|
# correctly.
|
|
|
|
--error $error
|
|
eval XA $commit '$xid';
|
|
|
|
--source include/rpl_connection_master1.inc
|
|
|
|
--let $assert_text= No thread should own any GTID.
|
|
--let $assert_cond= @@GLOBAL.GTID_OWNED = ""
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= No thread should hold anonymous ownership.
|
|
--let $assert_cond= [SHOW STATUS LIKE "ONGOING_ANONYMOUS_TRANSACTION_COUNT", Value, 1] = 0
|
|
--source include/assert.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
|
|
SET GTID_NEXT = 'AUTOMATIC';
|
|
}
|
|
}
|
|
|
|
if ($commit == ROLLBACK)
|
|
{
|
|
# Reset $one_phase to empty in this case to satisfy syntax
|
|
--let $one_phase=
|
|
}
|
|
eval XA $commit '$xid' $one_phase;
|
|
|
|
--let $assert_text= Thread should not own any GTID.
|
|
--let $assert_cond= @@SESSION.GTID_OWNED = ""
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= No thread should own any GTID.
|
|
--let $assert_cond= @@GLOBAL.GTID_OWNED = ""
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text= No thread should hold anonymous ownership.
|
|
--let $assert_cond= [SHOW STATUS LIKE "ONGOING_ANONYMOUS_TRANSACTION_COUNT", Value, 1] = 0
|
|
--source include/assert.inc
|
|
|
|
ROLLBACK;
|
|
--inc $xid
|
|
SET GTID_NEXT = 'AUTOMATIC';
|