summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2019-09-17 20:47:58 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2019-09-17 20:47:58 +0530
commit708f1e341915b9fe2968581c60fb6a224b185af9 (patch)
treea186010c6c72fea4f9ad6641fb721a8159e2d6d1
parentae2b88ff3f94253921fed5c48422adeebe7e623d (diff)
downloadmariadb-git-708f1e341915b9fe2968581c60fb6a224b185af9.tar.gz
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.
-rw-r--r--mysql-test/suite/innodb_fts/r/innodb_fts_misc.result14
-rw-r--r--mysql-test/suite/innodb_fts/t/innodb_fts_misc.test7
-rw-r--r--storage/innobase/fts/fts0opt.cc6
-rw-r--r--storage/xtradb/fts/fts0opt.cc6
4 files changed, 27 insertions, 6 deletions
diff --git a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result
index 628fe8519ed..71eded74be4 100644
--- a/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result
+++ b/mysql-test/suite/innodb_fts/r/innodb_fts_misc.result
@@ -734,15 +734,21 @@ count(*)
DROP TABLE t1;
"----------Test27---------"
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;
CREATE FULLTEXT INDEX i ON t1 (char_column);
INSERT INTO t1 values (1,'aaa');
"restart server..."
-# Restart the server
---source include/restart_mysqld.inc
-DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb')
+SHOW CREATE TABLE t2;
+Table Create Table
+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;
-DROP TABLE t1;
+DROP TABLE t1, t2;
"----------Test28---------"
drop table if exists `fts_test`;
Warnings:
diff --git a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test
index 68ca8974512..e226b276966 100644
--- a/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test
+++ b/mysql-test/suite/innodb_fts/t/innodb_fts_misc.test
@@ -667,15 +667,18 @@ DROP TABLE t1;
--echo "----------Test27---------"
#27 Crash after server restart
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;
CREATE FULLTEXT INDEX i ON t1 (char_column);
INSERT INTO t1 values (1,'aaa');
-echo "restart server..."
+echo "restart server...";
# Restart the server
--source include/restart_mysqld.inc
+SHOW CREATE TABLE t2;
DELETE FROM t1 WHERE MATCH(char_column) AGAINST ('bbb');
SET @@autocommit=1;
-DROP TABLE t1;
+DROP TABLE t1, t2;
--echo "----------Test28---------"
drop table if exists `fts_test`;
diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc
index 2f8739d3d2c..553c6ff392b 100644
--- a/storage/innobase/fts/fts0opt.cc
+++ b/storage/innobase/fts/fts0opt.cc
@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table)
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 */
if (table->can_be_evicted) {
dict_table_move_from_lru_to_non_lru(table);
diff --git a/storage/xtradb/fts/fts0opt.cc b/storage/xtradb/fts/fts0opt.cc
index 2f8739d3d2c..553c6ff392b 100644
--- a/storage/xtradb/fts/fts0opt.cc
+++ b/storage/xtradb/fts/fts0opt.cc
@@ -2614,6 +2614,12 @@ UNIV_INTERN void fts_optimize_add_table(dict_table_t* table)
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 */
if (table->can_be_evicted) {
dict_table_move_from_lru_to_non_lru(table);