List:Commits« Previous MessageNext Message »
From:Serge Kozlov Date:March 31 2008 3:49pm
Subject:Re: bk commit into 5.1 tree (skozlov:1.2567), please review
View as plain text  
Hi, Sven

Thanks for review, see my comments marked as "skozlov"

Sven Sandberg wrote:
> Hi Serge,
> 
> Thanks for implementing circular rpl testing! The code basically seems 
> to work, but I think it needs a few high-level descriptions to be easy 
> to use for developers, and some more things. See below.
> 
> 
> 
> Serge Kozlov wrote:
> [...]
>> 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-03-20 23:42:51 +03:00
>> @@ -0,0 +1,130 @@
>> +#############################################################
>> +#
>> +# Author:  Serge Kozlov <skozlov@stripped>
>> +# Date:    03/11/2008
> 
> I think author and date should not be included - you can use 'bk 
> annotate' to find out. Author and time usually change over time.

skozlov:
It is impossible when tests are part of binary distribution so I add 
additional info at beginning of test. Also sometimes tests are not in bk 
and header helps in this case.

> 
>> +# Purpose: Set up circular replication based on schema
>> +# A->B->C->D->A
> 
> Please be more explicit: explain that A, B, C, D are mysql servers.
> 
>> +#
>> +# 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]
> 
> Please be more explicit: say that the file sets up connections named 
> master_[abcd] and that the log files for the connections are as in the 
> table above. Please avoid the words "new" and "old": in one year 
> everything will be old so it will be confusing :-)


> Also, please explain the side effects of the file: afterwards, four 
> servers have started, replicating in a circle, and they will all be 
> running as slaves, but may not be sync'ed. The current connection is to 
> master_d.
> 
> I still think that using master_[1234] would be more flexible than 
> master_[abcd]. In the future, we may want to extend the testing 
> framework to support things like:
> 
>   let $i=$number_of_hosts;
>   while ($i) {
>     connection master_$i;
>     insert into table t1 values ($i);
>     dec $i;
>   }
> 
> If we have numbers instead of letters now, we don't have to rewrite 
> tests then. I don't think it will be difficult for users to understand 
> that hosts are identified by numbers even if some documentation uses 
> letters (the documentation does not explicitly talk about the test 
> language).
> 
> Of course, you implement. I will not insist on using numbers if you 
> strongly feel that [abcd] are better. These are only my arguments for 
> using numbers.

skozlov: If want to use master_[0-9] then it possible to add second 
connection to each server with such name :)

> 
>> +#
>> +#############################################################
>> +--source include/master-slave.inc
> 
> I think master-slave.inc can be removed (as discussed on IRC).
> 
>> +
>> +#
>> +# 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);
> 
> The test manual on 
>
> https://inside.mysql.com/wiki/MySQLTestManual#connect_.28.3Ccon_name.3E.2C_.3Chost.3E.2C_.3Cuser.3E.2C_.3Cpass.3E.2C_.3Cdatabase.3E.2C_.3Cport.3E.2C_.3Csocket.3E_.29
> 
> says that there must be a space between 'connect' and '('. If the manual 
> is correct, please add a space. If the manual is not correct, please 
> update it. (I know you are probably not in fault for the manual, but 
> since you know this part of the code, it would be really nice to have it 
> updated).
> 
>> +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-03-20 23:42:51 +03:00
>> @@ -0,0 +1,23 @@
>> +#############################################################
>> +#
>> +# Author:  Serge Kozlov <skozlov@stripped>
>> +# Date:    03/11/2008
> 
> Please remove author and date (see above).
> 
>> +# Purpose: Sync all hosts for circular replication based on
>> +# schema A->B->C->D->A
> 
> Please write usage instructions: You need to do 
> 'source/circular_rpl_for_4_hosts.inc' first. After that, it can be 
> called at any time and with current connection pointing to any host 
> (unlike sync_slave_with_master which assumes you are on master). It will 
> ensure that master_a, master_b, master_c, master_d are all synchronized.
> 
> Please write side effects: afterwards, the test client will be connected 
> to master_a. (Or even better: can you remove this side effect?)
> 
>> +#
>> +# 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-03-20 
>> 23:42:51 +03:00
>> @@ -0,0 +1,136 @@
>> +#############################################################
>> +# Author:  Serge Kozlov <skozlov@stripped>
>> +# Date:    03/17/2008
> 
> Please remove author and date (see above).
> 
>> +# 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-03-20 23:42:51 +03: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-03-20 23:42:51 +03: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-03-20 23:42:51 +03: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-03-20 23:42:51 +03:00
>> @@ -0,0 +1,328 @@
>> +#############################################################
>> +# Author: Serge Kozlov <skozlov@stripped>
>> +# Date:   03/12/2008
> 
> Please remove author and date (see above).
> 
>> +# Purpose: Testing circular replication based on schema
>> +# A->B->C->D->A with using AUTO_INCREMENT_INCREMENT,
>> +# AUTO_INCREMENT_OFFSET variables and failover
> 
> Very good that you state the purpuse of the test. Please also give a 
> short high-level description of *how* the test is done. I.e., how do you 
> simulate that master_c fails, and how is failover done.

skozlov: OK

> 
>> +#############################################################
>> +--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;
>> +}
> 
> Please use two spaces indentation.
> 
>> +--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
> 
> Why not source include/circular_rpl_for_4_hosts_sync.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
> 
> I'd suggest to use include/diff_tables.inc to compare the tables on all 
> servers instead. (It needs to be augmented to understand more servers 
> than "master" and "slave", but that's very easy.)

Skozlov: Not for all cases there it is possible because failure add diff 
to tables

> 
>> +--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;
>> +}
> 
> Please use two spaces indentation.
> 
>> +--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
> 
> Why not source include/circular_rpl_for_4_hosts_sync.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-03-20 23:42:52 +03: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-03-20 23:42:52 +03: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-03-20 23:42:52 +03: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-03-20 23:42:52 +03:00
>> @@ -0,0 +1,179 @@
>> +#############################################################
>> +# Author:  Serge Kozlov <skozlov@stripped>
>> +# Date:    03/17/2008
> 
> Please remove author and date (see above).
> 
>> +# 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;
> 
> Please use two spaces indentation.
> 
>> +}
>> +--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;
> 
> Please use two spaces indentation.
> 
>> +}
>> +--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
> 
> Why not 'sync_slave_with_master master' and 'sync_slave_with_master slave'?
skozlov: there is an issue to sync clusters. NDB Injector needs a time 
for adding event to mysqqld binlog so sync_slave_with_master have no 
effect for that
> 
>> +
>> +--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;
> 
> Please use two spaces indentation.
> 
>> +}
>> +--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
> 
> Why not 'sync_slave_with_master master' and 'sync_slave_with_master slave'?
> 
>> +
>> +--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
> 
> I'd suggest to do source include/diff_tables.inc instead.
> 
>> +
>> +# 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
> 


-- 
Serge Kozlov, QA Developer
MySQL AB, Moscow, Russia, www.mysql.com
Office:

Are you MySQL certified?  www.mysql.com/certification
Thread
Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSven Sandberg31 Mar
  • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSerge Kozlov31 Mar
    • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewIngo Strüwing3 Apr
      • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSerge Kozlov3 Apr
        • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewIngo Strüwing3 Apr
          • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSerge Kozlov3 Apr
      • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSven Sandberg3 Apr
    • Re: bk commit into 5.1 tree (skozlov:1.2567), please reviewSven Sandberg3 Apr