[MDEV-25327] Unexpected ER_DUP_ENTRY upon dropping PK column from system-versioned table Created: 2021-04-01  Updated: 2021-04-19  Resolved: 2021-04-19

Status: Closed
Project: MariaDB Server
Component/s: Versioned Tables
Affects Version/s: 10.3
Fix Version/s: 10.3.29, 10.4.19, 10.5.10

Type: Bug Priority: Blocker
Reporter: Elena Stepanova Assignee: Aleksey Midenkov
Resolution: Fixed Votes: 0
Labels: regression

Issue Links:
Problem/Incident
is caused by MDEV-24690 Dropping primary key column from vers... Closed

 Description   

Test case 1 - with IGNORE

--source include/have_innodb.inc
 
CREATE TABLE t1 (pk INT, a INT, PRIMARY KEY (pk), KEY (a)) ENGINE=InnoDB WITH SYSTEM VERSIONING;
INSERT INTO t1 VALUES (1,2),(2,8),(3,4),(4,4),(5,0);
DELETE FROM t1;
SET system_versioning_alter_history= KEEP;
ALTER IGNORE TABLE t1 DROP pk;
 
# Cleanup
DROP TABLE t1;

10.3 77ffbbca non-debug

2021-04-02 00:46:46 0x7f38612c1700  InnoDB: Assertion failure in file /data/src/10.3/storage/innobase/row/row0ins.cc line 221
InnoDB: Failing assertion: !cursor->index->is_committed()
 
#6  0x0000556bb31f48f4 in ut_dbg_assertion_failed (expr=expr@entry=0x556bb3c341a0 "!cursor->index->is_committed()", file=file@entry=0x556bb3c33cc8 "/data/src/10.3/storage/innobase/row/row0ins.cc", line=line@entry=221) at /data/src/10.3/storage/innobase/ut/ut0dbg.cc:60
#7  0x0000556bb31dfe2c in row_ins_sec_index_entry_by_modify (mtr=0x7f38612bba40, thr=0x7f38100682b0, entry=<optimized out>, heap=0x7f3810068e20, offsets_heap=<optimized out>, offsets=0x7f38612bad48, cursor=0x7f38612badb0, mode=2, flags=0) at /data/src/10.3/storage/innobase/row/row0ins.cc:221
#8  row_ins_sec_index_entry_low (flags=<optimized out>, mode=2, index=0x7f3810066708, offsets_heap=<optimized out>, heap=<optimized out>, entry=<optimized out>, trx_id=<optimized out>, thr=<optimized out>) at /data/src/10.3/storage/innobase/row/row0ins.cc:3090
#9  0x0000556bb373f2eb in row_ins_sec_index_entry (index=0x7f3810066708, entry=0x7f3810157690, thr=0x7f38100682b0, check_foreign=<optimized out>) at /data/src/10.3/storage/innobase/row/row0ins.cc:3287
#10 0x0000556bb37416f1 in row_ins_index_entry (thr=0x7f38100682b0, entry=<optimized out>, index=<optimized out>) at /data/src/10.3/storage/innobase/row/row0ins.cc:3334
#11 row_ins_index_entry_step (thr=0x7f38100682b0, node=<optimized out>) at /data/src/10.3/storage/innobase/row/row0ins.cc:3483
#12 row_ins (thr=0x7f3810066708, node=<optimized out>) at /data/src/10.3/storage/innobase/row/row0ins.cc:3642
#13 row_ins_step (thr=thr@entry=0x7f38100682b0) at /data/src/10.3/storage/innobase/row/row0ins.cc:3788
#14 0x0000556bb37530d0 in row_insert_for_mysql (mysql_rec=mysql_rec@entry=0x7f381002f928 "\375\004", prebuilt=0x7f3810067b08, ins_mode=ROW_INS_NORMAL) at /data/src/10.3/storage/innobase/row/row0mysql.cc:1418
#15 0x0000556bb369d479 in ha_innobase::write_row (this=0x7f38100652a0, record=0x7f381002f928 "\375\004") at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:8131
#16 0x0000556bb34f58b1 in handler::ha_write_row (this=0x7f38100652a0, buf=0x7f381002f928 "\375\004") at /data/src/10.3/sql/handler.cc:6478
#17 0x0000556bb338a71e in copy_data_between_tables (thd=0x7f3810000c48, from=0x7f38101547d8, to=0x7f3810066ee8, create=..., ignore=true, order_num=<optimized out>, order=0x0, copied=0x7f38612bcf80, deleted=0x7f38612bcf88, keys_onoff=Alter_info::LEAVE_AS_IS, alter_ctx=0x7f38612bd9c0) at /data/src/10.3/sql/sql_table.cc:10662
#18 0x0000556bb3391ca6 in mysql_alter_table (thd=thd@entry=0x7f3810000c48, new_db=new_db@entry=0x7f3810005170, new_name=new_name@entry=0x7f3810005558, create_info=create_info@entry=0x7f38612be580, table_list=<optimized out>, table_list@entry=0x7f381000f810, alter_info=alter_info@entry=0x7f38612be4c0, order_num=0, order=0x0, ignore=true) at /data/src/10.3/sql/sql_table.cc:10091
#19 0x0000556bb33e50ff in Sql_cmd_alter_table::execute (this=<optimized out>, thd=0x7f3810000c48) at /data/src/10.3/sql/sql_alter.cc:512
#20 0x0000556bb32ef510 in mysql_execute_command (thd=<optimized out>) at /data/src/10.3/sql/sql_parse.cc:6078
#21 0x0000556bb32f6563 in mysql_parse (thd=0x7f3810000c48, rawbuf=<optimized out>, length=<optimized out>, parser_state=<optimized out>, is_com_multi=<optimized out>, is_next_command=<optimized out>) at /data/src/10.3/sql/sql_parse.cc:7871
#22 0x0000556bb32f893d in dispatch_command (command=COM_QUERY, thd=0x7f3810000c48, 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:1152
#23 0x0000556bb32fa91d in do_command (thd=0x7f3810000c48) at /data/src/10.3/sql/sql_parse.cc:1398
#24 0x0000556bb33e2466 in do_handle_one_connection (connect=connect@entry=0x556bb58a9e68) at /data/src/10.3/sql/sql_connect.cc:1403
#25 0x0000556bb33e263f in handle_one_connection (arg=arg@entry=0x556bb58a9e68) at /data/src/10.3/sql/sql_connect.cc:1308
#26 0x0000556bb39bff46 in pfs_spawn_thread (arg=0x556bb5892568) at /data/src/10.3/storage/perfschema/pfs.cc:1869
#27 0x00007f38685eb609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#28 0x00007f38681e0293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

10.3 77ffbbca debug

mysqld: /data/src/10.3/storage/innobase/row/row0ins.cc:3652: dberr_t row_ins(ins_node_t*, que_thr_t*): Assertion `!strcmp(index->name, "FTS_DOC_ID_INDEX")' failed.
210402  0:45:29 [ERROR] mysqld got signal 6 ;
 
#7  0x00007fe70ce40f36 in __GI___assert_fail (assertion=0x55e67faadad0 "!strcmp(index->name, \"FTS_DOC_ID_INDEX\")", file=0x55e67faabdf0 "/data/src/10.3/storage/innobase/row/row0ins.cc", line=3652, function=0x55e67faada80 "dberr_t row_ins(ins_node_t*, que_thr_t*)") at assert.c:101
#8  0x000055e67f2ebbcb in row_ins (node=0x7fe6b812c3a0, thr=0x7fe6b812c608) at /data/src/10.3/storage/innobase/row/row0ins.cc:3652
#9  0x000055e67f2ec424 in row_ins_step (thr=0x7fe6b812c608) at /data/src/10.3/storage/innobase/row/row0ins.cc:3788
#10 0x000055e67f3135a6 in row_insert_for_mysql (mysql_rec=0x7fe6b8074950 "\375\002", prebuilt=0x7fe6b812be40, ins_mode=ROW_INS_NORMAL) at /data/src/10.3/storage/innobase/row/row0mysql.cc:1418
#11 0x000055e67f175bfb in ha_innobase::write_row (this=0x7fe6b812b238, record=0x7fe6b8074950 "\375\002") at /data/src/10.3/storage/innobase/handler/ha_innodb.cc:8131
#12 0x000055e67ef45ac9 in handler::ha_write_row (this=0x7fe6b812b238, buf=0x7fe6b8074950 "\375\002") at /data/src/10.3/sql/handler.cc:6478
#13 0x000055e67ecfae5e in copy_data_between_tables (thd=0x7fe6b8000d90, from=0x7fe6b80b9810, to=0x7fe6b8073d00, create=..., ignore=true, order_num=0, order=0x0, copied=0x7fe701fcb130, deleted=0x7fe701fcb138, keys_onoff=Alter_info::LEAVE_AS_IS, alter_ctx=0x7fe701fcb940) at /data/src/10.3/sql/sql_table.cc:10662
#14 0x000055e67ecf8d0b in mysql_alter_table (thd=0x7fe6b8000d90, new_db=0x7fe6b8005478, new_name=0x7fe6b8005860, create_info=0x7fe701fcc530, table_list=0x7fe6b8012bb8, alter_info=0x7fe701fcc470, order_num=0, order=0x0, ignore=true) at /data/src/10.3/sql/sql_table.cc:10091
#15 0x000055e67ed89226 in Sql_cmd_alter_table::execute (this=0x7fe6b8013240, thd=0x7fe6b8000d90) at /data/src/10.3/sql/sql_alter.cc:512
#16 0x000055e67ec1388d in mysql_execute_command (thd=0x7fe6b8000d90) at /data/src/10.3/sql/sql_parse.cc:6078
#17 0x000055e67ec18f42 in mysql_parse (thd=0x7fe6b8000d90, rawbuf=0x7fe6b8012ad8 "ALTER IGNORE TABLE t1 DROP pk", length=29, parser_state=0x7fe701fcd5c0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7871
#18 0x000055e67ec055d6 in dispatch_command (command=COM_QUERY, thd=0x7fe6b8000d90, packet=0x7fe6b8008f31 "ALTER IGNORE TABLE t1 DROP pk", packet_length=29, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1852
#19 0x000055e67ec03f76 in do_command (thd=0x7fe6b8000d90) at /data/src/10.3/sql/sql_parse.cc:1398
#20 0x000055e67ed830bd in do_handle_one_connection (connect=0x55e68276e110) at /data/src/10.3/sql/sql_connect.cc:1403
#21 0x000055e67ed82e19 in handle_one_connection (arg=0x55e68276e110) at /data/src/10.3/sql/sql_connect.cc:1308
#22 0x000055e67f754de7 in pfs_spawn_thread (arg=0x55e682750f80) at /data/src/10.3/storage/perfschema/pfs.cc:1869
#23 0x00007fe70d352609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#24 0x00007fe70cf2c293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Test case 2 - without IGNORE

--source include/have_innodb.inc
 
CREATE TABLE t1 (pk INT, a INT, PRIMARY KEY (pk), KEY (a)) ENGINE=InnoDB WITH SYSTEM VERSIONING;
INSERT INTO t1 VALUES (1,2),(2,8),(3,4),(4,4),(5,0);
DELETE FROM t1;
SET system_versioning_alter_history= KEEP;
ALTER TABLE t1 DROP pk;
 
# Cleanup
DROP TABLE t1;

10.3 77ffbbca

mysqltest: At line 7: query 'ALTER TABLE t1 DROP pk' failed: 1062: Duplicate entry '' for key 'PRIMARY'

The failures appeared in 10.3 after this commit:

commit af52a0e516aa044b7fcdf91b3d2a7036c6c7ae9f b9d1c6574b845ddf843dd5a8e506593e74352c69
Author:     Aleksey Midenkov
AuthorDate: Fri Feb 5 01:52:21 2021 +0300
CommitDate: Wed Mar 31 21:25:33 2021 +0300
 
    MDEV-24690 Dropping primary key column from versioned table always fails with 1072



 Comments   
Comment by Oleksandr Byelkin [ 2021-04-16 ]

OK to push

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