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

Assertion `!((new_col->prtype ^ col->prtype) & ~256U)' failed in row_log_table_apply_convert_mrec

Details

    Description

      Note: this is a non-deterministic MTR test, run with --repeat=N. For me, N=5 is always enough, but it can be different on other machines/systems. SHOW PROCESSLIST can be replaced with other statements seemingly unrelated to the rest of test flow, possibly it just helps with the timing. The test is for reproducing only, don't put it into the regression suite, replace with a deterministic one when the cause of the failure is known.

      --source include/have_innodb.inc
       
      CREATE TABLE t1 (i INT) ENGINE=InnoDB WITH SYSTEM VERSIONING;
      INSERT INTO t1 () VALUES ();
       
      --connect (con1,localhost,root,,test)
      --send
        ALTER TABLE t1 DROP SYSTEM VERSIONING;
       
      --connection default
      SHOW PROCESSLIST;
       
      DELETE FROM t1;
       
      --connection con1
      --reap
       
      # Cleanup
      --disconnect con1
      --connection default
      DROP TABLE t1;
      

      bb-10.3-temporal 79dd77e6aebc8

      mysqld: /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:1623: const dtuple_t* row_log_table_apply_convert_mrec(const mrec_t*, dict_index_t*, const ulint*, const row_log_t*, mem_heap_t*, dberr_t*): Assertion `!((new_col->prtype ^ col->prtype) & ~256U)' failed.
      171212 14:59:57 [ERROR] mysqld got signal 6 ;
       
      #7  0x00007f9332e19ee2 in __assert_fail () from /lib/x86_64-linux-gnu/libc.so.6
      #8  0x0000563d71374d62 in row_log_table_apply_convert_mrec (mrec=0x7f932c08c003 "", index=0x7f92d4099788, offsets=0x7f92d80337c0, log=0x7f92d80392c0, heap=0x7f92d80349e0, error=0x7f932c1cfa1c) at /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:1623
      #9  0x0000563d713764e0 in row_log_table_apply_update (thr=0x7f92d8030aa0, new_trx_id_col=1, mrec=0x7f932c08c003 "", offsets=0x7f92d80337c0, offsets_heap=0x7f92d80593f0, heap=0x7f92d80349e0, dup=0x7f932c1d0880, old_pk=0x7f92d8034a68) at /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:2040
      #10 0x0000563d713783a7 in row_log_table_apply_op (thr=0x7f92d8030aa0, new_trx_id_col=1, dup=0x7f932c1d0880, error=0x7f932c1d062c, offsets_heap=0x7f92d80593f0, heap=0x7f92d80349e0, mrec=0x7f932c08c003 "", mrec_end=0x7f932c08c026 "", offsets=0x7f92d80337c0) at /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:2657
      #11 0x0000563d71379ce7 in row_log_table_apply_ops (thr=0x7f92d8030aa0, dup=0x7f932c1d0880, stage=0x7f92d8033b30) at /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:3023
      #12 0x0000563d7137a2a6 in row_log_table_apply (thr=0x7f92d8030aa0, old_table=0x7f92d400ca18, table=0x7f92d8026890, stage=0x7f92d8033b30) at /data/src/bb-10.3-temporal/storage/innobase/row/row0log.cc:3122
      #13 0x0000563d71240af3 in ha_innobase::inplace_alter_table (this=0x7f92d409b618, altered_table=0x7f92d8026890, ha_alter_info=0x7f932c1d1260) at /data/src/bb-10.3-temporal/storage/innobase/handler/handler0alter.cc:7100
      #14 0x0000563d70ccb0cf in handler::ha_inplace_alter_table (this=0x7f92d409b618, altered_table=0x7f92d8026890, ha_alter_info=0x7f932c1d1260) at /data/src/bb-10.3-temporal/sql/handler.h:4095
      #15 0x0000563d70cc1387 in mysql_inplace_alter_table (thd=0x7f92d8000b00, table_list=0x7f92d8013990, table=0x7f92d409a9d0, altered_table=0x7f92d8026890, ha_alter_info=0x7f932c1d1260, inplace_supported=HA_ALTER_INPLACE_NO_LOCK_AFTER_PREPARE, target_mdl_request=0x7f932c1d13d0, alter_ctx=0x7f932c1d2070) at /data/src/bb-10.3-temporal/sql/sql_table.cc:7416
      #16 0x0000563d70cc6e93 in mysql_alter_table (thd=0x7f92d8000b00, new_db=0x7f92d8013fc8 "test", new_name=0x0, create_info=0x7f932c1d2c90, table_list=0x7f92d8013990, alter_info=0x7f932c1d2be0, order_num=0, order=0x0, ignore=false) at /data/src/bb-10.3-temporal/sql/sql_table.cc:9509
      #17 0x0000563d70d4fdf5 in Sql_cmd_alter_table::execute (this=0x7f92d8013fd0, thd=0x7f92d8000b00) at /data/src/bb-10.3-temporal/sql/sql_alter.cc:331
      #18 0x0000563d70bf35bb in mysql_execute_command (thd=0x7f92d8000b00) at /data/src/bb-10.3-temporal/sql/sql_parse.cc:6256
      #19 0x0000563d70bf80ec in mysql_parse (thd=0x7f92d8000b00, rawbuf=0x7f92d8013898 "ALTER TABLE t1 DROP SYSTEM VERSIONING", length=37, parser_state=0x7f932c1d45f0, is_com_multi=false, is_next_command=false) at /data/src/bb-10.3-temporal/sql/sql_parse.cc:7985
      #20 0x0000563d70be585a in dispatch_command (command=COM_QUERY, thd=0x7f92d8000b00, packet=0x7f92d800b161 "ALTER TABLE t1 DROP SYSTEM VERSIONING", packet_length=37, is_com_multi=false, is_next_command=false) at /data/src/bb-10.3-temporal/sql/sql_parse.cc:1829
      #21 0x0000563d70be427b in do_command (thd=0x7f92d8000b00) at /data/src/bb-10.3-temporal/sql/sql_parse.cc:1371
      #22 0x0000563d70d4a96e in do_handle_one_connection (connect=0x563d74cc55e0) at /data/src/bb-10.3-temporal/sql/sql_connect.cc:1420
      #23 0x0000563d70d4a6fb in handle_one_connection (arg=0x563d74cc55e0) at /data/src/bb-10.3-temporal/sql/sql_connect.cc:1326
      #24 0x0000563d711e0094 in pfs_spawn_thread (arg=0x563d74d6f2c0) at /data/src/bb-10.3-temporal/storage/perfschema/pfs.cc:1863
      #25 0x00007f9334af0494 in start_thread (arg=0x7f932c1d5700) at pthread_create.c:333
      #26 0x00007f9332ed693f in clone () from /lib/x86_64-linux-gnu/libc.so.6
      

      Attachments

        Issue Links

          Activity

            Deterministic test.

            --source include/have_innodb.inc
             
            CREATE TABLE t1 (i INT) ENGINE=InnoDB WITH SYSTEM VERSIONING;
            INSERT INTO t1 () VALUES ();
             
            --connect (con1,localhost,root,,test)
            set debug_sync= 'row_log_table_apply1_before SIGNAL alter_in_progress WAIT_FOR delete_finished';
            --send
            ALTER TABLE t1 DROP SYSTEM VERSIONING;
             
            --connection default
            set debug_sync='now WAIT_FOR alter_in_progress';
            DELETE FROM t1;
            set debug_sync='now SIGNAL delete_finished';
             
            --connection con1
            --reap
             
            # Cleanup
            --disconnect con1
            --connection default
             
            DROP TABLE t1;
            

            kevg Eugene Kosov (Inactive) added a comment - Deterministic test. --source include/have_innodb.inc   CREATE TABLE t1 (i INT ) ENGINE=InnoDB WITH SYSTEM VERSIONING; INSERT INTO t1 () VALUES ();   --connect (con1,localhost,root,,test) set debug_sync= 'row_log_table_apply1_before SIGNAL alter_in_progress WAIT_FOR delete_finished' ; --send ALTER TABLE t1 DROP SYSTEM VERSIONING;   --connection default set debug_sync= 'now WAIT_FOR alter_in_progress' ; DELETE FROM t1; set debug_sync= 'now SIGNAL delete_finished' ;   --connection con1 --reap   # Cleanup --disconnect con1 --connection default   DROP TABLE t1;

            This one crashes too. It's because `ADD/DROP SYSTEM VERSIONING` is not working with Online DDL yet.

            --source include/have_innodb.inc
             
            CREATE TABLE t1 (i INT) ENGINE=InnoDB;
            INSERT INTO t1 () VALUES ();
             
            --connect (con1,localhost,root,,test)
            --send
            ALTER TABLE t1 add SYSTEM VERSIONING;
             
            --connection default
             
            show processlist;
             
            insert into t1 values (2);
             
            --connection con1
            --reap
             
            # Cleanup
            --disconnect con1
            --connection default
             
            DROP TABLE t1;
            

            kevg Eugene Kosov (Inactive) added a comment - This one crashes too. It's because `ADD/DROP SYSTEM VERSIONING` is not working with Online DDL yet. --source include/have_innodb.inc   CREATE TABLE t1 (i INT ) ENGINE=InnoDB; INSERT INTO t1 () VALUES ();   --connect (con1,localhost,root,,test) --send ALTER TABLE t1 add SYSTEM VERSIONING;   --connection default   show processlist;   insert into t1 values (2);   --connection con1 --reap   # Cleanup --disconnect con1 --connection default   DROP TABLE t1;
            kevg Eugene Kosov (Inactive) added a comment - Fixed here https://github.com/tempesta-tech/mariadb/commit/a83fcbaa3b6053c392bf69f57ac9a9e346187a6a
            kevg Eugene Kosov (Inactive) added a comment - https://github.com/MariaDB/server/commit/a83fcbaa3b6053c392bf69f57ac9a9e346187a6a

            I think that the fix needs to be revised as follows:

            1. Add a test case that demonstrates that the operations with LOCK=NONE are refused with an error message. The natural location for the test would be somewhere inside --suite=versioning, possibly in an existing file that tests different ALTER TABLE operations.
            2. Refuse the online operation in ha_innobase::check_if_supported_inplace_alter(). Check for existing logic that assigns online = false.
            marko Marko Mäkelä added a comment - I think that the fix needs to be revised as follows: Add a test case that demonstrates that the operations with LOCK=NONE are refused with an error message. The natural location for the test would be somewhere inside --suite=versioning , possibly in an existing file that tests different ALTER TABLE operations. Refuse the online operation in ha_innobase::check_if_supported_inplace_alter() . Check for existing logic that assigns online = false .
            kevg Eugene Kosov (Inactive) added a comment - Fix improved in a row of commit such as this one https://github.com/MariaDB/server/commit/098a1d7ddbf7756b69e5cee39782d0090e022b82

            People

              kevg Eugene Kosov (Inactive)
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              4 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.