[Commits] Rev 3463: MDEV-26: Global Transaction ID. in http://bazaar.launchpad.net/~maria-captains/maria/10.0

knielsen at knielsen-hq.org knielsen at knielsen-hq.org
Wed Feb 27 19:38:42 EET 2013


At http://bazaar.launchpad.net/~maria-captains/maria/10.0

------------------------------------------------------------
revno: 3463
revision-id: knielsen at knielsen-hq.org-20130227173842-3ti7jw7k5lcemotl
parent: knielsen at knielsen-hq.org-20130226162507-uw2rk1igqzbo95rm
committer: knielsen at knielsen-hq.org
branch nick: work-10.0-mdev26
timestamp: Wed 2013-02-27 18:38:42 +0100
message:
  MDEV-26: Global Transaction ID.
  
  Add test case demonstrating multi-source replication with GTID.
  
  Test that we can move from being slave of two masters to be a slave
  deeper down in the hierarchy (of a higher-up multi-source slave),
  and vice versa.
=== added file 'mysql-test/suite/multi_source/gtid.cnf'
--- a/mysql-test/suite/multi_source/gtid.cnf	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/multi_source/gtid.cnf	2013-02-27 17:38:42 +0000
@@ -0,0 +1,24 @@
+!include my.cnf
+
+[mysqld.1]
+log-slave-updates
+loose-innodb
+
+[mysqld.2]
+log-slave-updates
+loose-innodb
+
+[mysqld.3]
+log-bin=server3-bin
+log-slave-updates
+loose-innodb
+
+[mysqld.4]
+server-id=4
+log-bin=server4-bin
+log-slave-updates
+loose-innodb
+
+[ENV]
+SERVER_MYPORT_4=                @mysqld.4.port
+SERVER_MYSOCK_4=                @mysqld.4.socket

=== added file 'mysql-test/suite/multi_source/gtid.result'
--- a/mysql-test/suite/multi_source/gtid.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/multi_source/gtid.result	2013-02-27 17:38:42 +0000
@@ -0,0 +1,149 @@
+CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root';
+CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root';
+start all slaves;
+Warnings:
+Note    1936    SLAVE 'slave2' started
+Note    1936    SLAVE 'slave1' started
+set default_master_connection = 'slave1';
+include/wait_for_slave_to_start.inc
+set default_master_connection = 'slave2';
+include/wait_for_slave_to_start.inc
+set default_master_connection = '';
+CHANGE MASTER TO master_port=MYPORT_3, master_host='127.0.0.1', master_user='root';
+start all slaves;
+Warnings:
+Note    1936    SLAVE '' started
+include/wait_for_slave_to_start.inc
+SET GLOBAL gtid_domain_id= 1;
+SET SESSION gtid_domain_id= 1;
+CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10));
+INSERT INTO t1 VALUES (1, "initial");
+CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
+INSERT INTO t3 VALUES (101, "initial 1");
+SET GLOBAL gtid_domain_id= 2;
+SET SESSION gtid_domain_id= 2;
+CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
+INSERT INTO t2 VALUES (1, "initial");
+SET SQL_LOG_BIN=0;
+CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10));
+SET SQL_LOG_BIN=1;
+INSERT INTO t3 VALUES (201, "initial 2");
+SHOW ALL SLAVES STATUS;
+Connection_name 
+Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
+Slave_IO_State  Waiting for master to send event
+Master_Host     127.0.0.1
+Master_User     root
+Master_Port     MYPORT_3
+Connect_Retry   60
+Master_Log_File server3-bin.000001
+Read_Master_Log_Pos     1499
+Relay_Log_File  mysqld-relay-bin.000002
+Relay_Log_Pos   1788
+Relay_Master_Log_File   server3-bin.000001
+Slave_IO_Running        Yes
+Slave_SQL_Running       Yes
+Replicate_Do_DB 
+Replicate_Ignore_DB     
+Replicate_Do_Table      
+Replicate_Ignore_Table  
+Replicate_Wild_Do_Table 
+Replicate_Wild_Ignore_Table     
+Last_Errno      0
+Last_Error      
+Skip_Counter    0
+Exec_Master_Log_Pos     1499
+Relay_Log_Space 2086
+Until_Condition None
+Until_Log_File  
+Until_Log_Pos   0
+Master_SSL_Allowed      No
+Master_SSL_CA_File      
+Master_SSL_CA_Path      
+Master_SSL_Cert 
+Master_SSL_Cipher       
+Master_SSL_Key  
+Seconds_Behind_Master   0
+Master_SSL_Verify_Server_Cert   No
+Last_IO_Errno   0
+Last_IO_Error   
+Last_SQL_Errno  0
+Last_SQL_Error  
+Replicate_Ignore_Server_Ids     
+Master_Server_Id        3
+Using_Gtid      0
+Retried_transactions    0
+Max_relay_log_size      1073741824
+Executed_log_entries    25
+Slave_received_heartbeats       0
+Slave_heartbeat_period  60.000
+Gtid_Pos        1-1-4,2-2-3
+*** Now move slave2 to replicate from both master1 and master2 instead of just slave1 ***
+STOP ALL SLAVES;
+Warnings:
+Note    1937    SLAVE '' stopped
+INSERT INTO t1 VALUES (2, "switch1");
+INSERT INTO t3 VALUES (102, "switch1 a");
+INSERT INTO t2 VALUES (2, "switch1");
+INSERT INTO t3 VALUES (202, "switch1 b");
+CHANGE MASTER 'slave1' TO master_port=MYPORT_1, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+CHANGE MASTER 'slave2' TO master_port=MYPORT_2, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+SET default_master_connection = 'slave1';
+START SLAVE;
+include/wait_for_slave_to_start.inc
+SET default_master_connection = 'slave2';
+START SLAVE;
+include/wait_for_slave_to_start.inc
+set default_master_connection = '';
+*** Move slave1 to replicate from slave2 instead of from master1 and master2 ***
+STOP SLAVE 'slave1';
+INSERT INTO t1 VALUES (3, "switch 2");
+INSERT INTO t3 VALUES (103, "switch 2 a");
+INSERT INTO t2 VALUES (3, "switch 2");
+INSERT INTO t3 VALUES (203, "switch 2 b");
+STOP SLAVE 'slave2';
+INSERT INTO t2 VALUES (4, "switch 3");
+INSERT INTO t3 VALUES (204, "switch 3 b");
+CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+START SLAVE;
+SELECT * FROM t1 ORDER BY a;
+a       b
+1       initial
+2       switch1
+3       switch 2
+SELECT * FROM t2 ORDER BY a;
+a       b
+1       initial
+2       switch1
+3       switch 2
+4       switch 3
+SELECT * FROM t3 ORDER BY a;
+a       b
+101     initial 1
+102     switch1 a
+103     switch 2 a
+201     initial 2
+202     switch1 b
+203     switch 2 b
+204     switch 3 b
+DROP TABLE t1;
+SET SQL_LOG_BIN=0;
+DROP TABLE t3;
+SET SQL_LOG_BIN=1;
+DROP TABLE t2;
+DROP TABLE t3;
+SET GLOBAL gtid_domain_id=0;
+STOP ALL SLAVES;
+Warnings:
+Note    1937    SLAVE '' stopped
+include/reset_master_slave.inc
+SET GLOBAL gtid_domain_id=0;
+STOP ALL SLAVES;
+Warnings:
+Note    1937    SLAVE 'slave2' stopped
+Note    1937    SLAVE 'slave1' stopped
+include/reset_master_slave.inc
+SET GLOBAL gtid_domain_id=0;
+include/reset_master_slave.inc
+SET GLOBAL gtid_domain_id=0;
+include/reset_master_slave.inc

=== added file 'mysql-test/suite/multi_source/gtid.test'
--- a/mysql-test/suite/multi_source/gtid.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/multi_source/gtid.test	2013-02-27 17:38:42 +0000
@@ -0,0 +1,154 @@
+--source include/have_innodb.inc
+
+#
+# Test GTID with multi-source
+#
+
+--connect (slave1,127.0.0.1,root,,,$SERVER_MYPORT_3)
+--connect (slave2,127.0.0.1,root,,,$SERVER_MYPORT_4)
+--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
+--connect (master2,127.0.0.1,root,,,$SERVER_MYPORT_2)
+
+--connection slave1
+--replace_result $SERVER_MYPORT_1 MYPORT_1 
+eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root';
+--replace_result $SERVER_MYPORT_2 MYPORT_2
+eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root';
+start all slaves;
+set default_master_connection = 'slave1';
+--source include/wait_for_slave_to_start.inc
+set default_master_connection = 'slave2';
+--source include/wait_for_slave_to_start.inc
+set default_master_connection = '';
+
+--connection slave2
+--replace_result $SERVER_MYPORT_3 MYPORT_3 
+eval CHANGE MASTER TO master_port=$SERVER_MYPORT_3, master_host='127.0.0.1', master_user='root';
+start all slaves;
+--source include/wait_for_slave_to_start.inc
+
+--connection master1
+SET GLOBAL gtid_domain_id= 1;
+SET SESSION gtid_domain_id= 1;
+CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10));
+INSERT INTO t1 VALUES (1, "initial");
+CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
+INSERT INTO t3 VALUES (101, "initial 1");
+
+--connection master2
+SET GLOBAL gtid_domain_id= 2;
+SET SESSION gtid_domain_id= 2;
+CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
+INSERT INTO t2 VALUES (1, "initial");
+SET SQL_LOG_BIN=0;
+CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10));
+SET SQL_LOG_BIN=1;
+INSERT INTO t3 VALUES (201, "initial 2");
+
+--connection slave2
+--let $wait_condition= SELECT COUNT(*)=3 FROM information_schema.tables WHERE table_name IN ("t1", "t2", "t3") AND table_schema = "test"
+--source include/wait_condition.inc
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=1 AND (SELECT COUNT(*) FROM t2)=1 AND (SELECT COUNT(*) FROM t3)=2
+--source include/wait_condition.inc
+--replace_result $SERVER_MYPORT_3 MYPORT_3
+query_vertical SHOW ALL SLAVES STATUS;
+
+--echo *** Now move slave2 to replicate from both master1 and master2 instead of just slave1 ***
+STOP ALL SLAVES;
+
+# Let us have a couple extra transactions on the masters to check that
+# we resume replication at the right place even in the middle of the logs.
+--connection master1
+INSERT INTO t1 VALUES (2, "switch1");
+INSERT INTO t3 VALUES (102, "switch1 a");
+--connection master2
+INSERT INTO t2 VALUES (2, "switch1");
+INSERT INTO t3 VALUES (202, "switch1 b");
+
+--connection slave2
+--replace_result $SERVER_MYPORT_1 MYPORT_1 
+eval CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+--replace_result $SERVER_MYPORT_2 MYPORT_2
+eval CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+SET default_master_connection = 'slave1';
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+SET default_master_connection = 'slave2';
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+set default_master_connection = '';
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=2 AND (SELECT COUNT(*) FROM t3)=4
+--source include/wait_condition.inc
+
+
+--echo *** Move slave1 to replicate from slave2 instead of from master1 and master2 ***
+--connection slave1
+# Set up so that slave1 will have to start from two different positions
+# in the slave2 binlog (one for each domain_id).
+STOP SLAVE 'slave1';
+
+--connection master1
+INSERT INTO t1 VALUES (3, "switch 2");
+INSERT INTO t3 VALUES (103, "switch 2 a");
+
+--connection slave2
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=3 AND (SELECT COUNT(*) FROM t2)=2 AND (SELECT COUNT(*) FROM t3)=5
+--source include/wait_condition.inc
+
+--connection master2
+INSERT INTO t2 VALUES (3, "switch 2");
+INSERT INTO t3 VALUES (203, "switch 2 b");
+
+--connection slave1
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=3 AND (SELECT COUNT(*) FROM t3)=5
+--source include/wait_condition.inc
+STOP SLAVE 'slave2';
+
+--connection master2
+INSERT INTO t2 VALUES (4, "switch 3");
+INSERT INTO t3 VALUES (204, "switch 3 b");
+
+--connection slave1
+--replace_result $SERVER_MYPORT_4 MYPORT_4 
+eval CHANGE MASTER TO master_port=$SERVER_MYPORT_4, master_host='127.0.0.1', master_user='root', master_gtid_pos=auto;
+START SLAVE;
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=3 AND (SELECT COUNT(*) FROM t2)=4 AND (SELECT COUNT(*) FROM t3)=7
+--source include/wait_condition.inc
+SELECT * FROM t1 ORDER BY a;
+SELECT * FROM t2 ORDER BY a;
+SELECT * FROM t3 ORDER BY a;
+
+# Cleanup.
+--connection master1
+DROP TABLE t1;
+SET SQL_LOG_BIN=0;
+DROP TABLE t3;
+SET SQL_LOG_BIN=1;
+
+--connection master2
+DROP TABLE t2;
+DROP TABLE t3;
+
+--connection slave1
+SET GLOBAL gtid_domain_id=0;
+--let $wait_condition= SELECT COUNT(*)=0 FROM information_schema.tables WHERE table_name IN ("t1", "t2", "t3") AND table_schema = "test"
+--source include/wait_condition.inc
+STOP ALL SLAVES;
+--source reset_master_slave.inc
+--disconnect slave1
+
+--connection slave2
+SET GLOBAL gtid_domain_id=0;
+STOP ALL SLAVES;
+--source reset_master_slave.inc
+--disconnect slave2
+
+--connection master1
+SET GLOBAL gtid_domain_id=0;
+--source reset_master_slave.inc
+--disconnect master1
+
+--connection master2
+SET GLOBAL gtid_domain_id=0;
+--source reset_master_slave.inc
+--disconnect master2



More information about the commits mailing list