List:Commits« Previous MessageNext Message »
From:Serge Kozlov Date:April 24 2008 8:41pm
Subject:bk commit into 5.1 tree (skozlov:1.2567)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of skozlov.  When skozlov does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-04-25 00:41:04+04:00, skozlov@stripped +11 -0
  WL#3754, testing circular replication

  mysql-test/include/circular_rpl_for_4_hosts_init.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +130 -0
    The primitive for 4 hosts non-cluster circular replication

  mysql-test/include/circular_rpl_for_4_hosts_init.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/include/circular_rpl_for_4_hosts_sync.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +23 -0
    The primitive for sync for 4 hosts non-cluster circular replication

  mysql-test/include/circular_rpl_for_4_hosts_sync.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/include/ndb_master-slave_2ch.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +136 -0
    The primitive for initialization of two-channel cluster replication

  mysql-test/include/ndb_master-slave_2ch.inc@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +298 -0
    Result file

  mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +1 -0
    Options file

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +1 -0
    Options file

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +328 -0
    The test case for non-cluster circular replication A->B->C->D->A

  mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +101 -0
    Result file

  mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +1 -0
    Options file

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +1 -0
    Options file

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +179 -0
    The test case for cluster circular replication by two channels

  mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test@stripped, 2008-04-25 00:41:02+04:00, skozlov@stripped +0 -0

diff -Nrup a/mysql-test/include/circular_rpl_for_4_hosts_init.inc b/mysql-test/include/circular_rpl_for_4_hosts_init.inc
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/include/circular_rpl_for_4_hosts_init.inc	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,130 @@
+#############################################################
+#
+# Author:  Serge Kozlov <skozlov@stripped>
+# Date:    03/11/2008
+# Purpose: Set up circular replication based on schema 
+# A->B->C->D->A
+#
+# Notes:
+# 1. --slave-num=3 must be added to *-master.opt file
+# 2. Even the test uses new names for servers but file names 
+#    of log files are still old:
+#    master_a -> master.[log|err]
+#    master_b -> slave.[log|err]
+#    master_c -> slave1.[log|err]
+#    master_d -> slave2.[log|err]
+#
+#############################################################
+--source include/master-slave.inc
+
+#
+# Set up circular ring by schema A->B->C-D->A 
+#
+
+--connection slave
+STOP SLAVE;
+RESET SLAVE;
+
+# master a
+--connection master
+--disconnect master
+connect (master_a,127.0.0.1,root,,test,$MASTER_MYPORT,);
+RESET MASTER;
+--disable_warnings
+STOP SLAVE;
+--enable_warnings
+RESET SLAVE;
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 1;
+let $_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
+
+# master b
+--connection slave
+--disconnect slave
+connect (master_b,127.0.0.1,root,,test,$SLAVE_MYPORT,);
+RESET MASTER;
+RESET SLAVE;
+--replace_result $MASTER_MYPORT MASTER_A_PORT $_binlog_file MASTER_A_LOG_FILE
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$MASTER_MYPORT,master_user='root',MASTER_LOG_FILE='$_binlog_file'
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 2;
+let $_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
+
+# master c
+--connection slave1
+--disconnect slave1
+connect (master_c,127.0.0.1,root,,test,$SLAVE_MYPORT1,);
+RESET MASTER;
+--disable_warnings
+STOP SLAVE;
+--enable_warnings
+RESET SLAVE;
+--replace_result $SLAVE_MYPORT MASTER_B_PORT $_binlog_file MASTER_B_LOG_FILE
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT,master_user='root',MASTER_LOG_FILE='$_binlog_file'
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 3;
+let $_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
+
+# master d 
+connect (master_d,127.0.0.1,root,,test,$SLAVE_MYPORT2,);
+RESET MASTER;
+--disable_warnings
+STOP SLAVE;
+--enable_warnings
+RESET SLAVE;
+--replace_result $SLAVE_MYPORT1 MASTER_C_PORT $_binlog_file MASTER_C_LOG_FILE
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT1,master_user='root',MASTER_LOG_FILE='$_binlog_file'
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 4;
+let $_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
+
+# master a
+--connection master_a
+--replace_result $SLAVE_MYPORT2 MASTER_D_PORT $_binlog_file MASTER_D_LOG_FILE
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT2,master_user='root',MASTER_LOG_FILE='$_binlog_file'
+
+
+
+# Check server_ids: they should be different
+--connection master_a
+let $_id_a= query_get_value(SHOW VARIABLES LIKE 'server_id', Value, 1);
+SHOW VARIABLES LIKE 'auto_increment_%';
+--connection master_b
+let $_id_b= query_get_value(SHOW VARIABLES LIKE 'server_id', Value, 1);
+SHOW VARIABLES LIKE 'auto_increment_%';
+--connection master_c
+let $_id_c= query_get_value(SHOW VARIABLES LIKE 'server_id', Value, 1);
+SHOW VARIABLES LIKE 'auto_increment_%';
+--connection master_d
+let $_id_d= query_get_value(SHOW VARIABLES LIKE 'server_id', Value, 1);
+SHOW VARIABLES LIKE 'auto_increment_%';
+--connection master_a
+let $_compared_ids= (($_id_a <> $_id_b) AND ($_id_a <> $_id_c) AND ($_id_a <> $_id_d) AND ($_id_b <> $_id_c) AND ($_id_b <> $_id_d) AND ($_id_c <> $_id_d)) AS a;
+let $_compared_ids_result= query_get_value(SELECT $_compared_ids, a, 1);
+--echo $_compared_ids_result
+
+# Start ring
+--connection master_a
+connect(slave,127.0.0.1,root,,test,$MASTER_MYPORT);
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+--disconnect slave
+
+--connection master_b
+connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT1);
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+--disconnect slave
+
+--connection master_c
+connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT);
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+--disconnect slave
+
+--connection master_d
+connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT2);
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+--disconnect slave
+
diff -Nrup a/mysql-test/include/circular_rpl_for_4_hosts_sync.inc b/mysql-test/include/circular_rpl_for_4_hosts_sync.inc
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/include/circular_rpl_for_4_hosts_sync.inc	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,23 @@
+#############################################################
+#
+# Author:  Serge Kozlov <skozlov@stripped>
+# Date:    03/11/2008
+# Purpose: Sync all hosts for circular replication based on 
+# schema A->B->C->D->A
+# 
+# Notes: see include/circular_rpl_for_4_hosts_init.inc
+#  
+#############################################################
+
+# Make the full loop of sync
+--connection master_a
+--disable_query_log
+--sync_slave_with_master master_b
+--sync_slave_with_master master_c
+--sync_slave_with_master master_d
+--sync_slave_with_master master_a
+--sync_slave_with_master master_b
+--sync_slave_with_master master_c
+--save_master_pos
+--connection master_a
+--enable_query_log
diff -Nrup a/mysql-test/include/ndb_master-slave_2ch.inc b/mysql-test/include/ndb_master-slave_2ch.inc
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/include/ndb_master-slave_2ch.inc	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,136 @@
+#############################################################
+# Author:  Serge Kozlov <skozlov@stripped>
+# Date:    03/17/2008
+# Purpose: Set up circular cluster replication where each 
+# cluster has two mysqlds and replication directions are 
+# following:
+#          master ---> slave  
+#           /            \
+#     cluster A        cluster B
+#           \            /
+#         master1 <--- slave1
+#############################################################
+
+--source include/have_log_bin.inc
+
+# Make connections to mysqlds
+
+connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
+connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT1,);
+connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,);
+connect (slave1,127.0.0.1,root,,test,$SLAVE_MYPORT1,);
+
+# Check that all mysqld compiled with ndb support
+
+--connection master
+--disable_query_log
+--require r/true.require
+SELECT (support = 'YES' or support = 'DEFAULT') AS `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
+--source include/ndb_not_readonly.inc
+--enable_query_log
+
+--connection master1
+--disable_query_log
+--require r/true.require
+SELECT (support = 'YES' or support = 'DEFAULT') AS `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
+--source include/ndb_not_readonly.inc
+--enable_query_log
+
+--connection slave
+--disable_query_log
+--require r/true.require
+SELECT (support = 'YES' or support = 'DEFAULT') AS `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
+--source include/ndb_not_readonly.inc
+--enable_query_log
+
+--connection slave1
+--disable_query_log
+--require r/true.require
+SELECT (support = 'YES' or support = 'DEFAULT') AS `TRUE` FROM information_schema.engines WHERE engine = 'ndbcluster';
+--source include/ndb_not_readonly.inc
+--enable_query_log
+
+# Stop slaves
+
+--connection master
+--disable_warnings
+STOP SLAVE;
+--wait_for_slave_to_stop
+--enable_warnings
+
+--connection master1
+--disable_warnings
+STOP SLAVE;
+--wait_for_slave_to_stop
+--enable_warnings
+
+--connection slave
+--disable_warnings
+STOP SLAVE;
+--wait_for_slave_to_stop
+--enable_warnings
+
+--connection slave1
+--disable_warnings
+STOP SLAVE;
+--wait_for_slave_to_stop
+--enable_warnings
+
+# Reset masters
+
+--connection master
+--disable_warnings
+--disable_query_log
+USE test;
+--enable_query_log
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+RESET MASTER;
+
+--connection master1
+--disable_warnings
+--disable_query_log
+USE test;
+--enable_query_log
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+RESET MASTER;
+
+--connection slave
+--disable_warnings
+--disable_query_log
+USE test;
+--enable_query_log
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+RESET MASTER;
+
+--connection slave1
+--disable_warnings
+--disable_query_log
+USE test;
+--enable_query_log
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+--enable_warnings
+RESET MASTER;
+
+# Start slaves
+
+--connection slave
+RESET SLAVE;
+--replace_result $MASTER_MYPORT MASTER_MYPORT
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$MASTER_MYPORT,master_user='root'
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+
+--connection master1
+RESET SLAVE;
+--replace_result $SLAVE_MYPORT1 SLAVE_MYPORT1
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT1,master_user='root'
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+
+
+# Set the default connection to 'master' (cluster A)
+connection master;
+
diff -Nrup a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,298 @@
+*** Set up circular ring by schema A->B->C-D->A *** 
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+STOP SLAVE;
+RESET SLAVE;
+RESET MASTER;
+STOP SLAVE;
+RESET SLAVE;
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 1;
+RESET MASTER;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_A_PORT,master_user='root',MASTER_LOG_FILE='MASTER_A_LOG_FILE';
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 2;
+RESET MASTER;
+STOP SLAVE;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_B_PORT,master_user='root',MASTER_LOG_FILE='MASTER_B_LOG_FILE';
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 3;
+RESET MASTER;
+STOP SLAVE;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_C_PORT,master_user='root',MASTER_LOG_FILE='MASTER_C_LOG_FILE';
+SET auto_increment_increment = 4;
+SET auto_increment_offset = 4;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_D_PORT,master_user='root',MASTER_LOG_FILE='MASTER_D_LOG_FILE';
+SHOW VARIABLES LIKE 'auto_increment_%';
+Variable_name	Value
+auto_increment_increment	4
+auto_increment_offset	1
+SHOW VARIABLES LIKE 'auto_increment_%';
+Variable_name	Value
+auto_increment_increment	4
+auto_increment_offset	2
+SHOW VARIABLES LIKE 'auto_increment_%';
+Variable_name	Value
+auto_increment_increment	4
+auto_increment_offset	3
+SHOW VARIABLES LIKE 'auto_increment_%';
+Variable_name	Value
+auto_increment_increment	4
+auto_increment_offset	4
+1
+START SLAVE;
+START SLAVE;
+START SLAVE;
+START SLAVE;
+
+*** Preparing data ***
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=MyISAM;
+CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
+
+*** Testing schema A->B->C->D->A ***
+
+INSERT INTO t1(b,c) VALUES('A',1);
+INSERT INTO t1(b,c) VALUES('B',1);
+INSERT INTO t1(b,c) VALUES('C',1);
+INSERT INTO t1(b,c) VALUES('D',1);
+SELECT 'Master A',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+Master A	a	b
+Master A	1	A
+Master A	2	B
+Master A	3	C
+Master A	4	D
+SELECT 'Master B',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+Master B	a	b
+Master B	1	A
+Master B	2	B
+Master B	3	C
+Master B	4	D
+SELECT 'Master C',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+Master C	a	b
+Master C	1	A
+Master C	2	B
+Master C	3	C
+Master C	4	D
+SELECT 'Master D',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+Master D	a	b
+Master D	1	A
+Master D	2	B
+Master D	3	C
+Master D	4	D
+
+*** Testing schema A->B->D->A if C has failure ***
+
+* Do failure for C and then make new connection B->D *
+STOP SLAVE;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
+START SLAVE;
+INSERT INTO t1 VALUES(6,'C',2);
+INSERT INTO t1(b,c) VALUES('B',2);
+INSERT INTO t1(b,c) VALUES('A',2);
+INSERT INTO t1(b,c) VALUES('D',2);
+
+* Data on servers (C failed) *
+SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master A	a	b
+Master A	5	A
+Master A	8	D
+SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master B	a	b
+Master B	5	A
+Master B	6	B
+Master B	8	D
+SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master C	a	b
+Master C	6	C
+SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master D	a	b
+Master D	8	D
+
+* Reconfigure replication to schema A->B->C->A *
+STOP SLAVE;
+STOP SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_B_PORT,master_user='root',master_log_file='LOG_FILE',master_log_pos=LOG_POS;
+START SLAVE;
+
+* Check data inserted before failure *
+SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master A	a	b
+Master A	5	A
+Master A	6	B
+Master A	8	D
+SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master B	a	b
+Master B	5	A
+Master B	6	B
+Master B	8	D
+SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master C	a	b
+Master C	6	C
+SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+Master D	a	b
+Master D	5	A
+Master D	6	B
+Master D	8	D
+
+* Check data inserted after failure *
+INSERT INTO t1(b,c) VALUES('A',3);
+INSERT INTO t1(b,c) VALUES('B',3);
+INSERT INTO t1(b,c) VALUES('D',3);
+SELECT 'Master A',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+Master A	a	b
+Master A	9	A
+Master A	10	B
+Master A	12	D
+SELECT 'Master B',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+Master B	a	b
+Master B	9	A
+Master B	10	B
+Master B	12	D
+SELECT 'Master C',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+Master C	a	b
+SELECT 'Master D',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+Master D	a	b
+Master D	9	A
+Master D	10	B
+Master D	12	D
+
+*** Testing restoring scheme A->B->C->D->A after failure ***
+
+* Remove wrong event from C and restore B->C->D *
+STOP SLAVE;
+DELETE FROM t1 WHERE a = 6;
+START SLAVE;
+RESET MASTER;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_C_PORT,master_user='root',master_log_file='LOG_FILE',master_log_pos=LOG_POS;
+START SLAVE;
+
+* Check data inserted before restoring schema A->B->C->D->A *
+SELECT 'Master A',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+Master A	a	b
+Master A	5	A
+Master A	6	B
+Master A	8	D
+Master A	9	A
+Master A	10	B
+Master A	12	D
+SELECT 'Master B',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+Master B	a	b
+Master B	5	A
+Master B	6	B
+Master B	8	D
+Master B	9	A
+Master B	10	B
+Master B	12	D
+SELECT 'Master C',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+Master C	a	b
+Master C	5	A
+Master C	6	B
+Master C	8	D
+Master C	9	A
+Master C	10	B
+Master C	12	D
+SELECT 'Master D',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+Master D	a	b
+Master D	5	A
+Master D	6	B
+Master D	8	D
+Master D	9	A
+Master D	10	B
+Master D	12	D
+
+* Check data inserted after restoring schema A->B->C->D->A *
+INSERT INTO t1(b,c) VALUES('A',4);
+INSERT INTO t1(b,c) VALUES('B',4);
+INSERT INTO t1(b,c) VALUES('C',4);
+INSERT INTO t1(b,c) VALUES('D',4);
+SELECT 'Master A',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+Master A	a	b
+Master A	13	A
+Master A	14	B
+Master A	15	C
+Master A	16	D
+SELECT 'Master B',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+Master B	a	b
+Master B	13	A
+Master B	14	B
+Master B	15	C
+Master B	16	D
+SELECT 'Master C',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+Master C	a	b
+Master C	13	A
+Master C	14	B
+Master C	15	C
+Master C	16	D
+SELECT 'Master D',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+Master D	a	b
+Master D	13	A
+Master D	14	B
+Master D	15	C
+Master D	16	D
+
+* Transactions with commits *
+BEGIN;
+BEGIN;
+SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+Master A	b	COUNT(*)
+Master A	A	100
+Master A	B	100
+Master A	C	100
+Master A	D	100
+SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+Master B	b	COUNT(*)
+Master B	A	100
+Master B	B	100
+Master B	C	100
+Master B	D	100
+SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+Master C	b	COUNT(*)
+Master C	A	100
+Master C	B	100
+Master C	C	100
+Master C	D	100
+SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+Master D	b	COUNT(*)
+Master D	A	100
+Master D	B	100
+Master D	C	100
+Master D	D	100
+
+* Transactions with rollbacks *
+BEGIN;
+BEGIN;
+SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+Master A	b	COUNT(*)
+Master A	B	100
+Master A	D	100
+SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+Master B	b	COUNT(*)
+Master B	B	100
+Master B	D	100
+SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+Master C	b	COUNT(*)
+Master C	B	100
+Master C	D	100
+SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+Master D	b	COUNT(*)
+Master D	B	100
+Master D	D	100
+
+*** Clean up ***
+DROP TABLE t1,t2;
+STOP SLAVE;
+RESET SLAVE;
+STOP SLAVE;
+RESET SLAVE;
+STOP SLAVE;
+RESET SLAVE;
+STOP SLAVE;
+RESET SLAVE;
diff -Nrup a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt	2008-04-25 00:41:02 +04:00
@@ -0,0 +1 @@
+--slave-num=3 --log-slave-updates --innodb
diff -Nrup a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt	2008-04-25 00:41:02 +04:00
@@ -0,0 +1 @@
+--log-slave-updates --innodb
diff -Nrup a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,328 @@
+#############################################################
+# Author: Serge Kozlov <skozlov@stripped>
+# Date:   03/12/2008
+# Purpose: Testing circular replication based on schema 
+# A->B->C->D->A with using AUTO_INCREMENT_INCREMENT,
+# AUTO_INCREMENT_OFFSET variables and failover
+#############################################################
+--source include/have_innodb.inc
+
+# Set up circular ring and new names for servers
+--echo *** Set up circular ring by schema A->B->C->D->A *** 
+--source include/circular_rpl_for_4_hosts_init.inc
+--echo
+
+# Preparing data.
+--echo *** Preparing data ***
+--connection master_a
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=MyISAM;
+CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
+--source include/circular_rpl_for_4_hosts_sync.inc
+--connection master_d
+--echo
+
+#
+# Testing
+#
+
+--echo *** Testing schema A->B->C->D->A ***
+--echo
+# insert data via all hosts
+--connection master_a
+INSERT INTO t1(b,c) VALUES('A',1);
+--sync_slave_with_master master_b
+INSERT INTO t1(b,c) VALUES('B',1);
+--sync_slave_with_master master_c
+INSERT INTO t1(b,c) VALUES('C',1);
+--sync_slave_with_master master_d
+INSERT INTO t1(b,c) VALUES('D',1);
+
+--source include/circular_rpl_for_4_hosts_sync.inc
+
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+--connection master_b
+SELECT 'Master B',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+--connection master_c
+SELECT 'Master C',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+--connection master_d
+SELECT 'Master D',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
+--echo
+
+--echo *** Testing schema A->B->D->A if C has failure ***
+--echo 
+--echo * Do failure for C and then make new connection B->D *
+# Do not replicate next event from C
+--connection master_d
+connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT2);
+STOP SLAVE;
+SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+disconnect slave;
+--connection master_c
+INSERT INTO t1 VALUES(6,'C',2);
+--save_master_pos
+--connection master_b
+INSERT INTO t1(b,c) VALUES('B',2);
+# Wait while C will stop.
+--connection master_c
+--let $slave_param= Slave_SQL_Running
+--let $slave_param_value= No
+--source include/wait_for_slave_param.inc
+--connection master_a
+INSERT INTO t1(b,c) VALUES('A',2);
+--connection master_d
+INSERT INTO t1(b,c) VALUES('D',2);
+
+
+# Sync all servers except C
+--connection master_b
+let $wait_condition= SELECT COUNT(*)=3 FROM t1 WHERE a > 4;
+--source include/wait_condition.inc
+
+--echo
+--echo * Data on servers (C failed) *
+# Masters C,D shouldn't have correct data
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_b
+SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_c
+SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_d
+SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--echo
+
+--echo * Reconfigure replication to schema A->B->C->A *
+# Exclude Master C 
+--connection master_c
+STOP SLAVE;
+--let $pos_c= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
+--let $file_c= query_get_value(SHOW SLAVE STATUS, Master_Log_File, 1)
+--connection master_d
+STOP SLAVE;
+--replace_result $SLAVE_MYPORT MASTER_B_PORT $file_c LOG_FILE $pos_c LOG_POS 
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT,master_user='root',master_log_file='$file_c',master_log_pos=$pos_c
+connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT2);
+START SLAVE;
+--source include/wait_for_slave_to_start.inc
+disconnect slave;
+--connection master_b
+--sync_slave_with_master master_d
+--echo
+
+--echo * Check data inserted before failure *
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_b
+SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_c
+SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--connection master_d
+SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
+--echo
+
+--echo * Check data inserted after failure *
+--connection master_a
+INSERT INTO t1(b,c) VALUES('A',3);
+--connection master_b
+INSERT INTO t1(b,c) VALUES('B',3);
+--connection master_d
+INSERT INTO t1(b,c) VALUES('D',3);
+--connection master_a  
+
+--sync_slave_with_master master_b
+--sync_slave_with_master master_d
+--sync_slave_with_master master_a
+--sync_slave_with_master master_b
+
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+--connection master_b
+SELECT 'Master B',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+--connection master_c
+SELECT 'Master C',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+--connection master_d
+SELECT 'Master D',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
+--connection master_a
+--echo
+
+--echo *** Testing restoring scheme A->B->C->D->A after failure ***
+--echo
+# Master D will ignore a next event from C so that event will not be 
+# distributed to other servers
+--echo * Remove wrong event from C and restore B->C->D *
+--connection master_d
+STOP SLAVE;
+--wait_for_slave_to_stop
+--connection master_c
+DELETE FROM t1 WHERE a = 6;
+START SLAVE;
+--connection master_b
+--sync_slave_with_master master_c
+RESET MASTER;
+--let $file_d= query_get_value(SHOW MASTER STATUS, File, 1)
+--let $pos_d= query_get_value(SHOW MASTER STATUS, Position, 1)
+--connection master_d
+RESET SLAVE;
+--replace_result $SLAVE_MYPORT1 MASTER_C_PORT $file_d LOG_FILE $pos_d LOG_POS 
+--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$SLAVE_MYPORT1,master_user='root',master_log_file='$file_d',master_log_pos=$pos_d
+START SLAVE;
+--connection master_c
+--sync_slave_with_master master_d
+--source include/circular_rpl_for_4_hosts_sync.inc
+
+--echo
+--echo * Check data inserted before restoring schema A->B->C->D->A *
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+--sync_slave_with_master master_b
+SELECT 'Master B',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+--sync_slave_with_master master_c
+SELECT 'Master C',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+--sync_slave_with_master master_d
+SELECT 'Master D',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
+--sync_slave_with_master master_a
+--echo
+
+--echo * Check data inserted after restoring schema A->B->C->D->A *
+--connection master_a
+INSERT INTO t1(b,c) VALUES('A',4);
+--connection master_b
+INSERT INTO t1(b,c) VALUES('B',4);
+--connection master_c
+INSERT INTO t1(b,c) VALUES('C',4);
+--connection master_d
+INSERT INTO t1(b,c) VALUES('D',4);
+--connection master_a
+
+--source include/circular_rpl_for_4_hosts_sync.inc
+
+--connection master_a
+SELECT 'Master A',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+--connection master_b
+SELECT 'Master B',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+--connection master_c
+SELECT 'Master C',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+--connection master_d
+SELECT 'Master D',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
+--connection master_a
+--echo
+
+--echo * Transactions with commits *
+# Testing mixing of transactions and regular inserts
+--connection master_a
+BEGIN;
+--connection master_c
+BEGIN;
+let $counter= 100;
+--connection master_a
+--disable_query_log
+while ($counter) {
+ --connection master_a
+ INSERT INTO t2(b,c) VALUES('A',1);
+ --connection master_b
+ INSERT INTO t2(b,c) VALUES('B',1);
+ --connection master_c
+ INSERT INTO t2(b,c) VALUES('C',1);
+ --connection master_d
+ INSERT INTO t2(b,c) VALUES('D',1);
+ dec $counter;
+}
+--connection master_a
+COMMIT;
+--connection master_c
+COMMIT;
+--connection master_a
+--enable_query_log
+
+
+--let $wait_condition= SELECT COUNT(*)=400 FROM t2 WHERE c = 1
+--connection master_a
+--source include/wait_condition.inc
+--connection master_b
+--source include/wait_condition.inc
+--connection master_c
+--source include/wait_condition.inc
+--connection master_d
+--source include/wait_condition.inc
+
+--connection master_a
+SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+--connection master_b
+SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+--connection master_c
+SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+--connection master_d
+SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
+--connection master_a
+--echo
+
+--echo * Transactions with rollbacks *
+# Testing mixing of transactions with rollback and regular inserts
+--connection master_a
+BEGIN;
+--connection master_c
+BEGIN;
+let $counter= 100;
+--connection master_a
+--disable_query_log
+while ($counter) {
+ --connection master_a
+ INSERT INTO t2(b,c) VALUES('A',2);
+ --connection master_b
+ INSERT INTO t2(b,c) VALUES('B',2);
+ --connection master_c
+ INSERT INTO t2(b,c) VALUES('C',2);
+ --connection master_d
+ INSERT INTO t2(b,c) VALUES('D',2);
+ dec $counter;
+}
+--connection master_a
+ROLLBACK;
+--connection master_c
+ROLLBACK;
+--connection master_a
+--enable_query_log
+
+--let $wait_condition= SELECT COUNT(*)=200 FROM t2 WHERE c = 2
+--connection master_a
+--source include/wait_condition.inc
+--connection master_b
+--source include/wait_condition.inc
+--connection master_c
+--source include/wait_condition.inc
+--connection master_d
+--source include/wait_condition.inc
+
+--connection master_a
+SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+--connection master_b
+SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+--connection master_c
+SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+--connection master_d
+SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
+--connection master_a
+
+--echo
+
+# Clean up
+--echo *** Clean up ***
+--connection master_a
+DROP TABLE t1,t2;
+--source include/circular_rpl_for_4_hosts_sync.inc
+
+--connection master_a
+STOP SLAVE;
+RESET SLAVE;
+--connection master_b
+STOP SLAVE;
+RESET SLAVE;
+--connection master_c
+STOP SLAVE;
+RESET SLAVE;
+--connection master_d
+STOP SLAVE;
+RESET SLAVE;
diff -Nrup a/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,101 @@
+STOP SLAVE;
+STOP SLAVE;
+STOP SLAVE;
+STOP SLAVE;
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+RESET MASTER;
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+RESET MASTER;
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+RESET MASTER;
+DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9;
+RESET MASTER;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=MASTER_MYPORT,master_user='root';
+START SLAVE;
+RESET SLAVE;
+CHANGE MASTER TO master_host='127.0.0.1',master_port=SLAVE_MYPORT1,master_user='root';
+START SLAVE;
+
+*** Check server_id of mysqld servers ***
+SHOW VARIABLES LIKE "server_id";
+Variable_name	Value
+server_id	1
+SET auto_increment_offset = 1;
+SET auto_increment_increment = 2;
+SHOW VARIABLES LIKE "server_id";
+Variable_name	Value
+server_id	1
+SET auto_increment_offset = 1;
+SET auto_increment_increment = 2;
+SHOW VARIABLES LIKE "server_id";
+Variable_name	Value
+server_id	2
+SET auto_increment_offset = 2;
+SET auto_increment_increment = 2;
+SHOW VARIABLES LIKE "server_id";
+Variable_name	Value
+server_id	2
+SET auto_increment_offset = 2;
+SET auto_increment_increment = 2;
+
+*** Preparing data ***
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=ndb;
+
+*** Basic testing  ***
+Insert rows via all hosts
+Check data on both clusters 
+* Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 1 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+10	190	master
+10	210	master1
+10	200	slave
+10	220	slave1
+* Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 1 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+10	190	master
+10	210	master1
+10	200	slave
+10	220	slave1
+
+*** Transaction testing ***
+BEGIN;
+BEGIN;
+COMMIT;
+COMMIT;
+Check data on both clusters 
+* Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 2 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+100	23900	master
+100	24100	master1
+100	24000	slave
+100	24200	slave1
+* Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 2 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+100	23900	master
+100	24100	master1
+100	24000	slave
+100	24200	slave1
+
+BEGIN;
+BEGIN;
+ROLLBACK;
+ROLLBACK;
+Check data on both clusters 
+* Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+100	64100	master1
+100	64000	slave
+* Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b;
+COUNT(*)	SUM(a)	b
+100	64100	master1
+100	64000	slave
+
+DELETE FROM t1;
+
diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt	2008-04-25 00:41:02 +04:00
@@ -0,0 +1 @@
+--slave-num=2 --server-id=1 --log-bin -log-slave-updates
diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt	2008-04-25 00:41:02 +04:00
@@ -0,0 +1 @@
+--server-id=2 --log-bin --log-slave-updates --skip-slave-start
diff -Nrup a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test	2008-04-25 00:41:02 +04:00
@@ -0,0 +1,179 @@
+#############################################################
+# Author:  Serge Kozlov <skozlov@stripped>
+# Date:    03/17/2008
+# Purpose: Testing cluster circular replication based on two
+# independent channels between two clusters
+#############################################################
+--source include/have_ndb.inc
+--source include/ndb_master-slave_2ch.inc
+--echo
+
+# Check server_id and set auto_increment_* variables
+--echo *** Check server_id of mysqld servers ***
+--connection master
+SHOW VARIABLES LIKE "server_id";
+SET auto_increment_offset = 1;
+SET auto_increment_increment = 2;
+--connection master1
+SHOW VARIABLES LIKE "server_id";
+SET auto_increment_offset = 1;
+SET auto_increment_increment = 2;
+--connection slave
+SHOW VARIABLES LIKE "server_id";
+SET auto_increment_offset = 2;
+SET auto_increment_increment = 2;
+--connection slave1
+SHOW VARIABLES LIKE "server_id";
+SET auto_increment_offset = 2;
+SET auto_increment_increment = 2;
+--echo
+
+# Preparing data.
+--echo *** Preparing data ***
+--connection master
+CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=ndb;
+
+let $wait_binlog_event= CREATE TABLE t1;
+--source include/wait_for_binlog_event.inc
+--connection master1
+--source include/wait_for_binlog_event.inc
+--connection slave
+--source include/wait_for_binlog_event.inc
+--connection slave1
+--source include/wait_for_binlog_event.inc
+--echo
+
+#
+# Testing
+#
+
+--echo *** Basic testing  ***
+# insert data via all hosts
+--echo Insert rows via all hosts
+--disable_query_log
+let $counter= 10;
+while ($counter) {
+ --connection master
+ INSERT INTO t1(b,c) VALUES('master',1);
+ --connection master1
+ INSERT INTO t1(b,c) VALUES('master1',1);
+ --connection slave
+ INSERT INTO t1(b,c) VALUES('slave',1);
+ --connection slave1
+ INSERT INTO t1(b,c) VALUES('slave1',1);
+ dec $counter;
+}
+--connection master
+--enable_query_log
+
+# Wait replication between clusters
+let $wait_condition= SELECT COUNT(*)=40 FROM t1 WHERE c = 1;
+--source include/wait_condition.inc
+--connection slave
+--source include/wait_condition.inc
+
+# Check data
+--echo Check data on both clusters 
+--connection master
+--echo * Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 1 GROUP BY b ORDER BY b;
+--connection slave
+--echo * Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 1 GROUP BY b ORDER BY b;
+--echo
+
+--echo *** Transaction testing ***
+# Start transaction for one mysqld and do mass of inserts for other.
+# Do it for for both clusters
+
+--connection master
+BEGIN;
+--connection slave1
+BEGIN;
+let $counter= 100;
+--connection master
+--disable_query_log
+while ($counter) {
+ --connection master
+ INSERT INTO t1(b,c) VALUES('master',2);
+ --connection master1
+ INSERT INTO t1(b,c) VALUES('master1',2);
+ --connection slave
+ INSERT INTO t1(b,c) VALUES('slave',2);
+ --connection slave1
+ INSERT INTO t1(b,c) VALUES('slave1',2);
+ dec $counter;
+}
+--connection master
+--enable_query_log
+COMMIT;
+--connection slave1
+COMMIT;
+
+# Wait replication between clusters
+--connection master
+let $wait_condition= SELECT COUNT(*)=400 FROM t1 WHERE c = 2;
+--source include/wait_condition.inc
+--connection slave
+--source include/wait_condition.inc
+
+--echo Check data on both clusters 
+--connection master
+--echo * Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 2 GROUP BY b ORDER BY b;
+--connection slave
+--echo * Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 2 GROUP BY b ORDER BY b;
+--echo
+
+# Start transaction and then roll back
+
+--connection master
+BEGIN;
+--connection slave1
+BEGIN;
+let $counter= 100;
+--connection master
+--disable_query_log
+while ($counter) {
+ --connection master
+ INSERT INTO t1(b,c) VALUES('master',3);
+ --connection master1
+ INSERT INTO t1(b,c) VALUES('master1',3);
+ --connection slave
+ INSERT INTO t1(b,c) VALUES('slave',3);
+ --connection slave1
+ INSERT INTO t1(b,c) VALUES('slave1',3);
+ dec $counter;
+}
+--connection master
+--enable_query_log
+ROLLBACK;
+--connection slave1
+ROLLBACK;
+
+# Wait replication between clusters
+--connection master
+let $wait_condition= SELECT COUNT(*)=200 FROM t1 WHERE c = 3;
+--source include/wait_condition.inc
+--connection slave
+--source include/wait_condition.inc
+
+--echo Check data on both clusters 
+--connection master
+--echo * Cluster A *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b;
+--connection slave
+--echo * Cluster B *
+SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b;
+--echo
+
+# Clean up
+--connection master
+DELETE FROM t1;
+--connection slave
+let $wait_condition= SELECT COUNT(*)=0 FROM t1;
+--source include/wait_condition.inc
+--echo
+
+# End of test 5.1
Thread
bk commit into 5.1 tree (skozlov:1.2567)Serge Kozlov24 Apr