~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#############################################################
 
2
# Author: Serge Kozlov <skozlov@mysql.com>
 
3
# Date:   03/12/2008
 
4
# Purpose: Testing circular replication based on schema 
 
5
# A->B->C->D->A with using AUTO_INCREMENT_INCREMENT,
 
6
# AUTO_INCREMENT_OFFSET variables and failover
 
7
#############################################################
 
8
--source include/have_innodb.inc
 
9
 
 
10
# Set up circular ring and new names for servers
 
11
--echo *** Set up circular ring by schema A->B->C->D->A *** 
 
12
--source include/circular_rpl_for_4_hosts_init.inc
 
13
--echo
 
14
 
 
15
# Preparing data.
 
16
--echo *** Preparing data ***
 
17
--connection master_a
 
18
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=MyISAM;
 
19
CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT, b VARCHAR(100), c INT NOT NULL, PRIMARY KEY(a)) ENGINE=InnoDB;
 
20
--source include/circular_rpl_for_4_hosts_sync.inc
 
21
--connection master_d
 
22
--echo
 
23
 
 
24
#
 
25
# Testing
 
26
#
 
27
 
 
28
--echo *** Testing schema A->B->C->D->A ***
 
29
--echo
 
30
# insert data via all hosts
 
31
--connection master_a
 
32
INSERT INTO t1(b,c) VALUES('A',1);
 
33
--sync_slave_with_master master_b
 
34
INSERT INTO t1(b,c) VALUES('B',1);
 
35
--sync_slave_with_master master_c
 
36
INSERT INTO t1(b,c) VALUES('C',1);
 
37
--sync_slave_with_master master_d
 
38
INSERT INTO t1(b,c) VALUES('D',1);
 
39
 
 
40
--source include/circular_rpl_for_4_hosts_sync.inc
 
41
 
 
42
--connection master_a
 
43
SELECT 'Master A',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
 
44
--connection master_b
 
45
SELECT 'Master B',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
 
46
--connection master_c
 
47
SELECT 'Master C',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
 
48
--connection master_d
 
49
SELECT 'Master D',a,b FROM t1 WHERE c = 1 ORDER BY a,b;
 
50
--echo
 
51
 
 
52
--echo *** Testing schema A->B->D->A if C has failure ***
 
53
--echo 
 
54
--echo * Do failure for C and then make new connection B->D *
 
55
# Do not replicate next event from C
 
56
--connection master_d
 
57
connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT2);
 
58
STOP SLAVE;
 
59
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
 
60
source include/start_slave.inc;
 
61
disconnect slave;
 
62
--connection master_c
 
63
INSERT INTO t1 VALUES(6,'C',2);
 
64
--save_master_pos
 
65
--connection master_b
 
66
INSERT INTO t1(b,c) VALUES('B',2);
 
67
# Wait while C will stop.
 
68
--connection master_c
 
69
source include/wait_for_slave_sql_to_stop.inc;
 
70
--connection master_a
 
71
INSERT INTO t1(b,c) VALUES('A',2);
 
72
--connection master_d
 
73
INSERT INTO t1(b,c) VALUES('D',2);
 
74
 
 
75
 
 
76
# Sync all servers except C
 
77
--connection master_b
 
78
let $wait_condition= SELECT COUNT(*)=3 FROM t1 WHERE a > 4;
 
79
--source include/wait_condition.inc
 
80
 
 
81
--echo
 
82
--echo * Data on servers (C failed) *
 
83
# Masters C,D shouldn't have correct data
 
84
--connection master_a
 
85
SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
86
--connection master_b
 
87
SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
88
--connection master_c
 
89
SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
90
--connection master_d
 
91
SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
92
--echo
 
93
 
 
94
--echo * Reconfigure replication to schema A->B->D->A *
 
95
# Exclude Master C 
 
96
--connection master_c
 
97
STOP SLAVE;
 
98
--let $pos_c= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
 
99
--let $file_c= query_get_value(SHOW SLAVE STATUS, Master_Log_File, 1)
 
100
--connection master_d
 
101
STOP SLAVE;
 
102
--replace_result $SLAVE_MYPORT MASTER_B_PORT $file_c LOG_FILE $pos_c LOG_POS 
 
103
--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
 
104
connect(slave,127.0.0.1,root,,test,$SLAVE_MYPORT2);
 
105
source include/start_slave.inc;
 
106
disconnect slave;
 
107
--connection master_b
 
108
--sync_slave_with_master master_d
 
109
--sync_slave_with_master master_a
 
110
--echo
 
111
 
 
112
--echo * Check data inserted before failure *
 
113
--connection master_a
 
114
SELECT 'Master A',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
115
--connection master_b
 
116
SELECT 'Master B',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
117
--connection master_c
 
118
SELECT 'Master C',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
119
--connection master_d
 
120
SELECT 'Master D',a,b FROM t1 WHERE c = 2 ORDER BY a,b;
 
121
--echo
 
122
 
 
123
--echo * Check data inserted after failure *
 
124
--connection master_a
 
125
INSERT INTO t1(b,c) VALUES('A',3);
 
126
--connection master_b
 
127
INSERT INTO t1(b,c) VALUES('B',3);
 
128
--connection master_d
 
129
INSERT INTO t1(b,c) VALUES('D',3);
 
130
connection master_a;
 
131
 
 
132
--sync_slave_with_master master_b
 
133
--sync_slave_with_master master_d
 
134
--sync_slave_with_master master_a
 
135
--sync_slave_with_master master_b
 
136
 
 
137
--connection master_a
 
138
SELECT 'Master A',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
 
139
--connection master_b
 
140
SELECT 'Master B',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
 
141
--connection master_c
 
142
SELECT 'Master C',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
 
143
--connection master_d
 
144
SELECT 'Master D',a,b FROM t1 WHERE c = 3 ORDER BY a,b;
 
145
--connection master_a
 
146
--echo
 
147
 
 
148
--echo *** Testing restoring scheme A->B->C->D->A after failure ***
 
149
--echo
 
150
# Master D will ignore a next event from C so that event will not be 
 
151
# distributed to other servers
 
152
--echo * Remove wrong event from C and restore B->C->D *
 
153
--connection master_d
 
154
source include/stop_slave.inc;
 
155
--connection master_c
 
156
DELETE FROM t1 WHERE a = 6;
 
157
START SLAVE;
 
158
--connection master_b
 
159
--sync_slave_with_master master_c
 
160
RESET MASTER;
 
161
--let $file_d= query_get_value(SHOW MASTER STATUS, File, 1)
 
162
--let $pos_d= query_get_value(SHOW MASTER STATUS, Position, 1)
 
163
--connection master_d
 
164
RESET SLAVE;
 
165
--replace_result $SLAVE_MYPORT1 MASTER_C_PORT $file_d LOG_FILE $pos_d LOG_POS 
 
166
--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
 
167
START SLAVE;
 
168
--connection master_c
 
169
--sync_slave_with_master master_d
 
170
--source include/circular_rpl_for_4_hosts_sync.inc
 
171
 
 
172
--echo
 
173
--echo * Check data inserted before restoring schema A->B->C->D->A *
 
174
--connection master_a
 
175
SELECT 'Master A',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
 
176
--sync_slave_with_master master_b
 
177
SELECT 'Master B',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
 
178
--sync_slave_with_master master_c
 
179
SELECT 'Master C',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
 
180
--sync_slave_with_master master_d
 
181
SELECT 'Master D',a,b FROM t1 WHERE c IN (2,3) ORDER BY a,b;
 
182
--sync_slave_with_master master_a
 
183
--echo
 
184
 
 
185
--echo * Check data inserted after restoring schema A->B->C->D->A *
 
186
--connection master_a
 
187
INSERT INTO t1(b,c) VALUES('A',4);
 
188
--connection master_b
 
189
INSERT INTO t1(b,c) VALUES('B',4);
 
190
--connection master_c
 
191
INSERT INTO t1(b,c) VALUES('C',4);
 
192
--connection master_d
 
193
INSERT INTO t1(b,c) VALUES('D',4);
 
194
--connection master_a
 
195
 
 
196
--source include/circular_rpl_for_4_hosts_sync.inc
 
197
 
 
198
--connection master_a
 
199
SELECT 'Master A',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
 
200
--connection master_b
 
201
SELECT 'Master B',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
 
202
--connection master_c
 
203
SELECT 'Master C',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
 
204
--connection master_d
 
205
SELECT 'Master D',a,b FROM t1 WHERE c = 4 ORDER BY a,b;
 
206
--connection master_a
 
207
--echo
 
208
 
 
209
--echo * Transactions with commits *
 
210
# Testing mixing of transactions and regular inserts
 
211
--connection master_a
 
212
BEGIN;
 
213
--connection master_c
 
214
BEGIN;
 
215
let $counter= 100;
 
216
--connection master_a
 
217
--disable_query_log
 
218
while ($counter) {
 
219
 --connection master_a
 
220
 INSERT INTO t2(b,c) VALUES('A',1);
 
221
 --connection master_b
 
222
 INSERT INTO t2(b,c) VALUES('B',1);
 
223
 --connection master_c
 
224
 INSERT INTO t2(b,c) VALUES('C',1);
 
225
 --connection master_d
 
226
 INSERT INTO t2(b,c) VALUES('D',1);
 
227
 dec $counter;
 
228
}
 
229
--connection master_a
 
230
COMMIT;
 
231
--connection master_c
 
232
COMMIT;
 
233
--connection master_a
 
234
--enable_query_log
 
235
 
 
236
--source include/circular_rpl_for_4_hosts_sync.inc
 
237
 
 
238
--connection master_a
 
239
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
 
240
--connection master_b
 
241
SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
 
242
--connection master_c
 
243
SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
 
244
--connection master_d
 
245
SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 1 GROUP BY b ORDER BY b;
 
246
--connection master_a
 
247
--echo
 
248
 
 
249
--echo * Transactions with rollbacks *
 
250
# Testing mixing of transactions with rollback and regular inserts
 
251
--connection master_a
 
252
BEGIN;
 
253
--connection master_c
 
254
BEGIN;
 
255
let $counter= 100;
 
256
--connection master_a
 
257
--disable_query_log
 
258
while ($counter) {
 
259
 --connection master_a
 
260
 INSERT INTO t2(b,c) VALUES('A',2);
 
261
 --connection master_b
 
262
 INSERT INTO t2(b,c) VALUES('B',2);
 
263
 --connection master_c
 
264
 INSERT INTO t2(b,c) VALUES('C',2);
 
265
 --connection master_d
 
266
 INSERT INTO t2(b,c) VALUES('D',2);
 
267
 dec $counter;
 
268
}
 
269
--connection master_a
 
270
ROLLBACK;
 
271
--connection master_c
 
272
ROLLBACK;
 
273
--connection master_a
 
274
--enable_query_log
 
275
 
 
276
--source include/circular_rpl_for_4_hosts_sync.inc
 
277
 
 
278
--connection master_a
 
279
SELECT 'Master A',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
 
280
--connection master_b
 
281
SELECT 'Master B',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
 
282
--connection master_c
 
283
SELECT 'Master C',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
 
284
--connection master_d
 
285
SELECT 'Master D',b,COUNT(*) FROM t2 WHERE c = 2 GROUP BY b ORDER BY b;
 
286
--connection master_a
 
287
 
 
288
--echo
 
289
 
 
290
# Clean up
 
291
--echo *** Clean up ***
 
292
--connection master_a
 
293
DROP TABLE t1,t2;
 
294
--source include/circular_rpl_for_4_hosts_sync.inc
 
295
 
 
296
--connection master_a
 
297
STOP SLAVE;
 
298
RESET SLAVE;
 
299
--connection master_b
 
300
STOP SLAVE;
 
301
RESET SLAVE;
 
302
--connection master_c
 
303
STOP SLAVE;
 
304
RESET SLAVE;
 
305
--connection master_d
 
306
STOP SLAVE;
 
307
RESET SLAVE;