From: Jon Olav Hauglid Date: February 10 2011 1:57pm Subject: bzr commit into mysql-trunk branch (jon.hauglid:3638) Bug#59986 List-Archive: http://lists.mysql.com/commits/131043 X-Bug: 59986 Message-Id: <201102101357.p1A8WxYx011621@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2232634161234916802==" --===============2232634161234916802== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-bug59936/ based on revid:mattias.jonsson@stripped 3638 Jon Olav Hauglid 2011-02-10 Bug #59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT This assert was triggered if XA COMMIT was issued when an XA transaction already had encountered an error (e.g. a deadlock) which required the XA transaction to be rolled back. In general, the assert is triggered if a statement tries to send OK to the client when an error has already been reported. It was triggered in this case because the trans_xa_commit() function first reported an error, then rolled back the transaction and finally returned FALSE, indicating success. Since trans_xa_commit() reported success, mysql_execute_command() tried to report OK, triggering the assert. This patch fixes the problem by fixing trans_xa_commit() to return TRUE if it encounters an error that requires rollback, even if the rollback itself is successful. 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 2010-09-13 11:31:22 +0000 +++ b/mysql-test/r/xa.result 2011-02-10 13:57:08 +0000 @@ -142,3 +142,27 @@ XA PREPARE 'x'; XA PREPARE 'x'; ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state XA ROLLBACK 'x'; +# +# Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB; +INSERT INTO t1 VALUES (1, 1), (2, 2); +# Connection con1 +XA START 'a'; +UPDATE t1 SET b= 3 WHERE a=1; +# Connection default +XA START 'b'; +UPDATE t1 SET b=4 WHERE a=2; +# Sending: +UPDATE t1 SET b=5 WHERE a=1; +# Connection con1 +UPDATE t1 SET b=6 WHERE a=2; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +XA COMMIT 'a'; +ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected +# Connection default +# Reaping: UPDATE t1 SET b=5 WHERE a=1 +XA END 'b'; +XA ROLLBACK 'b'; +DROP TABLE t1; === modified file 'mysql-test/t/xa.test' --- a/mysql-test/t/xa.test 2010-09-13 11:31:22 +0000 +++ b/mysql-test/t/xa.test 2011-02-10 13:57:08 +0000 @@ -245,6 +245,48 @@ XA PREPARE 'x'; XA ROLLBACK 'x'; +--echo # +--echo # Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB; +INSERT INTO t1 VALUES (1, 1), (2, 2); + +--echo # Connection con1 +connect (con1, localhost, root); +XA START 'a'; +UPDATE t1 SET b= 3 WHERE a=1; + +--echo # Connection default +connection default; +XA START 'b'; +UPDATE t1 SET b=4 WHERE a=2; +--echo # Sending: +--send UPDATE t1 SET b=5 WHERE a=1 + +--echo # Connection con1 +connection con1; +--sleep 1 +--error ER_LOCK_DEADLOCK +UPDATE t1 SET b=6 WHERE a=2; +# This used to trigger the assert +--error ER_XA_RBDEADLOCK +XA COMMIT 'a'; + +--echo # Connection default +connection default; +--echo # Reaping: UPDATE t1 SET b=5 WHERE a=1 +--reap +XA END 'b'; +XA ROLLBACK 'b'; +DROP TABLE t1; +disconnect con1; + + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc === modified file 'sql/transaction.cc' --- a/sql/transaction.cc 2010-11-18 16:34:56 +0000 +++ b/sql/transaction.cc 2011-02-10 13:57:08 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008 Sun/MySQL +/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -635,8 +635,9 @@ bool trans_xa_commit(THD *thd) if (xa_trans_rolled_back(&thd->transaction.xid_state)) { - if ((res= test(ha_rollback_trans(thd, TRUE)))) + if (ha_rollback_trans(thd, TRUE)) my_error(ER_XAER_RMERR, MYF(0)); + res= thd->is_error(); } else if (xa_state == XA_IDLE && thd->lex->xa_opt == XA_ONE_PHASE) { --===============2232634161234916802== 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-trunk-bug59936/ # testament_sha1: dcdf956ac9dbc5cd871451a7456c91f9d2ec2779 # timestamp: 2011-02-10 14:57:12 +0100 # base_revision_id: mattias.jonsson@stripped\ # 7d185yns47br33yn # # Begin bundle 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 --===============2232634161234916802==--