From 88a9b23396531f0f0f63c1f989af69772216d442 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Mon, 15 Jan 2018 13:50:28 +0400 Subject: MDEV-14609 XA Transction unable to ROLLBACK TO SAVEPOINT The function trans_rollback_to_savepoint(), unlike trans_savepoint(), did not allow xa_state=XA_ACTIVE, so an attempt to do ROLLBCK TO SAVEPOINT inside an XA transaction incorrectly returned an error "...command cannot be executed ... in the ACTIVE state...". Partially merging a MySQL patch: 7fb5c47390311d9b1b5367f97cb8fedd4102dd05 This is WL#7193 (Decouple THD and st_transactions)... The currently merged part includes these changes: - Introducing st_xid_state::check_has_uncommitted_xa() - Reusing it in both trans_rollback_to_savepoint() and trans_savepoint(), so now both allow XA_ACTIVE. --- mysql-test/t/xa.test | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'mysql-test/t') diff --git a/mysql-test/t/xa.test b/mysql-test/t/xa.test index 1709886eb0c..0995b8c26b2 100644 --- a/mysql-test/t/xa.test +++ b/mysql-test/t/xa.test @@ -327,6 +327,20 @@ SELECT * FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-14609 XA Transction unable to ROLLBACK TO SAVEPOINT +--echo # + +CREATE TABLE t1 (c1 INT) ENGINE=INNODB; +XA START 'xa1'; +SAVEPOINT savepoint1; +INSERT INTO t1 (c1) VALUES (1),(2),(3),(4); +ROLLBACK TO SAVEPOINT savepoint1; +XA END 'xa1'; +XA ROLLBACK 'xa1'; +DROP TABLE t1; + + --echo # --echo # Bug#12352846 - TRANS_XA_START(THD*): --echo # ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL() -- cgit v1.2.1