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

LP:1003679 - Wrong binlog order on concurrent DROP schema and CREATE function

    Details

    • Sprint:
      10.1.13, 10.1.14

      Description

      Also filed as http://bugs.mysql.com/bug.php?id=65428

      Concurrent execution of DROP DATABASE and CREATE FUNCTION | PROCEDURE | EVENT causes a wrong order of events in the binary log and, consequently, replication failure.

      Provided MTR test case is non-deterministic, so I am also adding an RQG grammar to reproduce.
      The problem is that on master CREATE FUNCTION gets executed without an error, but in the binlog DROP DATABASE is written before CREATE FUNCTION.

      Reproducible on maria/5.5 revno 3413, mysql-5.5 revno 3737, mysql-trunk revno 3827.
      Could not reproduce on maria/5.3, although due to the non-deterministic nature of the test there is no guarantee the problem is not present there.

      # MTR test case t1.test
      # run as perl ./mtr --mysqld=--binlog-format=mixed t1
       
      --source include/master-slave.inc
       
      DROP DATABASE IF EXISTS db1;
       
      CREATE DATABASE db1;
      CREATE FUNCTION db1.f1() RETURNS INT RETURN 1;
      --send
      DROP DATABASE db1;
       
      --connection master1
      --error 0,ER_BAD_DB_ERROR
      CREATE FUNCTION db1.f2() RETURNS INT RETURN 1;
       
      --connection master
      --reap
      SHOW BINLOG EVENTS;
       
      --sync_slave_with_master
       

      # Binlog contents:
       
      Log_name        Pos     Event_type      Server_id       End_log_pos     Info
      slave-relay-bin.000002  4       Format_desc     2       245     Server ver: 5.5.23-MariaDB-debug-log, Binlog ver: 4
      slave-relay-bin.000002  245     Rotate  1       0       master-bin.000001;pos=4
      slave-relay-bin.000002  289     Format_desc     1       245     Server ver: 5.5.23-MariaDB-debug-log, Binlog ver: 4
      slave-relay-bin.000002  530     Query   1       334     DROP DATABASE IF EXISTS db1
      slave-relay-bin.000002  619     Query   1       415     CREATE DATABASE db1
      slave-relay-bin.000002  700     Query   1       574     use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `db1`.`f1`() RETURNS int(11)
      RETURN 1
      slave-relay-bin.000002  859     Query   1       653     DROP DATABASE db1
      slave-relay-bin.000002  938     Query   1       812     use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `db1`.`f2`() RETURNS int(11)
      RETURN 1

      # RQG grammar t1.yy
       
      query:
           CREATE DATABASE IF NOT EXISTS db1; CREATE FUNCTION db1.f1() RETURNS INT RETURN 1; DROP DATABASE db1;
       
      thread1:
           CREATE FUNCTION db1.f2() RETURNS INT RETURN 1; DROP FUNCTION db1.f2;
       

      # RQG command line:
       
      perl runall.pl \
      --queries=100M \
      --threads=2 \
      --duration=600 \
      --grammar=t1.yy \
      --rpl_mode=mixed \
      --basedir1=<your basedir> \
      --vardir1=<your vardir>

        Attachments

          Activity

            People

            • Assignee:
              holyfoot Alexey Botchkov
              Reporter:
              elenst Elena Stepanova
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: