| Bug #29371 | Falcon does not support replication as a transactional engine | ||
|---|---|---|---|
| Submitted: | 26 Jun 2007 19:18 | Modified: | 30 Jul 2008 14:14 |
| Reporter: | Brian Aker | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Falcon storage engine | Severity: | S3 (Non-critical) |
| Version: | 6.0 | OS: | Any |
| Assigned to: | Ann Harrison | CPU Architecture: | Any |
[26 Jun 2007 20:18]
Ann Harrison
Turning on XA would be a lot easier if this code weren't in handler.cc
#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
Cheers,
Ann
[26 Jun 2007 20:39]
Brian Aker
Currently though it won't work even if you don't compile in Innodb (aka remove it). So even if you compile out Innodb... Falcon still won't work with replication.
[26 Jun 2007 22:10]
MySQL Verification Team
Thank you for the bug report.
[31 Aug 2007 15:56]
Kevin Lewis
Assigned to Ann Harrison
[30 Nov 2007 22:30]
Ann Harrison
The XA_ENABLED conditional code has been integrated into Falcon generally and the condition is removed. You can control whether Falcon participates in two-phase commit transactions with the parameter falcon_support_xa. When the parameter is set to zero, Falcon does not report itself as a 2pc engine and commits are single phase. When the parameter is set to 1, it does and does. There are still a number of issues to resolve before two 2pc engines can run in the same server and coordinate their actions.
[3 Dec 2007 13:04]
Ann Harrison
Falcon has code to handle a two-phase commit which can be disabled with the switch falcon_support_xa. By default, the switch is off. The server does not support the existence of two two-phase-commit engines so if falcon_support_xa is turned on, you must also use the switch --skip_innodb.
[3 Dec 2007 16:34]
Jeffrey Pugh
A new bug (32926) has been opened for the fact that the Server does not support two XA-enabled engines running concurrently.
[11 Feb 2008 19:48]
Kevin Lewis
Patch is in mysql-6.0-falcon and mysql-6.0-release version 6.0.4
[30 Jul 2008 14:14]
MC Brown
A note has been added to the 6.0.4 changelog: A new configuration option, falcon_support_xa has been added. The option specifies whether Falcon should report itself as a two-phase commit storage engine, and therefore take part in XA transactions.

Description: This is disabled in Falcon: #ifdef XA_ENABLED falcon_hton->prepare = NfsStorageTable::prepare; #endif With this being disabled Falcon can not be used for replication. A commit in Falcon will not be synchronized with the transaction in the binary log. AKA the commit occurs in Falcon, but if the crash occurs before the binary log syncs (which is not guaranteed without the prepare call), the data will not be stored for replication. Innodb does this properly. How to repeat: Put an assert right after the commit call to falcon and compare the results in what the slave eventually replicates. Suggested fix: Enable the ifdef by default in all builds.