| Bug #32926 | lack of suppport for multiple two-phase-commit storage engines | ||
|---|---|---|---|
| Submitted: | 3 Dec 2007 13:20 | Modified: | 29 Dec 2012 21:25 |
| Reporter: | Ann Harrison | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server: General | Severity: | S2 (Serious) |
| Version: | 6.0.4, 6.0.9-debug | OS: | Any |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
[3 Dec 2007 13:59]
MySQL Verification Team
Thank you for the bug report.
[20 Feb 2009 13:17]
MySQL Verification Team
The debug server asserts during startup: Assertion failed: total_ha_2pc == (ulong) opt_bin_log+1, file .\handler.cc, line 1534 mysqld-debug.exe!my_sigabrt_handler()[my_thr_init.c:498] mysqld-debug.exe!raise()[winsig.c:590] mysqld-debug.exe!abort()[abort.c:71] mysqld-debug.exe!_wassert()[assert.c:212] mysqld-debug.exe!ha_recover()[handler.cc:1534] mysqld-debug.exe!init_server_components()[mysqld.cc:4303] mysqld-debug.exe!win_main()[mysqld.cc:4574] mysqld-debug.exe!mysql_service()[mysqld.cc:4737] mysqld-debug.exe!main()[mysqld.cc:4910] mysqld-debug.exe!__tmainCRTStartup()[crt0.c:327] mysqld-debug.exe!mainCRTStartup()[crt0.c:196] mysqld-debug --log-bin --sync_binlog=0 --console --skip-grant-tables --skip-name-resolve --innodb_flush_log_at_trx_commit=0 --binlog-format=row --innodb_lock_wait_timeout=1 --falcon_lock_wait_timeout=1 --falcon_support-xa=1 --falcon-consistent-read=on
[24 Mar 2010 22:03]
Sergei Golubchik
see also https://bugs.launchpad.net/maria/+bug/544173
[26 Jun 2011 17:37]
Valeriy Kravchuk
I wonder is it related to (a duplicate of) bug #47134.
[29 Dec 2012 21:25]
Erlend Dahl
Internally closed as a duplicate of bug#47134, so closing this one too for consistency.

Description: Currently the server will not start if it detects two or more storage engines that implement the "prepare". Removing that check is simple, but uncovers other problems. The last detected problem was in log.cc, where the sync method fails due to a zero valued action parameter. The problems occur when a transaction containing actions by two different 2pc engine commits. The do not require crashing the server to force recovery. How to repeat: To reproduce this problem you must first comment out this code in handler.cc surrounded by the #ifndef WILL_BE_DELETED_LATER /* for now, only InnoDB supports 2pc. It means we can always safely rollback all pending transactions, without risking inconsistent data */ DBUG_ASSERT(total_ha_2pc == (ulong) opt_bin_log+1); // only InnoDB and binlog tc_heuristic_recover= TC_HEURISTIC_RECOVER_ROLLBACK; // forcing ROLLBACK info.dry_run=FALSE; #endif Then with both InnoDB and Falcon in the engine, start with the switch falcon_support_xa = 1. create database k; use k; create table t1 (f1 integer) engine=innodb; create table t2 (f1 integer) engine=falcon; set autocommit=OFF; begin; insert into t1 values (10); insert into t2 values (10); commit;