Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-253 Multi-source replication
  3. MDEV-547

Multi-source: sql_slave_skip_counter doesn't work for a connection with a non-default name

    XMLWordPrintable

Details

    • Technical task
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • None
    • None
    • None
    • None

    Description

      If I set global sql_slave_skip_counter, then configure a replication connection with a non-default name and start the slave, it doesn't take into account the value of the skip_counter, even if the connection name is set as default_master_connection.

      I'm not exactly sure how it should work, my best guess is that sql_slave_skip_counter should affect all connections that get started after the value was set.

      Below is the test case (hopefully a full one, so it can be used as is in multi_source suite), and a result file as I imagine it (it's patched manually).

      cat suite/multi_source/skip_counter.test

      ---enable_connect_log
       
      # Create a schema and a table i
      # on the 1st master
       
      --connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
       
      --disable_warnings
      drop database if exists db;
      --enable_warnings
      create database db;
      create table db.t1 (i int) engine=MyISAM;
      --save_master_pos
       
       
      # Create the same schema and another table
      # on the 2nd master
       
      --connect (master2,127.0.0.1,root,,,$SERVER_MYPORT_2)
       
      --disable_warnings
      drop database if exists db;
      --enable_warnings
      create database db;
      create table db.t2 (i int) engine=MyISAM;
       
      --connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
      --disable_connect_log
       
      # Start replication from the first master
       
      --replace_result $SERVER_MYPORT_1 MYPORT_1
      eval change master 'master1' to
      master_port=$SERVER_MYPORT_1,
      master_host='127.0.0.1',
      master_user='root';
       
      start slave 'master1';
      set default_master_connection = 'master1';
      --source include/wait_for_slave_to_start.inc
      --sync_with_master 0,'master1'
       
      # Start replication from the second master
       
      set default_master_connection = 'master2';
       
      --replace_result $SERVER_MYPORT_2 MYPORT_2
      eval change master 'master2' to
      master_port=$SERVER_MYPORT_2,
      master_host='127.0.0.1',
      master_user='root';
       
      # the schema creation will be replicated from the 1st master,
      # so we want to skip it in the second replication connection.
       
      # Normally it should have been 2 events, but
      # currently Binlog_checkpoint also counts. Maybe we'll need
      # to modify the test later
       
      --let $skip_counter_saved = `select @@global.sql_slave_skip_counter`
      set global sql_slave_skip_counter = 3;
       
      start slave 'master2';
      --source include/wait_for_slave_to_start.inc
      set default_master_connection = '';
       
      --enable_connect_log
       
      --connection master2
      --save_master_pos
       
      --connection slave
       
      --disable_connect_log
      --sync_with_master 0,'master2'
       
      # If the skip_counter worked as expected, we should
      # get here (replication shouldn't have broken)
      # and should see both tables here
      # (drop database which came from master2 shoudn't have been executed
      # so t1 should still exist)
       
      show tables in db;
       
      # Cleanup
       
      drop database db;
      set default_master_connection = 'master1';
      stop slave;
       
      --source include/wait_for_slave_to_stop.inc
      set default_master_connection = 'master2';
      stop slave;
       
      --source include/wait_for_slave_to_stop.inc
      --eval set global sql_slave_skip_counter = $skip_counter_saved
       
      --enable_connect_log
      --disconnect slave
       
      --connection master1
      drop database db;
      --disconnect master1
       
      --connection master2
      drop database db;
      --disconnect master2
       

      cat suite/multi_source/skip_counter.result

      connect  master1,127.0.0.1,root,,,$SERVER_MYPORT_1;
      drop database if exists db;
      create database db;
      create table db.t1 (i int) engine=MyISAM;
      connect  master2,127.0.0.1,root,,,$SERVER_MYPORT_2;
      drop database if exists db;
      create database db;
      create table db.t2 (i int) engine=MyISAM;
      connect  slave,127.0.0.1,root,,,$SERVER_MYPORT_3;
      change master 'master1' to
      master_port=MYPORT_1,
      master_host='127.0.0.1',
      master_user='root';
      start slave 'master1';
      set default_master_connection = 'master1';
      include/wait_for_slave_to_start.inc
      set default_master_connection = 'master2';
      change master 'master2' to
      master_port=MYPORT_2,
      master_host='127.0.0.1',
      master_user='root';
      set global sql_slave_skip_counter = 3;
      start slave 'master2';
      include/wait_for_slave_to_start.inc
      set default_master_connection = '';
      connection master2;
      connection slave;
      show tables in db;
      Tables_in_db
      t1
      t2
      drop database db;
      set default_master_connection = 'master1';
      stop slave;
      include/wait_for_slave_to_stop.inc
      set default_master_connection = 'master2';
      stop slave;
      include/wait_for_slave_to_stop.inc
      set global sql_slave_skip_counter = 0;
      disconnect slave;
      connection master1;
      drop database db;
      disconnect master1;
      connection master2;
      drop database db;
      disconnect master2;

      Attachments

        Activity

          People

            monty Michael Widenius
            elenst Elena Stepanova
            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.