mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-22445 Crash on HANDLER READ NEXT after XA PREPARE
The assertion is absolutely correct since no data access is possible after XA PREPARE. The check is added in mysql_ha_read.
This commit is contained in:
@ -341,5 +341,20 @@ Message XAER_RMFAIL: The command cannot be executed when global transaction is i
|
|||||||
xa commit 'foo';
|
xa commit 'foo';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-22445 Crash on HANDLER READ NEXT after XA PREPARE
|
||||||
|
#
|
||||||
|
CREATE TABLE t (a INT KEY) ENGINE=InnoDB;
|
||||||
|
HANDLER t OPEN AS t;
|
||||||
|
XA START '0';
|
||||||
|
SELECT * FROM t;
|
||||||
|
a
|
||||||
|
XA END '0';
|
||||||
|
XA PREPARE '0';
|
||||||
|
HANDLER t READ NEXT;
|
||||||
|
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
|
||||||
|
# Cleanup
|
||||||
|
XA COMMIT '0';
|
||||||
|
DROP TABLE t;
|
||||||
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
@ -485,6 +485,23 @@ show status like 'foo';
|
|||||||
xa commit 'foo';
|
xa commit 'foo';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-22445 Crash on HANDLER READ NEXT after XA PREPARE
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t (a INT KEY) ENGINE=InnoDB;
|
||||||
|
HANDLER t OPEN AS t;
|
||||||
|
XA START '0';
|
||||||
|
SELECT * FROM t;
|
||||||
|
XA END '0';
|
||||||
|
XA PREPARE '0';
|
||||||
|
--error ER_XAER_RMFAIL
|
||||||
|
HANDLER t READ NEXT;
|
||||||
|
|
||||||
|
--echo # Cleanup
|
||||||
|
XA COMMIT '0';
|
||||||
|
DROP TABLE t;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -697,6 +697,9 @@ retry:
|
|||||||
if (!(handler= mysql_ha_find_handler(thd, tables->alias)))
|
if (!(handler= mysql_ha_find_handler(thd, tables->alias)))
|
||||||
goto err0;
|
goto err0;
|
||||||
|
|
||||||
|
if (thd->transaction.xid_state.check_has_uncommitted_xa())
|
||||||
|
goto err0;
|
||||||
|
|
||||||
table= handler->table;
|
table= handler->table;
|
||||||
tables->table= table; // This is used by fix_fields
|
tables->table= table; // This is used by fix_fields
|
||||||
table->pos_in_table_list= tables;
|
table->pos_in_table_list= tables;
|
||||||
|
Reference in New Issue
Block a user