From: Jon Olav Hauglid Date: February 14 2011 1:16pm Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3324) Bug#11766788 List-Archive: http://lists.mysql.com/commits/131185 X-Bug: 11766788 Message-Id: <201102141317.p1EC72fe007222@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8348995690720915370==" --===============8348995690720915370== 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-bug11766788/ based on revid:georgi.kodinov@stripped 3324 Jon Olav Hauglid 2011-02-14 Bug #11766788 (former 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-14 13:16:31 +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-14 13:16:31 +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-11 17:11:05 +0000 +++ b/sql/transaction.cc 2011-02-14 13:16:31 +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) { --===============8348995690720915370== 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-bug11766788/ # testament_sha1: c6dafca421922570a389af3ec08019b069645869 # timestamp: 2011-02-14 14:16:33 +0100 # base_revision_id: georgi.kodinov@stripped\ # 76338wa3n8eoc1fz # # Begin bundle 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 --===============8348995690720915370==--