diff options
author | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2020-10-02 10:00:59 +0530 |
---|---|---|
committer | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2020-10-08 21:54:11 +0530 |
commit | 8984d7791035090fb51cb499fdb412bd14b74638 (patch) | |
tree | 0d4297f34ffd5a2a4c15beaeedc72bd0876a8950 | |
parent | b18921cfd26f7f627ee5cbcae269aff9be4e9ea4 (diff) | |
download | mariadb-git-8984d7791035090fb51cb499fdb412bd14b74638.tar.gz |
MDEV-21329 InnoDB: Failing assertion: lock->lock_word.load(std::memory_order_relaxed) == X_LOCK_DECR upon server shutdown
Problem is that dropping of fts table and sync of fts table
happens concurrently during fts optimize thread shutdown.
fts_optimize_remove_table() is executed by a user thread that
performs DDL, and that the fts_optimize_wq may be removed if
fts_optimize_shutdown() has started executing.
fts_optimize_remove_table() doesn't remove the table from the queue
and it leads to above scenario. While removing the table from
fts_optimize_wq, if the table can't be removed then wait till
fts_optimize_thread shuts down.
Reviewed-by: Marko Mäkelä
-rw-r--r-- | storage/innobase/fts/fts0opt.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index 8ad1cf4ebe1..3cabb64b851 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -2573,6 +2573,11 @@ fts_optimize_remove_table( if (fts_opt_start_shutdown) { ib::info() << "Try to remove table " << table->name << " after FTS optimize thread exiting."; + /* If the table can't be removed then wait till + fts optimize thread shuts down */ + while (fts_optimize_wq) { + os_thread_sleep(10000); + } return; } |