summaryrefslogtreecommitdiff
path: root/storage/innobase/row
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2019-09-18 13:22:08 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2019-09-18 13:22:08 +0530
commit8a79fa0e4d0385818da056f7a4a39fde95d62fe3 (patch)
tree4dc2b3b2ea887590dfaa9d58b2cf8ea7cd8cdea0 /storage/innobase/row
parent708f1e341915b9fe2968581c60fb6a224b185af9 (diff)
downloadmariadb-git-8a79fa0e4d0385818da056f7a4a39fde95d62fe3.tar.gz
MDEV-19529 InnoDB hang on DROP FULLTEXT INDEX
Problem: ======= During dropping of fts index, InnoDB waits for fts_optimize_remove_table() and it holds dict_sys->mutex and dict_operaiton_lock even though the table id is not present in the queue. But fts_optimize_thread does wait for dict_sys->mutex to process the unrelated table id from the slot. Solution: ======== Whenever table is added to fts_optimize_wq, update the fts_status of in-memory fts subsystem to TABLE_IN_QUEUE. Whenever drop index wants to remove table from the queue, it can check the fts_status to decide whether it should send the MSG_DELETE_TABLE to the queue. Removed the following functions because these are all deadcode. dict_table_wait_for_bg_threads_to_exit(), fts_wait_for_background_thread_to_start(),fts_start_shutdown(), fts_shudown().
Diffstat (limited to 'storage/innobase/row')
-rw-r--r--storage/innobase/row/row0mysql.cc7
1 files changed, 3 insertions, 4 deletions
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index 52aa43384f7..c6d9909a6fc 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -3829,11 +3829,11 @@ next_rec:
DBUG_EXECUTE_IF("ib_trunc_sleep_before_fts_cache_clear",
os_thread_sleep(10000000););
- table->fts->fts_status |= TABLE_DICT_LOCKED;
+ table->fts->dict_locked = true;
fts_update_next_doc_id(trx, table, 0);
fts_cache_clear(table->fts->cache);
fts_cache_init(table->fts->cache);
- table->fts->fts_status &= ~TABLE_DICT_LOCKED;
+ table->fts->dict_locked = false;
}
}
@@ -4434,8 +4434,7 @@ do_drop:
/* Need to set TABLE_DICT_LOCKED bit, since
fts_que_graph_free_check_lock would try to acquire
dict mutex lock */
- table->fts->fts_status |= TABLE_DICT_LOCKED;
-
+ table->fts->dict_locked = true;
fts_free(table);
}