Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-18098

Crash after rollback of instant DROP COLUMN

Details

    Description

      A rollback of instant ALTER TABLE may leave the InnoDB data dictionary cache in an inconsistent state:

      --source include/have_innodb.inc
      create table t1 (a int, b int) engine=innodb;
      set @save_dbug = @@session.debug_dbug;
      set debug_dbug='+d,ib_commit_inplace_fail_1';
      --error ER_INTERNAL_ERROR
      alter table t1 drop column b, algorithm=instant;
      set debug_dbug= @save_dbug;
      --echo # The following would crash!
      insert into t1 values (1,1);
      select * from t1;
      drop table t1;
      

      The problem is that dict_index_t::n_core_fields is not being restored by dict_table_t::rollback_instant().
      We have to be careful when restoring it, because the original value (as it was at the start of the instant ALTER TABLE that is being rolled back) may be stale, in case the table was found to be empty during the operation.

      Attachments

        Issue Links

          Activity

            10.4 838c196f2

            mysqld: /data/src/10.4/storage/innobase/data/data0data.cc:66: void dtuple_t::trim(const dict_index_t&): Assertion `col->is_added()' failed.
            181228 14:39:29 [ERROR] mysqld got signal 6 ;
             
            #7  0x00007f8f8b705ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
            #8  0x00005579ae1fb9ca in dtuple_t::trim (this=0x7f8f3007a5f8, index=...) at /data/src/10.4/storage/innobase/data/data0data.cc:66
            #9  0x00005579ae07a308 in row_ins_clust_index_entry_low (flags=0, mode=2, index=0x7f8f30132148, n_uniq=0, entry=0x7f8f3007a5f8, n_ext=0, thr=0x7f8f3004f988, dup_chk_only=false) at /data/src/10.4/storage/innobase/row/row0ins.cc:2736
            #10 0x00005579ae07bb7c in row_ins_clust_index_entry (index=0x7f8f30132148, entry=0x7f8f3007a5f8, thr=0x7f8f3004f988, n_ext=0, dup_chk_only=false) at /data/src/10.4/storage/innobase/row/row0ins.cc:3252
            #11 0x00005579ae07c032 in row_ins_index_entry (index=0x7f8f30132148, entry=0x7f8f3007a5f8, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3377
            #12 0x00005579ae07c707 in row_ins_index_entry_step (node=0x7f8f3004f710, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3545
            #13 0x00005579ae07cb3b in row_ins (node=0x7f8f3004f710, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3688
            #14 0x00005579ae07d33b in row_ins_step (thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3933
            #15 0x00005579ae09cdf9 in row_insert_for_mysql (mysql_rec=0x7f8f3000dec0 "\371\001", prebuilt=0x7f8f3004f1c8, ins_mode=ROW_INS_NORMAL) at /data/src/10.4/storage/innobase/row/row0mysql.cc:1460
            #16 0x00005579adf3abc4 in ha_innobase::write_row (this=0x7f8f3016c6f8, record=0x7f8f3000dec0 "\371\001") at /data/src/10.4/storage/innobase/handler/ha_innodb.cc:8066
            #17 0x00005579adc15052 in handler::ha_write_row (this=0x7f8f3016c6f8, buf=0x7f8f3000dec0 "\371\001") at /data/src/10.4/sql/handler.cc:6273
            #18 0x00005579ad8b42b9 in write_record (thd=0x7f8f30000b00, table=0x7f8f3016bac0, info=0x7f8f849ebb90) at /data/src/10.4/sql/sql_insert.cc:2022
            #19 0x00005579ad8b163d in mysql_insert (thd=0x7f8f30000b00, table_list=0x7f8f30015080, fields=..., values_list=..., update_fields=..., update_values=..., duplic=DUP_ERROR, ignore=false) at /data/src/10.4/sql/sql_insert.cc:1063
            #20 0x00005579ad8f7c99 in mysql_execute_command (thd=0x7f8f30000b00) at /data/src/10.4/sql/sql_parse.cc:4730
            #21 0x00005579ad902924 in mysql_parse (thd=0x7f8f30000b00, rawbuf=0x7f8f30014f98 "insert into t1 values (1,1)", length=27, parser_state=0x7f8f849ec600, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:8104
            #22 0x00005579ad8efb4e in dispatch_command (command=COM_QUERY, thd=0x7f8f30000b00, packet=0x7f8f30137fd1 "insert into t1 values (1,1)", packet_length=27, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:1851
            #23 0x00005579ad8ee572 in do_command (thd=0x7f8f30000b00) at /data/src/10.4/sql/sql_parse.cc:1396
            #24 0x00005579ada5a71e in do_handle_one_connection (connect=0x5579b1bff930) at /data/src/10.4/sql/sql_connect.cc:1402
            #25 0x00005579ada5a4a2 in handle_one_connection (arg=0x5579b1bff930) at /data/src/10.4/sql/sql_connect.cc:1308
            #26 0x00005579adf196ca in pfs_spawn_thread (arg=0x5579b1c083e0) at /data/src/10.4/storage/perfschema/pfs.cc:1862
            #27 0x00007f8f8d1c1494 in start_thread (arg=0x7f8f849ed700) at pthread_create.c:333
            #28 0x00007f8f8b7c293f in clone () from /lib/x86_64-linux-gnu/libc.so.6
            

            elenst Elena Stepanova added a comment - 10.4 838c196f2 mysqld: /data/src/10.4/storage/innobase/data/data0data.cc:66: void dtuple_t::trim(const dict_index_t&): Assertion `col->is_added()' failed. 181228 14:39:29 [ERROR] mysqld got signal 6 ;   #7 0x00007f8f8b705ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6 #8 0x00005579ae1fb9ca in dtuple_t::trim (this=0x7f8f3007a5f8, index=...) at /data/src/10.4/storage/innobase/data/data0data.cc:66 #9 0x00005579ae07a308 in row_ins_clust_index_entry_low (flags=0, mode=2, index=0x7f8f30132148, n_uniq=0, entry=0x7f8f3007a5f8, n_ext=0, thr=0x7f8f3004f988, dup_chk_only=false) at /data/src/10.4/storage/innobase/row/row0ins.cc:2736 #10 0x00005579ae07bb7c in row_ins_clust_index_entry (index=0x7f8f30132148, entry=0x7f8f3007a5f8, thr=0x7f8f3004f988, n_ext=0, dup_chk_only=false) at /data/src/10.4/storage/innobase/row/row0ins.cc:3252 #11 0x00005579ae07c032 in row_ins_index_entry (index=0x7f8f30132148, entry=0x7f8f3007a5f8, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3377 #12 0x00005579ae07c707 in row_ins_index_entry_step (node=0x7f8f3004f710, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3545 #13 0x00005579ae07cb3b in row_ins (node=0x7f8f3004f710, thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3688 #14 0x00005579ae07d33b in row_ins_step (thr=0x7f8f3004f988) at /data/src/10.4/storage/innobase/row/row0ins.cc:3933 #15 0x00005579ae09cdf9 in row_insert_for_mysql (mysql_rec=0x7f8f3000dec0 "\371\001", prebuilt=0x7f8f3004f1c8, ins_mode=ROW_INS_NORMAL) at /data/src/10.4/storage/innobase/row/row0mysql.cc:1460 #16 0x00005579adf3abc4 in ha_innobase::write_row (this=0x7f8f3016c6f8, record=0x7f8f3000dec0 "\371\001") at /data/src/10.4/storage/innobase/handler/ha_innodb.cc:8066 #17 0x00005579adc15052 in handler::ha_write_row (this=0x7f8f3016c6f8, buf=0x7f8f3000dec0 "\371\001") at /data/src/10.4/sql/handler.cc:6273 #18 0x00005579ad8b42b9 in write_record (thd=0x7f8f30000b00, table=0x7f8f3016bac0, info=0x7f8f849ebb90) at /data/src/10.4/sql/sql_insert.cc:2022 #19 0x00005579ad8b163d in mysql_insert (thd=0x7f8f30000b00, table_list=0x7f8f30015080, fields=..., values_list=..., update_fields=..., update_values=..., duplic=DUP_ERROR, ignore=false) at /data/src/10.4/sql/sql_insert.cc:1063 #20 0x00005579ad8f7c99 in mysql_execute_command (thd=0x7f8f30000b00) at /data/src/10.4/sql/sql_parse.cc:4730 #21 0x00005579ad902924 in mysql_parse (thd=0x7f8f30000b00, rawbuf=0x7f8f30014f98 "insert into t1 values (1,1)", length=27, parser_state=0x7f8f849ec600, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:8104 #22 0x00005579ad8efb4e in dispatch_command (command=COM_QUERY, thd=0x7f8f30000b00, packet=0x7f8f30137fd1 "insert into t1 values (1,1)", packet_length=27, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:1851 #23 0x00005579ad8ee572 in do_command (thd=0x7f8f30000b00) at /data/src/10.4/sql/sql_parse.cc:1396 #24 0x00005579ada5a71e in do_handle_one_connection (connect=0x5579b1bff930) at /data/src/10.4/sql/sql_connect.cc:1402 #25 0x00005579ada5a4a2 in handle_one_connection (arg=0x5579b1bff930) at /data/src/10.4/sql/sql_connect.cc:1308 #26 0x00005579adf196ca in pfs_spawn_thread (arg=0x5579b1c083e0) at /data/src/10.4/storage/perfschema/pfs.cc:1862 #27 0x00007f8f8d1c1494 in start_thread (arg=0x7f8f849ed700) at pthread_create.c:333 #28 0x00007f8f8b7c293f in clone () from /lib/x86_64-linux-gnu/libc.so.6

            People

              marko Marko Mäkelä
              marko Marko Mäkelä
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.