From: Jon Olav Hauglid Date: April 19 2011 1:07pm Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3456) Bug#12346411 List-Archive: http://lists.mysql.com/commits/135718 X-Bug: 12346411 Message-Id: <201104191307.p3JD7FED007245@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2699289940726656004==" --===============2699289940726656004== 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:serge.kozlov@stripped 3456 Jon Olav Hauglid 2011-04-19 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-04-19 13:07:05 +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-04-19 13:07:05 +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-04-19 13:07:05 +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); } --===============2699289940726656004== 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: a96e61e692fc6648b24a8780fc5b78075faf2156 # timestamp: 2011-04-19 15:07:08 +0200 # base_revision_id: serge.kozlov@stripped\ # vvmflae9cg9hjx63 # # Begin bundle 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 7eSA --===============2699289940726656004==--