[MDEV-18274] Assertion `!!new_clustered == (innobase_need_rebuild(ha_alter_info, old_table) || add_fts_doc_id)' failed in prepare_inplace_alter_table_dict Created: 2019-01-16  Updated: 2023-04-27

Status: Confirmed
Project: MariaDB Server
Component/s: Data Definition - Alter Table, GIS, Storage Engine - InnoDB
Affects Version/s: 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7
Fix Version/s: 10.4, 10.5, 10.6

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


 Description   

--source include/have_innodb.inc
 
CREATE TABLE t1 (e GEOMETRY NOT NULL) ENGINE=InnoDB;
ALTER TABLE t1 ADD UNIQUE (e(4));
 
# Cleanup
DROP TABLE t1;

10.0 12f362c333

mysqld: /data/src/10.0/storage/innobase/handler/handler0alter.cc:2772: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `!!new_clustered == (innobase_need_rebuild(ha_alter_info, old_table) || add_fts_doc_id)' failed.
190116 23:50:40 [ERROR] mysqld got signal 6 ;
 
#7  0x00007f5b41ce2ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
#8  0x00007f5b3a7624f8 in prepare_inplace_alter_table_dict (ha_alter_info=0x7f5b43da5220, altered_table=0x7f5b2df9f070, old_table=0x7f5b2dc9e470, table_name=0x7f5b2dc61175 "t1", flags=1, flags2=80, fts_doc_id_col=18446744073709551615, add_fts_doc_id=false, add_fts_doc_id_idx=false) at /data/src/10.0/storage/innobase/handler/handler0alter.cc:2770
#9  0x00007f5b3a765f73 in ha_innodb::prepare_inplace_alter_table (this=0x7f5b2dc7e888, altered_table=0x7f5b2df9f070, ha_alter_info=0x7f5b43da5220) at /data/src/10.0/storage/innobase/handler/handler0alter.cc:4040
#10 0x0000000000845071 in handler::ha_prepare_inplace_alter_table (this=0x7f5b2dc7e888, altered_table=0x7f5b2df9f070, ha_alter_info=0x7f5b43da5220) at /data/src/10.0/sql/handler.cc:4208
#11 0x000000000070275c in mysql_inplace_alter_table (thd=0x7f5b36369070, table_list=0x7f5b2dcf8178, table=0x7f5b2dc9e470, altered_table=0x7f5b2df9f070, ha_alter_info=0x7f5b43da5220, inplace_supported=HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE, target_mdl_request=0x7f5b43da4c70, alter_ctx=0x7f5b43da5800) at /data/src/10.0/sql/sql_table.cc:7118
#12 0x0000000000706ffc in mysql_alter_table (thd=0x7f5b36369070, new_db=0x7f5b2dcf8758 "test", new_name=0x0, create_info=0x7f5b43da64e0, table_list=0x7f5b2dcf8178, alter_info=0x7f5b43da6450, order_num=0, order=0x0, ignore=false) at /data/src/10.0/sql/sql_table.cc:8982
#13 0x0000000000770361 in Sql_cmd_alter_table::execute (this=0x7f5b2dcf8828, thd=0x7f5b36369070) at /data/src/10.0/sql/sql_alter.cc:312
#14 0x0000000000654d27 in mysql_execute_command (thd=0x7f5b36369070) at /data/src/10.0/sql/sql_parse.cc:5125
#15 0x000000000065837e in mysql_parse (thd=0x7f5b36369070, rawbuf=0x7f5b2dcf8088 "ALTER TABLE t1 ADD UNIQUE (e(4))", length=32, parser_state=0x7f5b43da7640) at /data/src/10.0/sql/sql_parse.cc:6644
#16 0x000000000064ac38 in dispatch_command (command=COM_QUERY, thd=0x7f5b36369070, packet=0x7f5b3be30071 "ALTER TABLE t1 ADD UNIQUE (e(4))", packet_length=32) at /data/src/10.0/sql/sql_parse.cc:1301
#17 0x0000000000649f2c in do_command (thd=0x7f5b36369070) at /data/src/10.0/sql/sql_parse.cc:1003
#18 0x000000000076bab4 in do_handle_one_connection (thd_arg=0x7f5b36369070) at /data/src/10.0/sql/sql_connect.cc:1377
#19 0x000000000076b826 in handle_one_connection (arg=0x7f5b36369070) at /data/src/10.0/sql/sql_connect.cc:1292
#20 0x0000000000acd6ea in pfs_spawn_thread (arg=0x7f5b36319670) at /data/src/10.0/storage/perfschema/pfs.cc:1861
#21 0x00007f5b439e6494 in start_thread (arg=0x7f5b43da8700) at pthread_create.c:333
#22 0x00007f5b41d9f93f in clone () from /lib/x86_64-linux-gnu/libc.so.6

Not reproducible on 5.5.
No visible effect on a non-debug build.



 Comments   
Comment by Elena Stepanova [ 2021-04-20 ]

A variation of the test case and the assertion failures:

--source include/have_innodb.inc
 
CREATE TABLE t (a GEOMETRY NOT NULL, b TEXT, FULLTEXT KEY(b)) ENGINE=InnoDB;
ALTER TABLE t ADD UNIQUE (a(4));
 
# Cleanup
DROP TABLE t;

10.5 675c22c0

mariadbd: /data/src/10.5/storage/innobase/handler/handler0alter.cc:6756: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `!ctx->online || num_fts_index == 0' failed.
210420 19:24:58 [ERROR] mysqld got signal 6 ;
 
#7  0x00007fa2d316cf36 in __GI___assert_fail (assertion=0x557f631c3728 "!ctx->online || num_fts_index == 0", file=0x557f631be298 "/data/src/10.5/storage/innobase/handler/handler0alter.cc", line=6756, function=0x557f631c2be8 "bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool)") at assert.c:101
#8  0x0000557f6290a6e1 in prepare_inplace_alter_table_dict (ha_alter_info=0x7fa2cc3c4860, altered_table=0x7fa2cc3c4900, old_table=0x7fa2a01d1508, table_name=0x7fa2a01d2915 "t", flags=33, flags2=94, fts_doc_id_col=2, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /data/src/10.5/storage/innobase/handler/handler0alter.cc:6756
#9  0x0000557f62910c47 in ha_innobase::prepare_inplace_alter_table (this=0x7fa2a01d40f0, altered_table=0x7fa2cc3c4900, ha_alter_info=0x7fa2cc3c4860) at /data/src/10.5/storage/innobase/handler/handler0alter.cc:8250
#10 0x0000557f6244768c in handler::ha_prepare_inplace_alter_table (this=0x7fa2a01d40f0, altered_table=0x7fa2cc3c4900, ha_alter_info=0x7fa2cc3c4860) at /data/src/10.5/sql/handler.cc:4837
#11 0x0000557f621cfe4a in mysql_inplace_alter_table (thd=0x7fa2a0000db8, table_list=0x7fa2a00153d0, table=0x7fa2a01d1508, altered_table=0x7fa2cc3c4900, ha_alter_info=0x7fa2cc3c4860, target_mdl_request=0x7fa2cc3c4cd0, alter_ctx=0x7fa2cc3c5820) at /data/src/10.5/sql/sql_table.cc:8039
#12 0x0000557f621d7f04 in mysql_alter_table (thd=0x7fa2a0000db8, new_db=0x7fa2a0005810, new_name=0x7fa2a0005c30, create_info=0x7fa2cc3c6430, table_list=0x7fa2a00153d0, alter_info=0x7fa2cc3c6360, order_num=0, order=0x0, ignore=false, if_exists=false) at /data/src/10.5/sql/sql_table.cc:10678
#13 0x0000557f62280422 in Sql_cmd_alter_table::execute (this=0x7fa2a0015b88, thd=0x7fa2a0000db8) at /data/src/10.5/sql/sql_alter.cc:539
#14 0x0000557f620d61ab in mysql_execute_command (thd=0x7fa2a0000db8) at /data/src/10.5/sql/sql_parse.cc:6055
#15 0x0000557f620dc3bc in mysql_parse (thd=0x7fa2a0000db8, rawbuf=0x7fa2a00152f0 "ALTER TABLE t ADD UNIQUE (a(4))", length=31, parser_state=0x7fa2cc3c7490, is_com_multi=false, is_next_command=false) at /data/src/10.5/sql/sql_parse.cc:8099
#16 0x0000557f620c8337 in dispatch_command (command=COM_QUERY, thd=0x7fa2a0000db8, packet=0x7fa2a000b5a9 "ALTER TABLE t ADD UNIQUE (a(4))", packet_length=31, is_com_multi=false, is_next_command=false) at /data/src/10.5/sql/sql_parse.cc:1891
#17 0x0000557f620c6b29 in do_command (thd=0x7fa2a0000db8) at /data/src/10.5/sql/sql_parse.cc:1370
#18 0x0000557f62275845 in do_handle_one_connection (connect=0x557f6586ac48, put_in_cache=true) at /data/src/10.5/sql/sql_connect.cc:1410
#19 0x0000557f622755a8 in handle_one_connection (arg=0x557f658473a8) at /data/src/10.5/sql/sql_connect.cc:1312
#20 0x0000557f627d9741 in pfs_spawn_thread (arg=0x557f65868458) at /data/src/10.5/storage/perfschema/pfs.cc:2201
#21 0x00007fa2d3684609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#22 0x00007fa2d3258293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

10.2 635b5ce3

mysqld: /data/src/10.2/storage/innobase/handler/handler0alter.cc:4462: bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool): Assertion `0' failed.
210420 19:25:51 [ERROR] mysqld got signal 6 ;
 
#7  0x00007fdca9d10f36 in __GI___assert_fail (assertion=0x55e2527a2e75 "0", file=0x55e2527a4300 "/data/src/10.2/storage/innobase/handler/handler0alter.cc", line=4462, function=0x55e2527a65e8 "bool prepare_inplace_alter_table_dict(Alter_inplace_info*, const TABLE*, const TABLE*, const char*, ulint, ulint, ulint, bool, bool)") at assert.c:101
#8  0x000055e2520c988f in prepare_inplace_alter_table_dict (ha_alter_info=0x7fdc9ffb1010, altered_table=0x7fdc50089870, old_table=0x7fdc50074d60, table_name=0x7fdc501758b5 "t", flags=33, flags2=84, fts_doc_id_col=2, add_fts_doc_id=true, add_fts_doc_id_idx=true) at /data/src/10.2/storage/innobase/handler/handler0alter.cc:4462
#9  0x000055e2520ceb64 in ha_innobase::prepare_inplace_alter_table (this=0x7fdc50075968, altered_table=0x7fdc50089870, ha_alter_info=0x7fdc9ffb1010) at /data/src/10.2/storage/innobase/handler/handler0alter.cc:6103
#10 0x000055e251e8ee81 in handler::ha_prepare_inplace_alter_table (this=0x7fdc50075968, altered_table=0x7fdc50089870, ha_alter_info=0x7fdc9ffb1010) at /data/src/10.2/sql/handler.cc:4366
#11 0x000055e251cd6d1d in mysql_inplace_alter_table (thd=0x7fdc50000d90, table_list=0x7fdc500127d8, table=0x7fdc50074d60, altered_table=0x7fdc50089870, ha_alter_info=0x7fdc9ffb1010, inplace_supported=HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE, target_mdl_request=0x7fdc9ffb10a0, alter_ctx=0x7fdc9ffb1650) at /data/src/10.2/sql/sql_table.cc:7425
#12 0x000055e251cdcd55 in mysql_alter_table (thd=0x7fdc50000d90, new_db=0x7fdc50012df0 "test", new_name=0x0, create_info=0x7fdc9ffb2270, table_list=0x7fdc500127d8, alter_info=0x7fdc9ffb21c0, order_num=0, order=0x0, ignore=false) at /data/src/10.2/sql/sql_table.cc:9627
#13 0x000055e251d5b440 in Sql_cmd_alter_table::execute (this=0x7fdc50012ec0, thd=0x7fdc50000d90) at /data/src/10.2/sql/sql_alter.cc:333
#14 0x000055e251c096fd in mysql_execute_command (thd=0x7fdc50000d90) at /data/src/10.2/sql/sql_parse.cc:6020
#15 0x000055e251c0e562 in mysql_parse (thd=0x7fdc50000d90, rawbuf=0x7fdc500126f8 "ALTER TABLE t ADD UNIQUE (a(4))", length=31, parser_state=0x7fdc9ffb3570, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:7796
#16 0x000055e251bfc78c in dispatch_command (command=COM_QUERY, thd=0x7fdc50000d90, packet=0x7fdc50008b51 "ALTER TABLE t ADD UNIQUE (a(4))", packet_length=31, is_com_multi=false, is_next_command=false) at /data/src/10.2/sql/sql_parse.cc:1827
#17 0x000055e251bfb287 in do_command (thd=0x7fdc50000d90) at /data/src/10.2/sql/sql_parse.cc:1381
#18 0x000055e251d55e36 in do_handle_one_connection (connect=0x55e255b72800) at /data/src/10.2/sql/sql_connect.cc:1336
#19 0x000055e251d55b9b in handle_one_connection (arg=0x55e255b72800) at /data/src/10.2/sql/sql_connect.cc:1241
#20 0x000055e252580cec in pfs_spawn_thread (arg=0x55e255c15a50) at /data/src/10.2/storage/perfschema/pfs.cc:1869
#21 0x00007fdcaa220609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#22 0x00007fdca9dfc293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

No obvious immediate problem on a non-debug build.

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