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

Errorred-out CREATE-or-REPLACE-SELECT does not log DROP table into binlog

Details

    Description

      CREATE-or-REPLACE-SELECT additionally to MDEV-35207 had
      a specific issue to missed DROP TABLE logging into the binary log.
      How to reproduce is described in a while loop of the following mtr test (to be committed with this + MDEV-35207 fixes).

      --source include/have_binlog_format_row.inc
      --source include/have_innodb.inc
       
      --connection default
      set @max_binlog_cache_size         = @@global.max_binlog_cache_size;
      set @binlog_cache_size             = @@global.binlog_cache_size;
      set @@global.max_binlog_cache_size = 4096;
      set @@global.    binlog_cache_size = 4096;
       
      --echo #
      --echo # MDEV-35207
      --echo #
      # fixate the current (write) binlog position
      --let $binlog_file_0= query_get_value(SHOW MASTER STATUS, File, 1)
      --let $binlog_start_0 = query_get_value(SHOW MASTER STATUS, Position, 1)
       
      # use a separate connection also to validate its close will be clean
      connect (conn_err,localhost,root,,);
       
      call mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage");
      --error ER_TRANS_CACHE_FULL
      create table t engine=myisam select repeat ('a',4096*3) AS a;
       
      --error ER_TRANS_CACHE_FULL
      create table t engine=innodb select repeat ('a',4096*3) AS a;
       
      --error ER_DUP_ENTRY
      create table t (a int unique, b char) select 1 AS a, 'b' as b union select 1 as a, 'c' as b;
      --error ER_NO_SUCH_TABLE
      select * from t;
       
      --disconnect conn_err
       
      --connection default
      --let $binlog_file_1= query_get_value(SHOW MASTER STATUS, File, 1)
      --let $binlog_start_1= query_get_value(SHOW MASTER STATUS, Position, 1)
       
      --let $cmp = `select strcmp('$binlog_file_1', '$binlog_file_0') <> 0 OR $binlog_start_1 <> $binlog_start_0` 
      if (!$cmp)
      {
         --echo *** Error: unexpected advance of binlog position
         --die
      }
       
      --echo
      --echo #
      --echo # MDEV-CoRS errored CoRS does not DROP table in binlog
      --echo #
      --let $i = 2
      while ($i)
      {
        --let $engine=`select if($i % 2, "myisam", "innodb")`
        --echo #
        --echo # Engine = $engine
        --echo #
        set statement binlog_format=statement for create table t (a int) select 1 as a;
        --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
        --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
        --error ER_DUP_ENTRY
        --eval set statement binlog_format=row for create or replace table t (a int primary key, b char) engine=$engine select 1 AS a, 'b' as b union select 1 as a, 'c' as b
        --error ER_NO_SUCH_TABLE
        select * from t;
        --echo #
        --echo # Prove an expected lonely `DROP table t'
        --source include/show_binlog_events.inc
       
        # error before stmt commit
        set statement binlog_format=statement for create table t (a int) select 1 as a;
        --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
        --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
        --error ER_TRANS_CACHE_FULL
        --eval set statement binlog_format=row for create or replace table t (a text) engine=$engine select repeat ('a',1024) AS a union select repeat ('a',3*4096) AS a union select repeat ('a',3*4096) AS a
        --error ER_NO_SUCH_TABLE
        select * from t;
        --echo #
        --echo # Prove an expected lonely `DROP table t'
        --source include/show_binlog_events.inc
       
        # error at stmt commit
        set statement binlog_format=statement for create table t (a int) select 1 as a;
        --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
        --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
        --error ER_TRANS_CACHE_FULL
        --eval set statement binlog_format=row for create or replace table t (a text) engine=$engine select repeat ('a',4096*3) AS a;
        --error ER_NO_SUCH_TABLE
        select * from t;
        --echo #
        --echo # Prove an expected lonely `DROP table t'
        --source include/show_binlog_events.inc
       
      --dec $i
      }
       
      SET @@global.max_binlog_cache_size = @max_binlog_cache_size;
      SET @@global.    binlog_cache_size = @binlog_cache_size;
      
      

      Attachments

        Issue Links

          Activity

            Transition Time In Source Status Execution Times
            Andrei Elkin made transition -
            Open In Progress
            21h 54m 1
            Andrei Elkin made transition -
            In Progress In Review
            14m 8s 1
            Brandon Nesterenko made transition -
            In Review Stalled
            45d 23h 30m 1
            Andrei Elkin made transition -
            Stalled In Progress
            82d 2h 12m 1
            Andrei Elkin made transition -
            In Progress Closed
            1m 17s 1

            People

              Elkin Andrei Elkin
              Elkin Andrei Elkin
              Votes:
              0 Vote for this issue
              Watchers:
              3 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.