Details
-
Bug
-
Status: Stalled (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.3(EOL), 10.4(EOL)
Description
The function fts_fetch_doc_from_rec() and possibly other code for dealing with FULLTEXT INDEX assumes that no instant ALTER TABLE has been used.
It seems that this code may not be ready for MDEV-11369 either.
The following raw test demonstrates the problem:
--source include/have_innodb.inc
|
--disable_abort_on_error
|
--disable_warnings
|
|
CREATE TABLE IF NOT EXISTS t1 (col1 INT, col2 INT, col_int INTEGER, col_text TEXT) ENGINE = InnoDB ; |
ALTER TABLE t1 ADD FULLTEXT KEY `Marvão_ftidx1` ( col_text ), ADD FULLTEXT KEY IF NOT EXISTS `Marvão_ftidx1` ( col_text ) ; |
INSERT INTO t1 (col1,col2, col_int, col_text) VALUES ( 1, 1, 1 - 1, REPEAT(CAST( 1 AS CHAR(1)), @fill_amount) ) ; |
ALTER TABLE t1 ADD COLUMN col_int_copy INTEGER FIRST, ALGORITHM = DEFAULT ; |
ALTER TABLE t1 DROP COLUMN IF EXISTS col_int ; |
ALTER TABLE t1 CHANGE COLUMN IF EXISTS col_int_copy Col_int INTEGER, LOCK = NONE, ALGORITHM = INPLACE ; |
UPDATE t1 SET col1 = 28 LIMIT 2; |
ALTER TABLE t1 ADD FULLTEXT KEY `Marvão_ftidx1` ( col_text ), ADD FULLTEXT KEY IF NOT EXISTS `Marvão_ftidx1` ( col_text ) ; |
INSERT INTO t1 (col1,col2, col_int, col_text) VALUES ( 1, 1, 1 - 1, REPEAT(CAST( 1 AS CHAR(1)), @fill_amount) ) ; |
DROP TABLE t1; |
10.4-mdev-15562 ba5168fd8fa96a580645ecb0450e8ac5d53c86dd |
mysqld: fts/fts0fts.cc:3265: void fts_fetch_doc_from_rec(fts_get_doc_t*, dict_index_t*, btr_pcur_t*, ulint*, fts_doc_t*): Assertion `!page_rec_is_comp(clust_rec) || rec_get_status(clust_rec) == REC_STATUS_ORDINARY' failed.
|
I believe that a similar failure should be possible already on 10.3 when a user-created FTS_DOC_ID exists and MDEV-11369 Instant ADD COLUMN is used. Please clean up the test and check if 10.3 is affected.
Suggestions:
- Ensure that the hidden metadata record is always skipped. (Add debug assertions.)
- Properly handle records on which instantly added fields are present.
- Also test with UNIQUE INDEX FTS_DOC_ID_INDEX(FTS_DOC_ID) such that the table does not have any PRIMARY KEY.
Attachments
Issue Links
- relates to
-
MDEV-18623 Assertion `ha_alter_info->key_count + .... in prepare_inplace_alter_table_dict
- Closed
-
MDEV-20237 Block instant alter operation for the table with FULLTEXT index
- Stalled
-
MDEV-11369 Instant add column for InnoDB
- Closed
-
MDEV-11424 Instant ALTER TABLE of failure-free record format changes
- Closed
-
MDEV-15562 Instant DROP COLUMN or changing the order of columns
- Closed