From: Jon Olav Hauglid Date: May 12 2011 12:15pm Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3377) Bug#12346411 List-Archive: http://lists.mysql.com/commits/137203 X-Bug: 12346411 Message-Id: <201105121215.p4CCFoY3031130@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3088060923023679426==" --===============3088060923023679426== 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-bug12346411/ based on revid:tatjana.nuernberg@stripped 3377 Jon Olav Hauglid 2011-05-12 Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED This assert could be triggered during two phase commit if binary log was used as transaction coordinator log. The triggered assert checks that the same number of transaction IDs are processed in the prepare and commit phases. The reason it was triggered, was that the transaction consisted of an INSERT/UPDATE IGNORE that had an ignorable error. Since it had an error, no row log events were made and therefore prepared_xids was 0. However, since it was an IGNORE statement, the statement started a read/write statement transaction, committed it and completed successfully. This patch fixes the problem by adjusting the assert to take this possibility into account. Test case added to binlog.binlog_innodb_row.test. modified: mysql-test/suite/binlog/r/binlog_innodb_row.result mysql-test/suite/binlog/t/binlog_innodb_row.test sql/log.cc === modified file 'mysql-test/suite/binlog/r/binlog_innodb_row.result' --- a/mysql-test/suite/binlog/r/binlog_innodb_row.result 2010-08-20 02:59:58 +0000 +++ b/mysql-test/suite/binlog/r/binlog_innodb_row.result 2011-05-12 12:15:40 +0000 @@ -59,3 +59,20 @@ show binlog events from ; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE IF EXISTS `t1` /* generated by server */ ############################################### +# +# Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED +# +DROP TABLE IF EXISTS t1, t2; +CREATE TABLE t1(a INT PRIMARY KEY) engine=innodb; +CREATE TABLE t2(a INT) engine=myisam; +INSERT INTO t1 VALUES (1); +START TRANSACTION; +INSERT INTO t2 VALUES (1); +INSERT IGNORE INTO t1 VALUES (1); +COMMIT; +INSERT INTO t1 VALUES (2); +START TRANSACTION; +INSERT INTO t2 VALUES (2); +UPDATE IGNORE t1 SET a=1 WHERE a=2; +COMMIT; +DROP TABLE t1, t2; === modified file 'mysql-test/suite/binlog/t/binlog_innodb_row.test' --- a/mysql-test/suite/binlog/t/binlog_innodb_row.test 2010-03-09 23:41:21 +0000 +++ b/mysql-test/suite/binlog/t/binlog_innodb_row.test 2011-05-12 12:15:40 +0000 @@ -77,3 +77,29 @@ DROP TEMPORARY TABLE t1; -- echo ############################################### -- source include/show_binlog_events.inc -- echo ############################################### + + +--echo # +--echo # Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +--enable_warnings + +CREATE TABLE t1(a INT PRIMARY KEY) engine=innodb; +CREATE TABLE t2(a INT) engine=myisam; + +INSERT INTO t1 VALUES (1); +START TRANSACTION; +INSERT INTO t2 VALUES (1); +INSERT IGNORE INTO t1 VALUES (1); +COMMIT; + +INSERT INTO t1 VALUES (2); +START TRANSACTION; +INSERT INTO t2 VALUES (2); +UPDATE IGNORE t1 SET a=1 WHERE a=2; +COMMIT; + +DROP TABLE t1, t2; === modified file 'sql/log.cc' --- a/sql/log.cc 2011-03-11 09:12:58 +0000 +++ b/sql/log.cc 2011-05-12 12:15:40 +0000 @@ -6506,8 +6506,11 @@ int TC_LOG_BINLOG::unlog(ulong cookie, m { DBUG_ENTER("TC_LOG_BINLOG::unlog"); mysql_mutex_lock(&LOCK_prep_xids); - DBUG_ASSERT(prepared_xids > 0); - if (--prepared_xids == 0) { + // prepared_xids can be 0 if the transaction had ignorable errors. + DBUG_ASSERT(prepared_xids >= 0); + if (prepared_xids > 0) + prepared_xids--; + if (prepared_xids == 0) { DBUG_PRINT("info", ("prepared_xids=%lu", prepared_xids)); mysql_cond_signal(&COND_prep_xids); } --===============3088060923023679426== 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-bug12346411/ # testament_sha1: 2572f79233ea0360ee0604bded5044e27137b097 # timestamp: 2011-05-12 14:15:42 +0200 # base_revision_id: tatjana.nuernberg@stripped\ # vcrvqkqyd2kyr4pv # # Begin bundle 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 --===============3088060923023679426==--