[MDEV-14655] Assertion `!fts_index' failed in prepare_inplace_alter_table_dict Created: 2017-12-14  Updated: 2018-01-15  Resolved: 2018-01-15

Status: Closed
Project: MariaDB Server
Component/s: Full-text Search, Storage Engine - InnoDB
Affects Version/s: 10.3
Fix Version/s: 10.3.4

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: None


 Description   

--source include/have_innodb.inc
 
CREATE TABLE t1 (a VARCHAR(8), b VARCHAR(8)) ENGINE=InnoDB;
ALTER TABLE t1 ADD FULLTEXT(b), ADD FULLTEXT(a);
 
# Cleanup
DROP TABLE t1;

10.3 34f2f4fa431893db5550

mysqld: /data/src/10.3/storage/innobase/handler/handler0alter.cc:5423: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `!fts_index' failed.
171216  3:21:29 [ERROR] mysqld got signal 6 ;
 
#7  0x00007f21c8457ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
#8  0x00005621228fb85f in prepare_inplace_alter_table_dict (ha_alter_info=0x7f21c0056520, altered_table=0x7f2170168e40, old_table=0x7f21700da2c0, table_name=0x7f217000e035 "t1", flags=33, flags2=94, fts_doc_id_col=2, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:5423
#9  0x00005621228ffba9 in ha_innobase::prepare_inplace_alter_table (this=0x7f217000c988, altered_table=0x7f2170168e40, ha_alter_info=0x7f21c0056520) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:6842
#10 0x00005621225989bb in handler::ha_prepare_inplace_alter_table (this=0x7f217000c988, altered_table=0x7f2170168e40, ha_alter_info=0x7f21c0056520) at /data/src/10.3/sql/handler.cc:4231
#11 0x0000562122397b0c in mysql_inplace_alter_table (thd=0x7f2170000b00, table_list=0x7f2170014c60, table=0x7f21700da2c0, altered_table=0x7f2170168e40, ha_alter_info=0x7f21c0056520, inplace_supported=HA_ALTER_INPLACE_SHARED_LOCK_AFTER_PREPARE, target_mdl_request=0x7f21c0056590, alter_ctx=0x7f21c0057150) at /data/src/10.3/sql/sql_table.cc:7357
#12 0x000056212239d10b in mysql_alter_table (thd=0x7f2170000b00, new_db=0x7f2170015270 "test", new_name=0x0, create_info=0x7f21c0057d60, table_list=0x7f2170014c60, alter_info=0x7f21c0057cb0, order_num=0, order=0x0, ignore=false) at /data/src/10.3/sql/sql_table.cc:9395
#13 0x000056212241d5c7 in Sql_cmd_alter_table::execute (this=0x7f21700153f8, thd=0x7f2170000b00) at /data/src/10.3/sql/sql_alter.cc:331
#14 0x00005621222cda6d in mysql_execute_command (thd=0x7f2170000b00) at /data/src/10.3/sql/sql_parse.cc:6248
#15 0x00005621222d247e in mysql_parse (thd=0x7f2170000b00, rawbuf=0x7f2170014b58 "ALTER TABLE t1 ADD FULLTEXT(b), ADD FULLTEXT(a)", length=47, parser_state=0x7f21c0059610, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7963
#16 0x00005621222bfe11 in dispatch_command (command=COM_QUERY, thd=0x7f2170000b00, packet=0x7f2170160d01 "ALTER TABLE t1 ADD FULLTEXT(b), ADD FULLTEXT(a)", packet_length=47, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1825
#17 0x00005621222be845 in do_command (thd=0x7f2170000b00) at /data/src/10.3/sql/sql_parse.cc:1370
#18 0x0000562122418140 in do_handle_one_connection (connect=0x562124f230d0) at /data/src/10.3/sql/sql_connect.cc:1420
#19 0x0000562122417ecd in handle_one_connection (arg=0x562124f230d0) at /data/src/10.3/sql/sql_connect.cc:1326
#20 0x00005621228a05c6 in pfs_spawn_thread (arg=0x562124f3fce0) at /data/src/10.3/storage/perfschema/pfs.cc:1863
#21 0x00007f21ca12e494 in start_thread (arg=0x7f21c005a700) at pthread_create.c:333
#22 0x00007f21c851493f in clone () from /lib/x86_64-linux-gnu/libc.so.6



 Comments   
Comment by Marko Mäkelä [ 2018-01-15 ]

In 10.2, the following error message is issued as expected:

mysqltest: At line 3: query 'ALTER TABLE t1 ADD FULLTEXT(b), ADD FULLTEXT(a)' failed: 1795: InnoDB presently supports one FULLTEXT index creation at a time

Comment by Marko Mäkelä [ 2018-01-15 ]

Actually, in MariaDB 10.0 to 10.2, the above error (which comes from logic that was inherited from MySQL 5.6 and 5.7) is wrong, and it occurs because the limitation is being enforced too late, after ALGORITHM=INPLACE has already been chosen.
Earlier MariaDB 10.x versions as well as upstream would fall back to ALGORITHM=COPY for rebuilding a table that contains multiple fulltext indexes, but not when the ALTER TABLE statement explicitly specifies multiple ADD FULLTEXT INDEX clauses. MariaDB 10.3.4 will correct this.

Generated at Thu Feb 08 08:15:16 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.