config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/binlog/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/binlog/t/binlog_xa_prepare_failure.test

###############################################################################
# Bug#22915670 'XA ROLLBACK' ASSERTS AFTER FAILED XA PREPARE
# Problem: A 'XA PREPARE' that is failed in intermediate steps is leaving the
# 'xa' transaction state in a bad way (ID = -1 but binlogged flag is 'true').
# This is causing problems (hitting asserts) while executing
# 'XA COMMIT/ROLLBACK' queries.
# Steps to reproduce:
#  1) Start a XA transaction
#  2) Inject a failure point for 'XA PREPARE'
#  3) Execute 'XA PREPARE'. Check that 'XA PREPARE' failed as expected.
#  4) After failure, execute XA ROLLBACK or XA COMMIT.
#      It should fail with UNKNOWN XID error instead of ASSERT.
#  5) Repeat step 2 and 4 with different failure points.
###############################################################################
--source include/have_debug.inc
--source include/have_log_bin.inc
CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction");

# Initial setup
SET @save_session_debug= @@SESSION.debug;
CREATE TABLE t1 (a INT PRIMARY KEY);

# Loop through three failure points
--let $iter=1
while ($iter <= 3)
{
  # Step-1: Start A XA transaction.
  XA START 'xa1';
  --disable_warnings
  INSERT INTO t1 VALUES (1);
  --enable_warnings
  XA END 'xa1';

  # Step-2: Inject a failure point for 'XA PREPARE'
  if ( $iter == 1)
  {
    SET @@SESSION.debug = "+d,simulate_xa_prepare_failure_in_cache_finalize";
  }
  if ( $iter == 2)
  {
    SET @@SESSION.debug = "+d,simulate_failure_in_before_commit_hook";
  }
  if ( $iter == 3)
  {
    SET @@SESSION.debug = "+d,simulate_transaction_rollback_request";
  }

  # Step-3: Execute 'XA PREPARE' and check that 'XA PREPARE' failed as expected.
  --error ER_XA_RBROLLBACK,ER_TRANSACTION_ROLLBACK_DURING_COMMIT
  XA PREPARE 'xa1';

  # Step-4: Execute 'XA COMMIT/ XA ROLLBACK'. Check that it fails with error.
  --error ER_XAER_NOTA
  XA ROLLBACK 'xa1';
  --error ER_XAER_NOTA
  XA COMMIT 'xa1';

  # Step-5: Repeat for other failure points.
  --inc $iter
}

# Cleanup
SET @@SESSION.debug= @save_session_debug;
DROP TABLE t1;

Man Man