mirror of
https://github.com/MariaDB/server.git
synced 2025-02-09 23:24:11 +01:00
cfbd57dfb7
InnoDB transactions may be reused after committed: - when taken from the transaction pool - during a DDL operation execution In this case wsrep flag on trx object is cleared, which may cause wrong execution logic afterwards (wsrep-related hooks are not run). Make trx->wsrep flag initialize from THD object only once on InnoDB transaction start and don't change it throughout the transaction's lifetime. The flag is reset at commit time as before. Unconditionally set wsrep=OFF for THD objects that represent InnoDB background threads. Make Wsrep_schema::store_view() operate in its own transaction. Fix streaming replication transactions' fragments rollback to not switch THD->wsrep value during transaction's execution (use THD->wsrep_ignore_table as a workaround). Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
26 lines
956 B
Text
26 lines
956 B
Text
connection node_2;
|
|
connection node_1;
|
|
connect con1,127.0.0.1,root,,test,$NODE_MYPORT_1;
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY) ENGINE=InnoDB;
|
|
CREATE TABLE t1_fk(c1 INT PRIMARY KEY, c2 INT, INDEX (c2), FOREIGN KEY (c2) REFERENCES t1(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1);
|
|
connection con1;
|
|
SET SESSION wsrep_retry_autocommit = 0;
|
|
SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL may_alter WAIT_FOR bf_abort';
|
|
INSERT INTO t1_fk VALUES (1, 1);
|
|
connection node_1;
|
|
SET DEBUG_SYNC = 'now WAIT_FOR may_alter';
|
|
SET DEBUG_SYNC = 'lock_wait_end WAIT_FOR alter_continue';
|
|
ALTER TABLE t1 ADD COLUMN c2 INT, ALGORITHM=INPLACE;
|
|
connection con1;
|
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
|
SET DEBUG_SYNC = 'now SIGNAL alter_continue';
|
|
connection node_1;
|
|
connection node_2;
|
|
INSERT INTO t1 (c1, c2) VALUES (2, 2);
|
|
connection node_1;
|
|
SET DEBUG_SYNC = 'RESET';
|
|
DROP TABLE t1_fk, t1;
|
|
disconnect con1;
|
|
disconnect node_2;
|
|
disconnect node_1;
|