From: Jon Olav Hauglid Date: April 12 2011 10:57am Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3437) Bug#12348348 List-Archive: http://lists.mysql.com/commits/135254 X-Bug: 12348348 Message-Id: <201104121057.p3CAvB9o028868@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4876822291466031665==" --===============4876822291466031665== 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-bug12348348/ based on revid:sergey.glukhov@stripped 3437 Jon Olav Hauglid 2011-04-12 Bug#12348348 - ASSERTION IN ROW0SEL.C LINE 3698: TRX->CONC_STATE == 0 || TRX->CONC_STATE == 1 This bug was a different manifestation of Bug#11766752, which was previously only fixed on mysql-trunk. This patch backports the fix for Bug#11766752 to mysql-5.5, which fixes the problem. The patch also adds some extra test coverage. modified: mysql-test/r/xa.result mysql-test/t/xa.test sql/sql_base.cc sql/transaction.cc === modified file 'mysql-test/r/xa.result' --- a/mysql-test/r/xa.result 2011-02-14 13:16:31 +0000 +++ b/mysql-test/r/xa.result 2011-04-12 10:57:02 +0000 @@ -166,3 +166,37 @@ ERROR XA102: XA_RBDEADLOCK: Transaction XA END 'b'; XA ROLLBACK 'b'; DROP TABLE t1; +# +# Bug#11766752 59936: multiple xa assertions - transactional +# statement fuzzer +# +CREATE TABLE t1 (a INT) engine=InnoDB; +XA START 'a'; +INSERT INTO t1 VALUES (1); +SAVEPOINT savep; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state +XA END 'a'; +SELECT * FROM t1; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state +INSERT INTO t1 VALUES (2); +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state +SAVEPOINT savep; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state +SET @a=(SELECT * FROM t1); +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state +XA PREPARE 'a'; +SELECT * FROM t1; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +INSERT INTO t1 VALUES (2); +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +SAVEPOINT savep; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +SET @a=(SELECT * FROM t1); +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +UPDATE t1 SET a=1 WHERE a=2; +ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state +XA COMMIT 'a'; +SELECT * FROM t1; +a +1 +DROP TABLE t1; === modified file 'mysql-test/t/xa.test' --- a/mysql-test/t/xa.test 2011-02-14 13:16:31 +0000 +++ b/mysql-test/t/xa.test 2011-04-12 10:57:02 +0000 @@ -287,6 +287,45 @@ DROP TABLE t1; disconnect con1; +--echo # +--echo # Bug#11766752 59936: multiple xa assertions - transactional +--echo # statement fuzzer +--echo # + +CREATE TABLE t1 (a INT) engine=InnoDB; +XA START 'a'; +INSERT INTO t1 VALUES (1); + +--error ER_XAER_RMFAIL +SAVEPOINT savep; + +XA END 'a'; +--error ER_XAER_RMFAIL +SELECT * FROM t1; +--error ER_XAER_RMFAIL +INSERT INTO t1 VALUES (2); +--error ER_XAER_RMFAIL +SAVEPOINT savep; +--error ER_XAER_RMFAIL +SET @a=(SELECT * FROM t1); + +XA PREPARE 'a'; +--error ER_XAER_RMFAIL +SELECT * FROM t1; # used to cause InnoDB assert +--error ER_XAER_RMFAIL +INSERT INTO t1 VALUES (2); # used to cause InnoDB assert +--error ER_XAER_RMFAIL +SAVEPOINT savep; +--error ER_XAER_RMFAIL +SET @a=(SELECT * FROM t1); # used to cause InnoDB assert +--error ER_XAER_RMFAIL +UPDATE t1 SET a=1 WHERE a=2; + +XA COMMIT 'a'; +SELECT * FROM t1; +DROP TABLE t1; + + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2011-03-29 08:38:26 +0000 +++ b/sql/sql_base.cc 2011-04-12 10:57:02 +0000 @@ -4724,6 +4724,14 @@ bool open_tables(THD *thd, TABLE_LIST ** bool has_prelocking_list; DBUG_ENTER("open_tables"); + /* Accessing data in XA_IDLE or XA_PREPARED is not allowed. */ + enum xa_states xa_state= thd->transaction.xid_state.xa_state; + if (*start && (xa_state == XA_IDLE || xa_state == XA_PREPARED)) + { + my_error(ER_XAER_RMFAIL, MYF(0), xa_state_names[xa_state]); + DBUG_RETURN(true); + } + /* temporary mem_root for new .frm parsing. TODO: variables for size === modified file 'sql/transaction.cc' --- a/sql/transaction.cc 2011-02-14 13:16:31 +0000 +++ b/sql/transaction.cc 2011-04-12 10:57:02 +0000 @@ -362,6 +362,13 @@ bool trans_savepoint(THD *thd, LEX_STRIN !opt_using_transactions) DBUG_RETURN(FALSE); + enum xa_states xa_state= thd->transaction.xid_state.xa_state; + if (xa_state != XA_NOTR) + { + my_error(ER_XAER_RMFAIL, MYF(0), xa_state_names[xa_state]); + DBUG_RETURN(TRUE); + } + sv= find_savepoint(thd, name); if (*sv) /* old savepoint of the same name exists */ @@ -435,6 +442,13 @@ bool trans_rollback_to_savepoint(THD *th DBUG_RETURN(TRUE); } + enum xa_states xa_state= thd->transaction.xid_state.xa_state; + if (xa_state != XA_NOTR) + { + my_error(ER_XAER_RMFAIL, MYF(0), xa_state_names[xa_state]); + DBUG_RETURN(TRUE); + } + if (ha_rollback_to_savepoint(thd, sv)) res= TRUE; else if (((thd->variables.option_bits & OPTION_KEEP_LOG) || --===============4876822291466031665== 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-bug12348348/ # testament_sha1: 25e0a07bd3e35408a65e1b71f77da330f045d36e # timestamp: 2011-04-12 12:57:05 +0200 # source_branch: file:///export/home/x/mysql-trunk/ # base_revision_id: sergey.glukhov@stripped\ # z53orri88rvc0yvf # # Begin bundle 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 FOFCQUi6r2w= --===============4876822291466031665==--