From: Jon Olav Hauglid Date: April 13 2011 10:44am Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3440) Bug#12352846 List-Archive: http://lists.mysql.com/commits/135318 X-Bug: 12352846 Message-Id: <201104131045.p3DAj0Z8028028@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3085388911021359776==" --===============3085388911021359776== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-bug12352846/ based on revid:dmitry.lenev@stripped 3440 Jon Olav Hauglid 2011-04-13 Bug#12352846 - TRANS_XA_START(THD*): ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL() FAILED The triggered assert checks that the previous XA transaction has done proper cleanup before a new XA transaction is started. The bug that caused it to be triggered was that XA COMMIT did not clean up error state if XA COMMIT discovered that the current XA transaction had to be rolled back. This patch fixes the problem by resetting the XA error state before XA COMMIT calls ha_rollback_trans(). This allows following XA transactions to be started without triggering the assert. Test case added to xa.test. modified: mysql-test/r/xa.result mysql-test/t/xa.test sql/transaction.cc === modified file 'mysql-test/r/xa.result' --- a/mysql-test/r/xa.result 2011-04-12 10:57:02 +0000 +++ b/mysql-test/r/xa.result 2011-04-13 10:44:48 +0000 @@ -200,3 +200,32 @@ SELECT * FROM t1; a 1 DROP TABLE t1; +# +# Bug#12352846 - TRANS_XA_START(THD*): +# ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL() +# FAILED +# +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1 (a INT); +CREATE TABLE t2 (a INT); +START TRANSACTION; +INSERT INTO t1 VALUES (1); +# Connection con2 +XA START 'xid1'; +# Sending: +INSERT INTO t2 SELECT a FROM t1; +# Connection default +# Waiting until INSERT ... is blocked +DELETE FROM t1; +COMMIT; +# Connection con2 +# Reaping: INSERT INTO t2 SELECT a FROM t1 +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +XA COMMIT 'xid1'; +ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected +XA START 'xid1'; +XA END 'xid1'; +XA PREPARE 'xid1'; +XA ROLLBACK 'xid1'; +# Connection default +DROP TABLE t1, t2; === modified file 'mysql-test/t/xa.test' --- a/mysql-test/t/xa.test 2011-04-12 10:57:02 +0000 +++ b/mysql-test/t/xa.test 2011-04-13 10:44:48 +0000 @@ -3,6 +3,8 @@ # -- source include/have_innodb.inc +--source include/not_embedded.inc + # Save the initial number of concurrent sessions --source include/count_sessions.inc @@ -326,6 +328,59 @@ SELECT * FROM t1; DROP TABLE t1; +--echo # +--echo # Bug#12352846 - TRANS_XA_START(THD*): +--echo # ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL() +--echo # FAILED +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1 (a INT); +CREATE TABLE t2 (a INT); + +START TRANSACTION; +INSERT INTO t1 VALUES (1); + +--echo # Connection con2 +--connect (con2,localhost,root) +XA START 'xid1'; +--echo # Sending: +--send INSERT INTO t2 SELECT a FROM t1 + +--echo # Connection default +--connection default +let $wait_condition= + SELECT COUNT(*) = 1 FROM information_schema.processlist + WHERE state = "Sending data" + AND info = "INSERT INTO t2 SELECT a FROM t1"; +--echo # Waiting until INSERT ... is blocked +--source include/wait_condition.inc +DELETE FROM t1; +COMMIT; + +--echo # Connection con2 +--connection con2 +--echo # Reaping: INSERT INTO t2 SELECT a FROM t1 +--error ER_LOCK_DEADLOCK +--reap +--error ER_XA_RBDEADLOCK +XA COMMIT 'xid1'; +# This caused the assert to be triggered +XA START 'xid1'; + +XA END 'xid1'; +XA PREPARE 'xid1'; +XA ROLLBACK 'xid1'; + +--echo # Connection default +connection default; +DROP TABLE t1, t2; +disconnect con2; + + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc === modified file 'sql/transaction.cc' --- a/sql/transaction.cc 2011-04-12 10:57:02 +0000 +++ b/sql/transaction.cc 2011-04-13 10:44:48 +0000 @@ -649,6 +649,12 @@ bool trans_xa_commit(THD *thd) if (xa_trans_rolled_back(&thd->transaction.xid_state)) { + /* + We must reset rm_error before calling ha_rollback(), + so thd->transaction.xid structure gets reset + by ha_rollback()/THD::transaction::cleanup(). + */ + thd->transaction.xid_state.rm_error= 0; if (ha_rollback_trans(thd, TRUE)) my_error(ER_XAER_RMERR, MYF(0)); res= thd->is_error(); --===============3085388911021359776== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-bug12352846/ # testament_sha1: 142a21737977922204e38d1895ccd3fcd826e873 # timestamp: 2011-04-13 12:44:51 +0200 # base_revision_id: dmitry.lenev@stripped\ # 660exik6gd1izx0x # # Begin bundle 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 --===============3085388911021359776==--