mirror of
https://github.com/MariaDB/server.git
synced 2025-05-05 16:59:35 +03:00
table with active trx Essentially, the problem is that InnoDB does a implicit commit when a cursor (table handler) is unlocked/closed, creating a dissonance between the transaction state within the server layer and the storage engine layer. Theoretically, a statement transaction can encompass several table instances in a similar manner to a multiple statement transaction, hence it does not make sense to limit a statement transaction to the lifetime of the table instances (cursors) used within it. Since this particular instance of the problem is only triggerable on 5.1 and is masked on 5.5 due 2PC being skipped (assertion is in the prepare phase of a 2PC), the solution (which is less risky) is to explicitly end the transaction before the cached table is unlock on rename table. The patch is to be null merged into trunk.
16 lines
394 B
Plaintext
16 lines
394 B
Plaintext
--source include/have_innodb_plugin.inc
|
|
--source include/have_log_bin.inc
|
|
|
|
--echo #
|
|
--echo # Bug#54453: Failing assertion: trx->active_trans when renaming a table with active trx
|
|
--echo #
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS bug54453;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE bug54453(a INT) ENGINE=InnoDB;
|
|
ALTER TABLE bug54453 RENAME TO bug54453_2;
|
|
SELECT * FROM bug54453_2;
|
|
DROP TABLE bug54453_2;
|