Multi-source replication (MDEV-253)

[MDEV-547] Multi-source: sql_slave_skip_counter doesn't work for a connection with a non-default name Created: 2012-09-26  Updated: 2012-09-28  Resolved: 2012-09-28

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Technical task Priority: Major
Reporter: Elena Stepanova Assignee: Michael Widenius
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates

 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;



 Comments   
Comment by Michael Widenius [ 2012-09-28 ]

Problem was that sql_slave_skip_counter was not multi-source aware. That is now fixed.

Generated at Thu Feb 08 06:29:33 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.