MDEV-30363 InnoDB: Failing assertion: trx->error_state == DB_SUCCESS in que_run_threads
Problem: ========= - During truncation of a fulltext table, InnoDB does create the table and does insert the default config fts values in fulltext common config table using create table transaction. - Before committing the create table transaction, InnoDB does update the dictionary by loading the stopword into fts cache and write the stopword configuration into fulltext common config table by creating a separate transaction. This leads to lock wait timeout error and rollbacks the transaction. - But truncate table holds dict_sys.lock and rollback also tries to acquire dict_sys.lock. This leads to assertion during rollback. Solution: ========= ha_innobase::truncate(): Commit the create table transaction before updating the dictionary after create table.
This commit is contained in:
parent
888663ce12
commit
a4b0301b91
@ -993,3 +993,15 @@ FTS_DOC_ID f1 f2
|
|||||||
4294967298 txt bbb
|
4294967298 txt bbb
|
||||||
100000000000 aaa bbb
|
100000000000 aaa bbb
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-30363 Failing assertion: trx->error_state == DB_SUCCESS
|
||||||
|
# in que_run_threads
|
||||||
|
#
|
||||||
|
CREATE TABLE server_stopword (value VARCHAR(1))engine=innodb;
|
||||||
|
SET GLOBAL innodb_ft_server_stopword_table='test/server_stopword';
|
||||||
|
CREATE TABLE t (t VARCHAR(1) COLLATE utf8_unicode_ci,
|
||||||
|
FULLTEXT (t))engine=innodb;
|
||||||
|
TRUNCATE TABLE t;
|
||||||
|
DROP TABLE t;
|
||||||
|
DROP TABLE server_stopword;
|
||||||
|
SET GLOBAL innodb_ft_server_stopword_table= default;
|
||||||
|
@ -967,3 +967,16 @@ CREATE FULLTEXT INDEX i ON t1 (f2);
|
|||||||
SELECT * FROM t1 WHERE match(f2) against("bbb");
|
SELECT * FROM t1 WHERE match(f2) against("bbb");
|
||||||
# Cleanup
|
# Cleanup
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30363 Failing assertion: trx->error_state == DB_SUCCESS
|
||||||
|
--echo # in que_run_threads
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE server_stopword (value VARCHAR(1))engine=innodb;
|
||||||
|
SET GLOBAL innodb_ft_server_stopword_table='test/server_stopword';
|
||||||
|
CREATE TABLE t (t VARCHAR(1) COLLATE utf8_unicode_ci,
|
||||||
|
FULLTEXT (t))engine=innodb;
|
||||||
|
TRUNCATE TABLE t;
|
||||||
|
DROP TABLE t;
|
||||||
|
DROP TABLE server_stopword;
|
||||||
|
SET GLOBAL innodb_ft_server_stopword_table= default;
|
||||||
|
@ -14088,10 +14088,10 @@ int ha_innobase::truncate()
|
|||||||
trx);
|
trx);
|
||||||
if (!err)
|
if (!err)
|
||||||
{
|
{
|
||||||
|
trx->commit(deleted);
|
||||||
m_prebuilt->table->acquire();
|
m_prebuilt->table->acquire();
|
||||||
create_table_info_t::create_table_update_dict(m_prebuilt->table,
|
create_table_info_t::create_table_update_dict(m_prebuilt->table,
|
||||||
m_user_thd, info, *table);
|
m_user_thd, info, *table);
|
||||||
trx->commit(deleted);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user