From: Jon Olav Hauglid Date: May 12 2011 12:56pm Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3378) Bug#12346411 List-Archive: http://lists.mysql.com/commits/137214 X-Bug: 12346411 Message-Id: <201105121256.p4CCuBgV024958@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3286762218539319808==" --===============3286762218539319808== 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 3378 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:56:00 +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:56:00 +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:56:00 +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); } --===============3286762218539319808== 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: 129e56413a67b0a31f0b668bceb53ce0c2f7b50c # timestamp: 2011-05-12 14:56:03 +0200 # base_revision_id: tatjana.nuernberg@stripped\ # c96ri0lsgfjv6nki # # Begin bundle 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 /F3JFOFCQGJgenA= --===============3286762218539319808==--