mirror of
https://github.com/MariaDB/server.git
synced 2025-07-13 14:58:15 +02:00

When MySQL 5.0.3 introduced InnoDB support for two-phase commit, it also introduced the questionable logic to roll back XA PREPARE transactions on startup when innodb_force_recovery is 1 or 2. Remove this logic in order to avoid unwanted side effects when innodb_force_recovery is being set for other reasons. That is, XA PREPARE transactions will always remain in that state until InnoDB receives an explicit XA ROLLBACK or XA COMMIT request from the upper layer. At the time the logic was introduced in MySQL 5.0.3, there already was a startup parameter that is the preferred way of achieving the behaviour: --tc-heuristic-recover=ROLLBACK.
22 lines
424 B
Text
22 lines
424 B
Text
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1);
|
|
connect con1,localhost,root;
|
|
XA START 'x';
|
|
UPDATE t1 set a=2;
|
|
XA END 'x';
|
|
XA PREPARE 'x';
|
|
connection default;
|
|
disconnect con1;
|
|
connect con1,localhost,root;
|
|
SELECT * FROM t1 LOCK IN SHARE MODE;
|
|
connection default;
|
|
disconnect con1;
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
SELECT * FROM t1;
|
|
a
|
|
2
|
|
XA ROLLBACK 'x';
|
|
SELECT * FROM t1;
|
|
a
|
|
1
|
|
DROP TABLE t1;
|