We're updating the issue view to help you get more done. 

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 ---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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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;

Environment

None

Status

Assignee

Michael Widenius

Reporter

Elena Stepanova

Priority

Major