From: Jon Olav Hauglid Date: April 12 2011 9:27am Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3434) Bug#12348348 List-Archive: http://lists.mysql.com/commits/135236 X-Bug: 12348348 Message-Id: <201104120927.p3C9RdP6001479@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2597530277856461184==" --===============2597530277856461184== 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:davi.arnaut@stripped 3434 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 09:27:21 +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 09:27:21 +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 09:27:21 +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 09:27:21 +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) || --===============2597530277856461184== 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: 016d952d59f282fa59e4fe715c6f08b6277a164d # timestamp: 2011-04-12 11:27:27 +0200 # source_branch: file:///export/home/x/mysql-trunk/ # base_revision_id: davi.arnaut@stripped\ # 41x0fygsemshu9z0 # # Begin bundle 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 3YtMXnDSal/0ZH/xdyRThQkNH0kB0A== --===============2597530277856461184==--