mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-24547 Update fails when online alter does rollback due to MDL time out
When online alter rollbacks due to MDL time out, it doesn't mark the index online status as ONLINE_INDEX_ABORTED. Concurrent update fails to update the secondary index while building the entry. InnoDB should check the online status of the secondary index before building the secondary index entry. Reviewed-by: Marko Mäkelä
This commit is contained in:
parent
94890a749a
commit
479b4214fa
4 changed files with 87 additions and 2 deletions
32
mysql-test/suite/innodb/t/alter_mdl_timeout.test
Normal file
32
mysql-test/suite/innodb/t/alter_mdl_timeout.test
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
create table t1(f1 char(10), f2 char(10) not null, f3 int not null,
|
||||
f4 int not null, primary key(f3))engine=innodb;
|
||||
insert into t1 values('a','a', 1, 1), ('b','b', 2, 2), ('c', 'c', 3, 3), ('d', 'd', 4, 4);
|
||||
SET DEBUG_SYNC="row_merge_after_scan SIGNAL con1_start WAIT_FOR con1_insert";
|
||||
SET DEBUG_SYNC="innodb_commit_inplace_alter_table_wait SIGNAL con1_wait WAIT_FOR con1_update";
|
||||
send ALTER TABLE t1 ADD UNIQUE INDEX(f1(3), f4), ADD UNIQUE INDEX(f2), ALGORITHM=INPLACE;
|
||||
|
||||
connect(con1,localhost,root,,,);
|
||||
SET DEBUG_SYNC="now WAIT_FOR con1_start";
|
||||
begin;
|
||||
INSERT INTO t1 VALUES('e','e',5, 5);
|
||||
SET DEBUG_SYNC="now SIGNAL con1_insert";
|
||||
SET DEBUG_SYNC="now WAIT_FOR con1_wait";
|
||||
SET DEBUG_SYNC="before_row_upd_sec_new_index_entry SIGNAL con1_update WAIT_FOR alter_rollback";
|
||||
SEND UPDATE t1 set f4 = 10 order by f1 desc limit 2;
|
||||
|
||||
connection default;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
SET DEBUG_SYNC="now SIGNAL alter_rollback";
|
||||
|
||||
connection con1;
|
||||
reap;
|
||||
commit;
|
||||
|
||||
connection default;
|
||||
disconnect con1;
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC="RESET";
|
||||
Loading…
Add table
Add a link
Reference in a new issue