1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
# ==== Purpose ====
#
# Setup: circular replication on four hosts, i.e., topology
# server_1 -> server_2 -> server_3 -> server_4 -> server_1
#
# Tested properties:
# - Correctly configured autoinc works.
# - Manual failover works.
#
# ==== Related bugs and worklogs ====
#
# WL#3754
# BUG#49978
--source include/not_group_replication_plugin.inc
# Use wait_for_slave_to_(start|stop) for current connections
let $keep_connection= 1;
# Set up circular ring and new names for servers
--echo *** Set up circular replication on four servers ***
--let $rpl_topology= 1->2->3->4->1
--source include/rpl_init.inc
--echo
#set auto inc variables at each server
--let $_rpl_server= $rpl_server_count
while ($_rpl_server)
{
--let $rpl_connection_name= server_$_rpl_server
--source include/rpl_connection.inc
eval SET auto_increment_increment= $rpl_server_count;
eval SET auto_increment_offset= $_rpl_server;
--dec $_rpl_server
}
# Preparing data.
--echo *** Preparing data ***
--connection server_1
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
--source include/rpl_sync.inc
--connection server_4
call mtr.add_suppression("The replica coordinator and worker threads are stopped, possibly leaving data in inconsistent state");
call mtr.add_suppression("Replica SQL: Coordinator thread of multi-threaded replica is exiting seeing a failed Worker to apply an event");
call mtr.add_suppression("Replica worker thread has failed to apply an event");
--connection server_3
call mtr.add_suppression("Replica SQL.*Duplicate entry .6. for key t1.PRIMARY.* Error_code: MY-001062");
--echo
#
# Testing
#
--echo * Transactions with commits *
# Testing mixing of transactions and regular inserts
--connection server_1
BEGIN;
--connection server_3
BEGIN;
let $counter= 100;
--connection server_1
--disable_query_log
while ($counter) {
--connection server_1
INSERT INTO t2(b,c) VALUES('A',1);
--connection server_2
INSERT INTO t2(b,c) VALUES('B',1);
--connection server_3
INSERT INTO t2(b,c) VALUES('C',1);
--connection server_4
INSERT INTO t2(b,c) VALUES('D',1);
dec $counter;
}
--connection server_1
COMMIT;
--connection server_3
COMMIT;
--connection server_1
--enable_query_log
--source include/rpl_sync.inc
--connection server_1
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
--connection server_2
SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
--connection server_3
SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
--connection server_4
SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
--connection server_1
--echo
--echo * Transactions with rollbacks *
# Testing mixing of transactions with rollback and regular inserts
--connection server_1
BEGIN;
--connection server_3
BEGIN;
let $counter= 100;
--connection server_1
--disable_query_log
while ($counter) {
--connection server_1
INSERT INTO t2(b,c) VALUES('A',2);
--connection server_2
INSERT INTO t2(b,c) VALUES('B',2);
--connection server_3
INSERT INTO t2(b,c) VALUES('C',2);
--connection server_4
INSERT INTO t2(b,c) VALUES('D',2);
dec $counter;
}
--connection server_1
ROLLBACK;
--connection server_3
ROLLBACK;
--connection server_1
--enable_query_log
--source include/rpl_sync.inc
--connection server_1
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
--connection server_2
SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
--connection server_3
SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
--connection server_4
SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
--connection server_1
--echo
# Clean up
--echo *** Clean up ***
--connection server_1
DROP TABLE t2;
--source include/rpl_end.inc
|