|
A modification of the test case (extra ALTER after the failing DELETE) triggers a non-debug assertion failure or SIGABRT:
|
Assertion failure (with ROW_FORMAT=COMPRESSED)
|
--source include/have_innodb.inc
|
|
CREATE TABLE t1 (f1 INT, f2 TEXT, f3 INT, FULLTEXT (f2), KEY(f1), KEY(f3), FOREIGN KEY r (f3) REFERENCES t1 (f1) ON DELETE SET NULL) WITH SYSTEM VERSIONING ROW_FORMAT=COMPRESSED ENGINE=InnoDB;
|
INSERT INTO t1 VALUES (1,REPEAT('a',8193),1),(1,REPEAT('b',8193),1);
|
--error ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO
|
DELETE FROM t1;
|
ALTER TABLE t1 ADD KEY idx (f2(10));
|
|
# Cleanup
|
DROP TABLE t1;
|
|
10.3 311b7f94 non-debug
|
2020-10-20 15:09:27 9 [ERROR] InnoDB: Duplicate FTS_DOC_ID value on table `test`.`t1`
|
2020-10-20 15:09:27 9 [ERROR] InnoDB: Unexpected type 17855 of compressed BLOB page [page id: space=5, page number=8]
|
2020-10-20 15:09:27 0x7f67ccb4d300 InnoDB: Assertion failure in file /data/src/10.3/storage/innobase/row/row0merge.cc line 733
|
InnoDB: Failing assertion: buf != field_ref_zero
|
|
#6 0x00005621ad4475e0 in ut_dbg_assertion_failed (expr=expr@entry=0x5621af3115a0 "buf != field_ref_zero", file=file@entry=0x5621af3113a0 "/data/src/10.3/storage/innobase/row/row0merge.cc", line=line@entry=733) at /data/src/10.3/storage/innobase/ut/ut0dbg.cc:60
|
#7 0x00005621ad4177c4 in row_merge_buf_add (buf=<optimized out>, fts_index=<optimized out>, old_table=<optimized out>, new_table=<optimized out>, psort_info=<optimized out>, row=<optimized out>, ext=<optimized out>, doc_id=<optimized out>, conv_heap=<optimized out>, err=<optimized out>, v_heap=<optimized out>, my_table=<optimized out>, trx=<optimized out>) at /data/src/10.3/storage/innobase/row/row0merge.cc:733
|
#8 0x00005621ae6385a1 in row_merge_read_clustered_index (trx=<optimized out>, table=<optimized out>, old_table=<optimized out>, new_table=<optimized out>, online=<optimized out>, index=<optimized out>, fts_sort_idx=<optimized out>, psort_info=<optimized out>, files=<optimized out>, key_numbers=<optimized out>, n_index=<optimized out>, defaults=<optimized out>, add_v=<optimized out>, col_map=<optimized out>, add_autoinc=<optimized out>, sequence=..., block=<optimized out>, skip_pk_sort=<optimized out>, tmpfd=<optimized out>, stage=<optimized out>, pct_cost=<optimized out>, crypt_block=<optimized out>, eval_table=<optimized out>, allow_not_null=<optimized out>) at /data/src/10.3/storage/innobase/row/row0merge.cc:2354
|
#9 0x00005621ae63f624 in row_merge_build_indexes (trx=<optimized out>, old_table=old_table@entry=0x6170000356f0, new_table=<optimized out>, online=<optimized out>, indexes=<optimized out>, key_numbers=<optimized out>, n_indexes=<optimized out>, table=<optimized out>, defaults=<optimized out>, col_map=<optimized out>, add_autoinc=<optimized out>, sequence=..., skip_pk_sort=<optimized out>, stage=<optimized out>, add_v=<optimized out>, eval_table=<optimized out>, allow_not_null=<optimized out>) at /data/src/10.3/storage/innobase/row/row0merge.cc:4709
|
#10 0x00005621ae427fda in ha_innobase::inplace_alter_table (this=<optimized out>, altered_table=<optimized out>, ha_alter_info=<optimized out>) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:7154
|
#11 0x00005621ad96a9e7 in handler::ha_inplace_alter_table (ha_alter_info=0x7f67ccb44400, altered_table=0x61f000045288, this=<optimized out>) at /data/src/10.3/sql/sql_table.cc:7788
|
#12 mysql_inplace_alter_table (thd=0x62a0000ae208, table_list=<optimized out>, table=0x61f000043688, altered_table=<optimized out>, ha_alter_info=<optimized out>, inplace_supported=<optimized out>, alter_ctx=<optimized out>, target_mdl_request=<optimized out>) at /data/src/10.3/sql/sql_table.cc:7654
|
#13 0x00005621ad9955a6 in mysql_alter_table (thd=thd@entry=0x62a0000ae208, new_db=new_db@entry=0x62a0000b2730, new_name=new_name@entry=0x62a0000b2af8, create_info=create_info@entry=0x7f67ccb468c0, table_list=<optimized out>, table_list@entry=0x62b000000350, alter_info=alter_info@entry=0x7f67ccb467c0, order_num=<optimized out>, order=<optimized out>, ignore=<optimized out>) at /data/src/10.3/sql/sql_table.cc:9946
|
#14 0x00005621adab8c41 in Sql_cmd_alter_table::execute (this=<optimized out>, thd=0x62a0000ae208) at /data/src/10.3/sql/sql_alter.cc:512
|
#15 0x00005621ad74fc87 in mysql_execute_command (thd=0x62a0000ae208) at /data/src/10.3/sql/sql_parse.cc:6022
|
#16 0x00005621ad7683e0 in mysql_parse (thd=thd@entry=0x62a0000ae208, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x7f67ccb4afb0, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /data/src/10.3/sql/sql_parse.cc:7810
|
#17 0x00005621ad76f027 in dispatch_command (command=COM_QUERY, thd=0x62a0000ae208, packet=<optimized out>, packet_length=<optimized out>, is_com_multi=<optimized out>, is_next_command=<optimized out>) at /data/src/10.3/sql/sql_class.h:1137
|
#18 0x00005621ad775e0e in do_command (thd=0x62a0000ae208) at /data/src/10.3/sql/sql_parse.cc:1393
|
#19 0x00005621adaae7e7 in do_handle_one_connection (connect=connect@entry=0x608000000ea8) at /data/src/10.3/sql/sql_connect.cc:1403
|
#20 0x00005621adaaf06f in handle_one_connection (arg=arg@entry=0x608000000ea8) at /data/src/10.3/sql/sql_connect.cc:1308
|
#21 0x00005621aee27c99 in pfs_spawn_thread (arg=0x615000005588) at /data/src/10.3/storage/perfschema/pfs.cc:1869
|
#22 0x00007f67e3473609 in start_thread (arg=<optimized out>) at pthread_create.c:477
|
#23 0x00007f67e304f293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
|
|
Fatal error (with default ROW_FORMAT)
|
--source include/have_innodb.inc
|
|
CREATE TABLE t1 (f1 INT, f2 TEXT, f3 INT, FULLTEXT (f2), KEY(f1), KEY(f3), FOREIGN KEY r (f3) REFERENCES t1 (f1) ON DELETE SET NULL) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
INSERT INTO t1 VALUES (1,REPEAT('a',8193),1),(1,REPEAT('b',8193),1);
|
--error ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO
|
DELETE FROM t1;
|
ALTER TABLE t1 ADD KEY idx (f2(10));
|
|
# Cleanup
|
DROP TABLE t1;
|
2020-10-20 15:11:10 9 [ERROR] InnoDB: Duplicate FTS_DOC_ID value on table `test`.`t1`
|
2020-10-20 15:11:10 9 [ERROR] [FATAL] InnoDB: FIL_PAGE_TYPE=17855 on BLOB read space 5 page 8 flags 33
|
201020 15:11:10 [ERROR] mysqld got signal 6 ;
|
|
#5 0x00007fb8b2a68859 in __GI_abort () at abort.c:79
|
#6 0x00005586ed755bf5 in ib::fatal::~fatal (this=<optimized out>, __in_chrg=<optimized out>) at /data/src/10.3/storage/innobase/ut/ut0ut.cc:603
|
#7 0x00005586ec3bf802 in btr_check_blob_fil_page_type (space_id=5, page_no=8, page=<optimized out>, read=1) at /data/src/10.3/storage/innobase/include/ut0ut.h:355
|
#8 0x00005586ed7a7cc3 in btr_copy_blob_prefix (buf=<optimized out>, len=<optimized out>, space_id=<optimized out>, page_no=8, offset=38) at /data/src/10.3/storage/innobase/btr/btr0cur.cc:7995
|
#9 0x00005586ed7c9355 in btr_copy_externally_stored_field_prefix_low (offset=<optimized out>, page_no=<optimized out>, space_id=<optimized out>, page_size=..., len=3072, buf=<optimized out>) at /data/src/10.3/storage/innobase/btr/btr0cur.cc:8256
|
#10 btr_copy_externally_stored_field_prefix (buf=<optimized out>, len=3072, page_size=..., data=0x7fb8a8e180e4 <error: Cannot access memory at address 0x7fb8a8e180e4>, local_len=0) at /data/src/10.3/storage/innobase/btr/btr0cur.cc:8257
|
#11 0x00005586eda78cde in row_ext_cache_fill (dfield=<optimized out>, page_size=..., i=0, ext=0x63100008c9b0) at /data/src/10.3/storage/innobase/row/row0ext.cc:78
|
#12 row_ext_create (n_ext=n_ext@entry=1, ext=ext@entry=0x63100008c890, flags=<optimized out>, tuple=tuple@entry=0x63100008c8a0, heap=heap@entry=0x63100008c800) at /data/src/10.3/storage/innobase/row/row0ext.cc:128
|
#13 0x00005586ed5fd501 in row_build_low (type=<optimized out>, index=<optimized out>, rec=<optimized out>, offsets=<optimized out>, col_table=<optimized out>, defaults=<optimized out>, add_v=<optimized out>, col_map=<optimized out>, ext=<optimized out>, heap=<optimized out>) at /data/src/10.3/storage/innobase/row/row0row.cc:569
|
#14 0x00005586ed5a95c6 in row_merge_read_clustered_index (trx=<optimized out>, table=<optimized out>, old_table=<optimized out>, new_table=<optimized out>, online=<optimized out>, index=<optimized out>, fts_sort_idx=<optimized out>, psort_info=<optimized out>, files=<optimized out>, key_numbers=<optimized out>, n_index=<optimized out>, defaults=<optimized out>, add_v=<optimized out>, col_map=<optimized out>, add_autoinc=<optimized out>, sequence=..., block=<optimized out>, skip_pk_sort=<optimized out>, tmpfd=<optimized out>, stage=<optimized out>, pct_cost=<optimized out>, crypt_block=<optimized out>, eval_table=<optimized out>, allow_not_null=<optimized out>) at /data/src/10.3/storage/innobase/row/row0merge.cc:2156
|
#15 0x00005586ed5b1624 in row_merge_build_indexes (trx=<optimized out>, old_table=old_table@entry=0x6170000356f0, new_table=<optimized out>, online=<optimized out>, indexes=<optimized out>, key_numbers=<optimized out>, n_indexes=<optimized out>, table=<optimized out>, defaults=<optimized out>, col_map=<optimized out>, add_autoinc=<optimized out>, sequence=..., skip_pk_sort=<optimized out>, stage=<optimized out>, add_v=<optimized out>, eval_table=<optimized out>, allow_not_null=<optimized out>) at /data/src/10.3/storage/innobase/row/row0merge.cc:4709
|
#16 0x00005586ed399fda in ha_innobase::inplace_alter_table (this=<optimized out>, altered_table=<optimized out>, ha_alter_info=<optimized out>) at /data/src/10.3/storage/innobase/handler/handler0alter.cc:7154
|
#17 0x00005586ec8dc9e7 in handler::ha_inplace_alter_table (ha_alter_info=0x7fb89c654400, altered_table=0x61f000045288, this=<optimized out>) at /data/src/10.3/sql/sql_table.cc:7788
|
#18 mysql_inplace_alter_table (thd=0x62a0000ae208, table_list=<optimized out>, table=0x61f000043688, altered_table=<optimized out>, ha_alter_info=<optimized out>, inplace_supported=<optimized out>, alter_ctx=<optimized out>, target_mdl_request=<optimized out>) at /data/src/10.3/sql/sql_table.cc:7654
|
#19 0x00005586ec9075a6 in mysql_alter_table (thd=thd@entry=0x62a0000ae208, new_db=new_db@entry=0x62a0000b2730, new_name=new_name@entry=0x62a0000b2af8, create_info=create_info@entry=0x7fb89c6568c0, table_list=<optimized out>, table_list@entry=0x62b000000350, alter_info=alter_info@entry=0x7fb89c6567c0, order_num=<optimized out>, order=<optimized out>, ignore=<optimized out>) at /data/src/10.3/sql/sql_table.cc:9946
|
#20 0x00005586eca2ac41 in Sql_cmd_alter_table::execute (this=<optimized out>, thd=0x62a0000ae208) at /data/src/10.3/sql/sql_alter.cc:512
|
#21 0x00005586ec6c1c87 in mysql_execute_command (thd=0x62a0000ae208) at /data/src/10.3/sql/sql_parse.cc:6022
|
#22 0x00005586ec6da3e0 in mysql_parse (thd=thd@entry=0x62a0000ae208, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x7fb89c65afb0, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /data/src/10.3/sql/sql_parse.cc:7810
|
#23 0x00005586ec6e1027 in dispatch_command (command=COM_QUERY, thd=0x62a0000ae208, packet=<optimized out>, packet_length=<optimized out>, is_com_multi=<optimized out>, is_next_command=<optimized out>) at /data/src/10.3/sql/sql_class.h:1137
|
#24 0x00005586ec6e7e0e in do_command (thd=0x62a0000ae208) at /data/src/10.3/sql/sql_parse.cc:1393
|
#25 0x00005586eca207e7 in do_handle_one_connection (connect=connect@entry=0x608000000ea8) at /data/src/10.3/sql/sql_connect.cc:1403
|
#26 0x00005586eca2106f in handle_one_connection (arg=arg@entry=0x608000000ea8) at /data/src/10.3/sql/sql_connect.cc:1308
|
#27 0x00005586edd99c99 in pfs_spawn_thread (arg=0x615000005588) at /data/src/10.3/storage/perfschema/pfs.cc:1869
|
#28 0x00007fb8b2f89609 in start_thread (arg=<optimized out>) at pthread_create.c:477
|
#29 0x00007fb8b2b65293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
|
|
|
I think that we must take into account the fact that FTS_DOC_ID_INDEX(FTS_DOC_ID) may be explicitly created by the user. I tried a variation of the test:
--source include/have_innodb.inc
|
CREATE TABLE t1 (f1 INT, f2 TEXT, f3 INT, FTS_DOC_ID BIGINT UNSIGNED NOT NULL, UNIQUE KEY FTS_DOC_ID_INDEX(FTS_DOC_ID), FULLTEXT (f2), KEY(f1), KEY(f3), FOREIGN KEY r (f3) REFERENCES t1 (f1) ON DELETE SET NULL) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
INSERT INTO t1 VALUES (1,REPEAT('a',8193),1,1),(1,REPEAT('b',8193),1,2);
|
DELETE FROM t1;
|
DROP TABLE t1;
|
If I remove the words WITH SYSTEM VERSIONING, the test will pass. If I remove the word UNSIGNED, the FTS_DOC_ID will not be of the correct form, and the test will fail.
But, if I retain the magic words WITH SYSTEM VERSIONING, I am seeing a crash during the execution of the CREATE TABLE statement:
|
10.5 e8217d070fc3e60870131615a48515836c773b07
|
#0 __pthread_kill (threadid=<optimized out>, signo=11) at ../sysdeps/unix/sysv/linux/pthread_kill.c:56
|
#1 0x000000000116a9ce in handle_fatal_signal (sig=<optimized out>) at /mariadb/10.5m/sql/signal_handler.cc:330
|
#2 <signal handler called>
|
#3 0x000000000226f334 in fts_drop_all_index_tables (trx=0x7f33e1403af8, fts=<optimized out>) at /mariadb/10.5m/storage/innobase/fts/fts0fts.cc:1659
|
#4 fts_drop_tables (trx=<optimized out>, table=<optimized out>) at /mariadb/10.5m/storage/innobase/fts/fts0fts.cc:1699
|
#5 0x0000000001dc5dd2 in row_drop_ancillary_fts_tables (table=0x618000064d08, trx=0x7f33e1403af8) at /mariadb/10.5m/storage/innobase/row/row0mysql.cc:3213
|
#6 row_drop_table_for_mysql (name=<optimized out>, trx=<optimized out>, sqlcom=<optimized out>, create_failed=<optimized out>, nonatomic=<optimized out>) at /mariadb/10.5m/storage/innobase/row/row0mysql.cc:3680
|
#7 0x0000000001a7ac26 in ha_innobase::create (this=<optimized out>, name=<optimized out>, form=0x7f33ffffffff, create_info=<optimized out>, file_per_table=<optimized out>, trx=0x7f33e1403af8) at /mariadb/10.5m/storage/innobase/handler/ha_innodb.cc:12950
|
#8 0x000000000118ceb9 in handler::ha_create (this=0x61d000247cb8, name=<optimized out>, form=<optimized out>, info_arg=<optimized out>) at /mariadb/10.5m/sql/handler.cc:5084
|
#9 0x0000000001190f38 in ha_create_table (thd=<optimized out>, path=<optimized out>, db=<optimized out>, table_name=<optimized out>, create_info=<optimized out>, frm=<optimized out>) at /mariadb/10.5m/sql/handler.cc:5548
|
#10 0x0000000000c8f6eb in create_table_impl (thd=<optimized out>, orig_db=<optimized out>, orig_table_name=<optimized out>, db=<optimized out>, table_name=<optimized out>, path=<optimized out>, options=<optimized out>, create_info=<optimized out>, alter_info=<optimized out>, create_table_mode=<optimized out>, is_trans=<optimized out>, key_info=<optimized out>, key_count=<optimized out>, frm=<optimized out>) at /mariadb/10.5m/sql/sql_table.cc:5348
|
I think that this case must be covered as part of the fix.
|