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:
None 
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:20] Ann Harrison
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;
[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.