Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.3(EOL), 10.4(EOL)
-
None
Description
--source include/have_innodb.inc
|
|
CREATE TABLE t1 (a VARCHAR(128), b VARCHAR(128)) ENGINE=InnoDB; |
ALTER TABLE t1 ADD FULLTEXT INDEX (a); |
ALTER TABLE t1 ADD FULLTEXT INDEX (b); |
ALTER TABLE t1 ADD c SERIAL; |
|
# Cleanup
|
DROP TABLE t1; |
10.3 82490a97dbb |
mysqld: /data/src/10.3/storage/innobase/handler/handler0alter.cc:5457: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `num_fts_index <= 1' failed.
|
190115 0:07:43 [ERROR] mysqld got signal 6 ;
|
|
#7 0x00007ff22435aee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
|
#8 0x000055ad5e1f6e05 in prepare_inplace_alter_table_dict (ha_alter_info=0x7ff21d69d360, altered_table=0x7ff1c80a7f40, old_table=0x7ff1c806dce0, table_name=0x7ff1c800e66d "t1", flags=33, flags2=94, fts_doc_id_col=3, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:5457
|
#9 0x000055ad5e1fbc10 in ha_innobase::prepare_inplace_alter_table (this=0x7ff1c800d258, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:6998
|
#10 0x000055ad5dea32cd in handler::ha_prepare_inplace_alter_table (this=0x7ff1c800d258, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360) at /data/src/10.3/sql/handler.cc:4436
|
#11 0x000055ad5dc79bbc in mysql_inplace_alter_table (thd=0x7ff1c8000b00, table_list=0x7ff1c8014dc0, table=0x7ff1c806dce0, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360, inplace_supported=HA_ALTER_INPLACE_COPY_LOCK, target_mdl_request=0x7ff21d69d490, alter_ctx=0x7ff21d69e090) at /data/src/10.3/sql/sql_table.cc:7515
|
#12 0x000055ad5dc7fe42 in mysql_alter_table (thd=0x7ff1c8000b00, new_db=0x7ff1c80051b8, new_name=0x7ff1c8005578, create_info=0x7ff21d69ec80, table_list=0x7ff1c8014dc0, alter_info=0x7ff21d69ebc0, order_num=0, order=0x0, ignore=false) at /data/src/10.3/sql/sql_table.cc:9700
|
#13 0x000055ad5dd07ccb in Sql_cmd_alter_table::execute (this=0x7ff1c80155e8, thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_alter.cc:497
|
#14 0x000055ad5dba9598 in mysql_execute_command (thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_parse.cc:6285
|
#15 0x000055ad5dbae669 in mysql_parse (thd=0x7ff1c8000b00, rawbuf=0x7ff1c8014cd8 "ALTER TABLE t1 ADD c SERIAL", length=27, parser_state=0x7ff21d6a05f0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:8092
|
#16 0x000055ad5db9b81d in dispatch_command (command=COM_QUERY, thd=0x7ff1c8000b00, packet=0x7ff1c8161121 "ALTER TABLE t1 ADD c SERIAL", packet_length=27, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1851
|
#17 0x000055ad5db9a241 in do_command (thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_parse.cc:1396
|
#18 0x000055ad5dd02256 in do_handle_one_connection (connect=0x55ad6045a050) at /data/src/10.3/sql/sql_connect.cc:1402
|
#19 0x000055ad5dd01fda in handle_one_connection (arg=0x55ad6045a050) at /data/src/10.3/sql/sql_connect.cc:1308
|
#20 0x000055ad5e19c8dd in pfs_spawn_thread (arg=0x55ad6049b940) at /data/src/10.3/storage/perfschema/pfs.cc:1862
|
#21 0x00007ff226031494 in start_thread (arg=0x7ff21d6a1700) at pthread_create.c:333
|
#22 0x00007ff22441793f in clone () from /lib/x86_64-linux-gnu/libc.so.6
|
Both debug and non-debug builds fail.
On 10.0-10.2 (and on upstream 5.6, 5.7) there is no assertion failure, but the error looks strange:
mysqltest: At line 5: query 'ALTER TABLE t1 ADD c SERIAL' failed: 1795: InnoDB presently supports one FULLTEXT index creation at a time |
Note that it happens upon adding the next column, not upon adding the second FULLTEXT index.
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Affects Version/s | 10.3 [ 22126 ] | |
Assignee | Elena Stepanova [ elenst ] | Marko Mäkelä [ marko ] |
Description |
{noformat:title=10.4 2465d3e0}
mysqld: /home/travis/src/storage/innobase/handler/handler0alter.cc:6513: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `num_fts_index <= 1' failed. 190105 16:36:48 [ERROR] mysqld got signal 6 ; #7 0x00007f94d8467c82 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6 #8 0x000056085b43e01b in prepare_inplace_alter_table_dict (ha_alter_info=0x7f94d500cc10, altered_table=0x56085e9cbd30, old_table=0x56085e646730, table_name=0x56085e8e286d "BB", flags=33, flags2=94, fts_doc_id_col=17, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /home/travis/src/storage/innobase/handler/handler0alter.cc:6513 #9 0x000056085b442dfe in ha_innobase::prepare_inplace_alter_table (this=0x56085e20f788, altered_table=0x56085e9cbd30, ha_alter_info=0x7f94d500cc10) at /home/travis/src/storage/innobase/handler/handler0alter.cc:8053 #10 0x000056085b1e8203 in handler::ha_prepare_inplace_alter_table (this=0x56085e20f788, altered_table=0x56085e9cbd30, ha_alter_info=0x7f94d500cc10) at /home/travis/src/sql/handler.cc:4472 #11 0x000056085afa663b in mysql_inplace_alter_table (thd=0x56085e05f1e0, table_list=0x56085e0744a8, table=0x56085e646730, altered_table=0x56085e9cbd30, ha_alter_info=0x7f94d500cc10, inplace_supported=HA_ALTER_INPLACE_COPY_LOCK, target_mdl_request=0x7f94d500cd40, alter_ctx=0x7f94d500d930) at /home/travis/src/sql/sql_table.cc:7505 #12 0x000056085afac894 in mysql_alter_table (thd=0x56085e05f1e0, new_db=0x56085e0638a8, new_name=0x56085e063c78, create_info=0x7f94d500e520, table_list=0x56085e0744a8, alter_info=0x7f94d500e460, order_num=0, order=0x0, ignore=false) at /home/travis/src/sql/sql_table.cc:9688 #13 0x000056085b036f18 in Sql_cmd_alter_table::execute (this=0x56085e074d00, thd=0x56085e05f1e0) at /home/travis/src/sql/sql_alter.cc:497 #14 0x000056085aed44ef in mysql_execute_command (thd=0x56085e05f1e0) at /home/travis/src/sql/sql_parse.cc:6302 #15 0x000056085aed96f4 in mysql_parse (thd=0x56085e05f1e0, rawbuf=0x56085e0742f8 "ALTER TABLE `BB` /*!100301 */ ADD COLUMN IF NOT EXISTS `col_time_nokey` SERIAL FIRST, LOCK=SHARED /* QNO 9738 CON_ID 14 */", length=123, parser_state=0x7f94d500f650, is_com_multi=false, is_next_command=false) at /home/travis/src/sql/sql_parse.cc:8104 #16 0x000056085aec65de in dispatch_command (command=COM_QUERY, thd=0x56085e05f1e0, packet=0x56085e213dd1 "ALTER TABLE `BB` /*!100301 */ ADD COLUMN IF NOT EXISTS `col_time_nokey` SERIAL FIRST, LOCK=SHARED /* QNO 9738 CON_ID 14 */ ", packet_length=124, is_com_multi=false, is_next_command=false) at /home/travis/src/sql/sql_parse.cc:1851 #17 0x000056085aec4ffb in do_command (thd=0x56085e05f1e0) at /home/travis/src/sql/sql_parse.cc:1396 #18 0x000056085b030f58 in do_handle_one_connection (connect=0x56085e048e20) at /home/travis/src/sql/sql_connect.cc:1402 #19 0x000056085b030ca9 in handle_one_connection (arg=0x56085e048e20) at /home/travis/src/sql/sql_connect.cc:1308 #20 0x00007f94d90ac6ba in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0 #21 0x00007f94d854141d in clone () from /lib/x86_64-linux-gnu/libc.so.6 Query (0x56085e0742f8): ALTER TABLE `BB` /*!100301 */ ADD COLUMN IF NOT EXISTS `col_time_nokey` SERIAL FIRST, LOCK=SHARED /* QNO 9738 CON_ID 14 */ Connection ID (thread ID): 14 Status: NOT_KILLED {noformat} {noformat:title=elenst-dev b65d4a39a, mariadb-toolbox 0acf1236b19} perl ./runall-new.pl --basedir=/home/travis/server --vardir=/home/travis/logs/vardir --duration=350 --threads=6 --seed=1546706008 --reporters=Backtrace,ErrorLog,Deadlock --validators=TransformerNoComparator --views --redefine=conf/mariadb/alter_table.yy --redefine=conf/mariadb/instant_add.yy --redefine=conf/mariadb/sp.yy --redefine=conf/mariadb/bulk_insert.yy --redefine=conf/mariadb/sequences.yy --redefine=conf/mariadb/modules/admin.yy --redefine=conf/mariadb/modules/userstat.yy --redefine=conf/mariadb/modules/foreign_keys.yy -redefine=conf/mariadb/modules/locks.yy --redefine=conf/mariadb/modules/locks-10.4-extra.yy --redefine=conf/mariadb/modules/alter_table_columns.yy --mysqld=--log_output=FILE --mysqld=--max-statement-time=30 --mysqld=--lock-wait-timeout=10 --mysqld=--loose-innodb-lock-wait-timeout=5 --mysqld=--loose-debug_assert_on_not_freed_memory=0 --grammar=conf/engines/innodb/full_text_search.yy --transformers=ExecuteAsIntersect,ExecuteAsExcept,ExecuteAsCTE,ExecuteAsExecuteImmediate,ExecuteAsDeleteReturning,ExecuteAsInsertSelect,ExecuteAsUnion,ExecuteAsUpdateDelete,ExecuteAsView,ExecuteAsPreparedTwice --redefine=conf/mariadb/versioning.yy --filter=/home/travis/mariadb-toolbox/travis/10.4-combo-filter.ff {noformat} Not reproducible right away, by re-running the test I get other known bugs instead, e.g. |
{code:sql}
--source include/have_innodb.inc CREATE TABLE t1 (a VARCHAR(128), b VARCHAR(128)) ENGINE=InnoDB; ALTER TABLE t1 ADD FULLTEXT INDEX (a); ALTER TABLE t1 ADD FULLTEXT INDEX (b); ALTER TABLE t1 ADD c SERIAL; # Cleanup DROP TABLE t1; {code} {noformat:title=10.3 82490a97dbb} mysqld: /data/src/10.3/storage/innobase/handler/handler0alter.cc:5457: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `num_fts_index <= 1' failed. 190115 0:07:43 [ERROR] mysqld got signal 6 ; #7 0x00007ff22435aee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6 #8 0x000055ad5e1f6e05 in prepare_inplace_alter_table_dict (ha_alter_info=0x7ff21d69d360, altered_table=0x7ff1c80a7f40, old_table=0x7ff1c806dce0, table_name=0x7ff1c800e66d "t1", flags=33, flags2=94, fts_doc_id_col=3, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:5457 #9 0x000055ad5e1fbc10 in ha_innobase::prepare_inplace_alter_table (this=0x7ff1c800d258, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:6998 #10 0x000055ad5dea32cd in handler::ha_prepare_inplace_alter_table (this=0x7ff1c800d258, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360) at /data/src/10.3/sql/handler.cc:4436 #11 0x000055ad5dc79bbc in mysql_inplace_alter_table (thd=0x7ff1c8000b00, table_list=0x7ff1c8014dc0, table=0x7ff1c806dce0, altered_table=0x7ff1c80a7f40, ha_alter_info=0x7ff21d69d360, inplace_supported=HA_ALTER_INPLACE_COPY_LOCK, target_mdl_request=0x7ff21d69d490, alter_ctx=0x7ff21d69e090) at /data/src/10.3/sql/sql_table.cc:7515 #12 0x000055ad5dc7fe42 in mysql_alter_table (thd=0x7ff1c8000b00, new_db=0x7ff1c80051b8, new_name=0x7ff1c8005578, create_info=0x7ff21d69ec80, table_list=0x7ff1c8014dc0, alter_info=0x7ff21d69ebc0, order_num=0, order=0x0, ignore=false) at /data/src/10.3/sql/sql_table.cc:9700 #13 0x000055ad5dd07ccb in Sql_cmd_alter_table::execute (this=0x7ff1c80155e8, thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_alter.cc:497 #14 0x000055ad5dba9598 in mysql_execute_command (thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_parse.cc:6285 #15 0x000055ad5dbae669 in mysql_parse (thd=0x7ff1c8000b00, rawbuf=0x7ff1c8014cd8 "ALTER TABLE t1 ADD c SERIAL", length=27, parser_state=0x7ff21d6a05f0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:8092 #16 0x000055ad5db9b81d in dispatch_command (command=COM_QUERY, thd=0x7ff1c8000b00, packet=0x7ff1c8161121 "ALTER TABLE t1 ADD c SERIAL", packet_length=27, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1851 #17 0x000055ad5db9a241 in do_command (thd=0x7ff1c8000b00) at /data/src/10.3/sql/sql_parse.cc:1396 #18 0x000055ad5dd02256 in do_handle_one_connection (connect=0x55ad6045a050) at /data/src/10.3/sql/sql_connect.cc:1402 #19 0x000055ad5dd01fda in handle_one_connection (arg=0x55ad6045a050) at /data/src/10.3/sql/sql_connect.cc:1308 #20 0x000055ad5e19c8dd in pfs_spawn_thread (arg=0x55ad6049b940) at /data/src/10.3/storage/perfschema/pfs.cc:1862 #21 0x00007ff226031494 in start_thread (arg=0x7ff21d6a1700) at pthread_create.c:333 #22 0x00007ff22441793f in clone () from /lib/x86_64-linux-gnu/libc.so.6 {noformat} Both debug and non-debug builds fail. On 10.0-10.2 (and on upstream 5.6, 5.7) there is no assertion failure, but the error looks strange: {code:sql} mysqltest: At line 5: query 'ALTER TABLE t1 ADD c SERIAL' failed: 1795: InnoDB presently supports one FULLTEXT index creation at a time {code} Note that it happens upon adding the next column, not upon adding the second FULLTEXT index. |
Summary | [Draft] Assertion `num_fts_index <= 1' failed in prepare_inplace_alter_table_dict | Assertion `num_fts_index <= 1' failed in prepare_inplace_alter_table_dict |
issue.field.resolutiondate | 2019-01-18 10:46:59.0 | 2019-01-18 10:46:59.985 |
Fix Version/s | 10.4.2 [ 23229 ] | |
Fix Version/s | 10.3.13 [ 23215 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 91511 ] | MariaDB v4 [ 155454 ] |
Yes, InnoDB would output that obscure message whenever trying to rebuild a table that contains multiple FULLTEXT INDEX. And it is a ridiculous limitation that was introduced in MySQL 5.6 and never fixed since.
The logic in ha_innobase::check_if_supported_inplace_alter() was broken related to
MDEV-11369orMDEV-13134. Here is a simpler test case: