diff options
author | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2022-08-06 01:16:21 +0530 |
---|---|---|
committer | Thirunarayanan Balathandayuthapani <thiru@mariadb.com> | 2022-08-19 17:51:49 +0530 |
commit | 7624bf868ed0d08276cb27c5cdbd007faf4de3c4 (patch) | |
tree | fa3f7ee5442127bf1d9fc424b8716aafe4b47666 /dbug | |
parent | 75c416d3627650a5b43c70a8150292990206e3e0 (diff) | |
download | mariadb-git-7624bf868ed0d08276cb27c5cdbd007faf4de3c4.tar.gz |
MDEV-29250 InnoDB: Failing assertion: table->get_ref_count() == 0
Reason:
======
This issue is caused by race condition between fulltext DDL and
purge thread. DDL sets the signal to stop the purge thread to
process the new undo log records and wait for the ongoing
processed FTS table undo log records to finish.
But in dict_acquire_mdl_shared(),InnoDB release all innodb
table related locks before acquiring the mdl. At the same time,
DDL assumes that there are no purge threads working on fts table.
There is a possiblity that purge thread can skip processing the
valid undo log records if it checks purge_sys.must_wait_FTS() twice
in different places.
Solution:
==========
Add the purge_sys.must_wait_FTS() check in dict_acquire_mdl_shared()
to avoid the purge thread processing undo log records.
dict_open_table_on_id(): return -1 if the purge thread has to
wait
dict_acquire_mdl_shared(): Added 1 new parameters to indicate that
purge thread invoking the function, return -1 if the purge
thread has to wait.
Diffstat (limited to 'dbug')
0 files changed, 0 insertions, 0 deletions