From c93f8aca656b897d0d5ce6d94196662a4161ad38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 19 May 2020 10:21:16 +0300 Subject: MDEV-22618 Assertion !dict_index_is_online_ddl ... in lock_table_locks_lookup lock_table_locks_lookup(): Relax the assertion. Locks must not exist while online secondary index creation is in progress. However, if CREATE UNIQUE INDEX has not been committed yet, but the index creation has been completed, concurrent DML transactions may acquire record locks on the index. Furthermore, such concurrent DML may cause duplicate key violation, causing the DDL operation to be rolled back. After that, the online_status may be ONLINE_INDEX_ABORTED or ONLINE_INDEX_ABORTED_DROPPED. So, the debug assertion may only forbid the state ONLINE_INDEX_CREATION. --- storage/innobase/lock/lock0lock.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'storage/innobase/lock') diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 6e18d24a4d3..11c080066d6 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -6636,7 +6636,8 @@ lock_table_locks_lookup( ut_a(lock->trx == trx); if (lock_get_type_low(lock) == LOCK_REC) { - ut_ad(!dict_index_is_online_ddl(lock->index) + ut_ad(lock->index->online_status + != ONLINE_INDEX_CREATION || dict_index_is_clust(lock->index)); if (lock->index->table == table) { break; -- cgit v1.2.1