Details
-
Type:
Technical task
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels: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;
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Problem was that sql_slave_skip_counter was not multi-source aware. That is now fixed.