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.
This commit is contained in:
Marko Mäkelä 2020-05-19 10:21:16 +03:00
parent 141cf43e61
commit c93f8aca65

View file

@ -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;