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

Online log apply fails for redundant row format tables

    XMLWordPrintable

    Details

      Description

      In rec_get_converted_size_comp_prefix_low(), InnoDB calculates extra bytes
      for null bytes using index->n_core_null_bytes field. But in
      rec_convert_dtuple_to_rec_comp(), InnoDB traverse to null bytes
      using index->n_nullable field. In the given scenario, index->n_core_null_bytes
      is 1 and index->n_nullable is 9 and it doesn't fit in single byte.
      Moreover, n_core_null_bytes indicates the number of null bits in non-redundant
      format when table is not instant. Problem exist from 10.3+. But
      the given test case repeats from 10.4+

       
      --source include/have_innodb.inc
      CREATE TABLE IF NOT EXISTS t4 ( col1 INT, col2 INT, col_int INTEGER, col_string INTEGER, col_varchar VARCHAR(500), col_text TEXT ) ENGINE = InnoDB ROW_FORMAT = REDUNDANT;
      ALTER TABLE t4 ADD PRIMARY KEY ( col_text(9), col_int );
      ALTER TABLE t4 ADD COLUMN col_int_copy INTEGER;
      ALTER TABLE t4 DROP PRIMARY KEY;
      ALTER TABLE t4 ADD COLUMN col_text_copy TEXT;
      ALTER TABLE t4 ADD PRIMARY KEY ( col_text(9), col_int );
      ALTER TABLE t4 ADD COLUMN col_inTcol_int INTEGER;
      ALTER TABLE t4 DROP PRIMARY KEY;
      ALTER TABLE t4 ADD COLUMN col_texTcol_text TEXT;
      ALTER TABLE t4 ADD PRIMARY KEY ( col_text(9), col_int );
      ALTER TABLE t4 DROP PRIMARY KEY;
      ALTER TABLE t4 MODIFY COLUMN col_text TEXT;
       
      set DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL alter_phase WAIT_FOR alter_finish";
      --send ALTER TABLE t4 ADD PRIMARY KEY ( col_text(9), col_int )
      connect(con1,localhost,root,,);
      set DEBUG_SYNC="now WAIT_FOR alter_phase";
      begin;
      INSERT INTO t4 (col1,col2, col_int, col_string, col_text) VALUES ( 1, 1, 0, REPEAT(SUBSTR(CAST( 1 AS CHAR),1,1), 10), REPEAT(SUBSTR(CAST( 1 AS CHAR),1,1), 10000) );
      rollback;
      set DEBUG_SYNC="now SIGNAL alter_finish";
       
      connection default;
      reap;
      disconnect con1;
      select * from t4;
      drop table t4;
      set debug_sync=reset;
      

      Run the above test case with --innodb_page_size=64K --innodb_buffer_pool_size=24M

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              thiru Thirunarayanan Balathandayuthapani
              Reporter:
              thiru Thirunarayanan Balathandayuthapani
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Git Integration