MDEV-19647 Server hangs after dropping full text indexes and restart

- There is no need to add the table in fts_optimize_wq if there is
no fts indexes associated with it.
parent ae2b88ff
...@@ -734,15 +734,21 @@ count(*) ...@@ -734,15 +734,21 @@ count(*)
DROP TABLE t1; DROP TABLE t1;
"----------Test27---------" "----------Test27---------"
CREATE TABLE t1 (id INT,char_column VARCHAR(60)); CREATE TABLE t1 (id INT,char_column VARCHAR(60));
CREATE TABLE t2 (FTS_DOC_ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, a TEXT)ENGINE=InnoDB;
ALTER TABLE t2 DROP a;
SET @@autocommit=0; SET @@autocommit=0;
CREATE FULLTEXT INDEX i ON t1 (char_column); CREATE FULLTEXT INDEX i ON t1 (char_column);
INSERT INTO t1 values (1,'aaa'); INSERT INTO t1 values (1,'aaa');
"restart server..." "restart server..."
# Restart the server SHOW CREATE TABLE t2;
--source include/restart_mysqld.inc Table Create Table
DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb') t2 CREATE TABLE `t2` (
`FTS_DOC_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`FTS_DOC_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb');
SET @@autocommit=1; SET @@autocommit=1;
DROP TABLE t1; DROP TABLE t1, t2;
"----------Test28---------" "----------Test28---------"
drop table if exists `fts_test`; drop table if exists `fts_test`;
Warnings: Warnings:
......
...@@ -667,15 +667,18 @@ DROP TABLE t1; ...@@ -667,15 +667,18 @@ DROP TABLE t1;
--echo "----------Test27---------" --echo "----------Test27---------"
#27 Crash after server restart #27 Crash after server restart
CREATE TABLE t1 (id INT,char_column VARCHAR(60)); CREATE TABLE t1 (id INT,char_column VARCHAR(60));
CREATE TABLE t2 (FTS_DOC_ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, a TEXT)ENGINE=InnoDB;
ALTER TABLE t2 DROP a;
SET @@autocommit=0; SET @@autocommit=0;
CREATE FULLTEXT INDEX i ON t1 (char_column); CREATE FULLTEXT INDEX i ON t1 (char_column);
INSERT INTO t1 values (1,'aaa'); INSERT INTO t1 values (1,'aaa');
echo "restart server..." echo "restart server...";
# Restart the server # Restart the server
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
SHOW CREATE TABLE t2;
DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb'); DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb');
SET @@autocommit=1; SET @@autocommit=1;
DROP TABLE t1; DROP TABLE t1, t2;
--echo "----------Test28---------" --echo "----------Test28---------"
drop table if exists `fts_test`; drop table if exists `fts_test`;
......
...@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table) ...@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table)
return; return;
} }
/* If there is no fts index present then don't add to
optimize queue. */
if (!ib_vector_size(table->fts->indexes)) {
return;
}
/* Make sure table with FTS index cannot be evicted */ /* Make sure table with FTS index cannot be evicted */
if (table->can_be_evicted) { if (table->can_be_evicted) {
dict_table_move_from_lru_to_non_lru(table); dict_table_move_from_lru_to_non_lru(table);
......
...@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table) ...@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table)
return; return;
} }
/* If there is no fts index present then don't add to
optimize queue. */
if (!ib_vector_size(table->fts->indexes)) {
return;
}
/* Make sure table with FTS index cannot be evicted */ /* Make sure table with FTS index cannot be evicted */
if (table->can_be_evicted) { if (table->can_be_evicted) {
dict_table_move_from_lru_to_non_lru(table); dict_table_move_from_lru_to_non_lru(table);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment