mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-15641 InnoDB crash while committing table-rebuilding ALTER TABLE
Problem: ======== There is a possibility that there can be more concurrent DMLs While the alter table thread is waiting for upgrading to MDL_EXCLUSIVE before commit phase. In commit phase, InnoDB acquires dict_operation_lock and it already holds MDL_EXCLUSIVE on the table. After that, InnoDB applies the concurrent DML logs in commit phase. This could lead to blocking of the following things: 1) DML on the particular table (due to MDL_EXCLUSIVE on the table) 2) InnoDB DDLs (due to dict_operation_lock) 3) Purge thread, stats thread, the master thread (due to dict_operation_lock) Fix: ==== Apply the concurrent DML logs in commit phase but before acquiring dict_operation_lock in commit phase. It makes sure that (2), (3) can't be blocked for longer time.
This commit is contained in:
@ -7369,6 +7369,7 @@ static bool mysql_inplace_alter_table(THD *thd,
|
||||
if (res)
|
||||
goto rollback;
|
||||
|
||||
DEBUG_SYNC(thd, "alter_table_inplace_before_lock_upgrade");
|
||||
// Upgrade to EXCLUSIVE before commit.
|
||||
if (wait_while_table_is_used(thd, table, HA_EXTRA_PREPARE_FOR_RENAME))
|
||||
goto rollback;
|
||||
|
Reference in New Issue
Block a user