~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

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

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# WL#5569 MTS
 
3
#
 
4
# The test verifies correctness of DDL Query event parallelization
 
5
#
 
6
 
 
7
 
 
8
--source include/master-slave.inc
 
9
--source include/have_binlog_format_statement.inc
 
10
 
 
11
 
 
12
# restart in Parallel
 
13
 
 
14
let $workers= 4;
 
15
 
 
16
connection slave;
 
17
 
 
18
source include/stop_slave.inc;
 
19
set @save.slave_parallel_workers= @@global.slave_parallel_workers;
 
20
eval set @@global.slave_parallel_workers= $workers;
 
21
 
 
22
# Note, the number of db:s should be greater than MAX_DBS_IN_QUERY_MTS
 
23
# in order to satisfy to the over-max final test.
 
24
let $dbs= 32;
 
25
let $tables= 8;
 
26
let $queries= `select $dbs*$tables * 8`;
 
27
 
 
28
#
 
29
# D1. CREATE/DROP database
 
30
#
 
31
#
 
32
# D2. CREATE/DROP/ALTER/RENAME table
 
33
#
 
34
 
 
35
--disable_query_log
 
36
 
 
37
let $n= $dbs;
 
38
while ($n)
 
39
{
 
40
  connection master;
 
41
  eval create database d$n;
 
42
 
 
43
  let $m= $tables;
 
44
  while ($m)
 
45
  {
 
46
     eval create table d$n.t$m (a int);
 
47
     eval select round(rand()*$tables) into @var;
 
48
     eval insert into d$n.t$m values (@var);
 
49
 
 
50
     dec $m;
 
51
  }
 
52
  dec $n;
 
53
 
 
54
  connection master1;
 
55
  eval create database d$n;
 
56
 
 
57
  let $m= $tables;
 
58
  while ($m)
 
59
  {
 
60
     eval create table d$n.t$m (a int);
 
61
     eval select round(rand()*$tables) into @var;
 
62
     eval insert into d$n.t$m values (@var);
 
63
 
 
64
     dec $m;
 
65
  }
 
66
  dec $n;
 
67
}
 
68
 
 
69
 
 
70
let $k= $queries;
 
71
 
 
72
while ($k)
 
73
{
 
74
   let $n_1 = `select floor(rand()*$dbs) + 1`;
 
75
   let $n_2 = `select floor(rand()*$dbs) + 1`;
 
76
   let $n1_1= `select floor(rand()*$dbs) + 1`;
 
77
   let $n1_2= `select floor(rand()*$dbs) + 1`;
 
78
   let $m= `select floor(rand()*$tables) + 1`;
 
79
 
 
80
   --error 0,ER_TABLE_EXISTS_ERROR
 
81
   eval rename table d$n_1.t$m to d$n1_1.t$m, d$n_2.t$m to d$n1_2.t$m;
 
82
   --error 0,ER_TABLE_EXISTS_ERROR
 
83
   eval rename table d$n1_1.t$m to d$n_1.t$m,  d$n1_2.t$m to d$n_2.t$m;
 
84
 
 
85
   dec $k;
 
86
}
 
87
 
 
88
--enable_query_log
 
89
 
 
90
#
 
91
# D3. CREATE/DROP Stored Proc, Stored Func, Trigger, Func
 
92
 
 
93
connection master;
 
94
 
 
95
let $n= $dbs;
 
96
# n'th db tables won't have any trigger to avoid circular dependency
 
97
let $n1= $n;
 
98
dec $n1;
 
99
 
 
100
--disable_query_log
 
101
 
 
102
while ($n1)
 
103
{
 
104
  let $m= $tables;
 
105
 
 
106
  while ($m)
 
107
  {
 
108
     eval create trigger `d$n1`.`trg_t$m` before insert on `d$n1`.`t$m` for each row insert into `d$n`.`t$m` values(1);
 
109
 
 
110
     delimiter |;
 
111
 
 
112
     eval create function `d$n`.`func_$m` (a int) returns int
 
113
          begin
 
114
          insert into `d$n`.`t$m` values(1);
 
115
          return 1;
 
116
          end|
 
117
 
 
118
     eval create procedure `d$n`.`proc_$m`(a int)
 
119
          begin
 
120
          insert into `d$n`.`t$m` values(1);
 
121
          end|
 
122
          
 
123
     delimiter ;|
 
124
 
 
125
     dec $m;
 
126
  }
 
127
  dec $n;
 
128
  dec $n1;
 
129
}
 
130
 
 
131
#
 
132
# D3. CREATE/ALTER/DROP event
 
133
#
 
134
 
 
135
CREATE EVENT d1.e_1 on schedule every '50:20:12:45' day_second do select 1;
 
136
ALTER EVENT d1.e_1 RENAME to d2.e_2;
 
137
DROP EVENT d2.e_2;
 
138
 
 
139
#
 
140
# D4. CREATE/DROP view
 
141
#
 
142
 
 
143
CREATE VIEW d1.v_1 AS SELECT 1;
 
144
CREATE VIEW d2.v_2 AS SELECT 1;
 
145
DROP VIEW d1.v_1, d2.v_2;
 
146
 
 
147
--enable_query_log
 
148
 
 
149
 
 
150
#
 
151
# Run it on slave;
 
152
#
 
153
 
 
154
connection slave;
 
155
source include/start_slave.inc;
 
156
 
 
157
connection master;
 
158
sync_slave_with_master;
 
159
 
 
160
#
 
161
# Consistency check
 
162
#
 
163
 
 
164
let $n = $dbs;
 
165
while($n)
 
166
{
 
167
  let $m= $tables;
 
168
  while ($m)
 
169
  {
 
170
    let $diff_tables=master:d$n.t$m, slave:d$n.t$m;
 
171
    source include/diff_tables.inc;
 
172
    dec $m;
 
173
  }
 
174
  dec $n;
 
175
}
 
176
 
 
177
#
 
178
# Finally, over-the-max-limit updated db:s
 
179
#
 
180
 
 
181
connection master;
 
182
 
 
183
# Prepare the test with dropping the triggers
 
184
 
 
185
let $n= $dbs;
 
186
# n'th db tables won't have any trigger to avoid circular dependency
 
187
let $n1= $n;
 
188
dec $n1;
 
189
 
 
190
--disable_query_log
 
191
 
 
192
while ($n1)
 
193
{
 
194
  let $m= $tables;
 
195
 
 
196
  while ($m)
 
197
  {
 
198
     eval drop trigger `d$n1`.`trg_t$m`;
 
199
 
 
200
     dec $m;
 
201
  }
 
202
  dec $n;
 
203
  dec $n1;
 
204
}
 
205
 
 
206
let $n1= $dbs;
 
207
dec $n1;
 
208
let $n2= $n1;
 
209
dec $n2;
 
210
let $tables_2_rename= ;
 
211
#let $m= `select floor(rand()*$tables) + 1`;
 
212
let $m= `select floor($tables/2)`;
 
213
 
 
214
while ($n2)
 
215
{
 
216
    let $tables_2_rename= $tables_2_rename d$n1.t$m to d$n2.t$m ,;
 
217
    eval drop table d$n2.t$m;
 
218
    dec $n1;
 
219
    dec $n2;
 
220
}
 
221
 
 
222
 
 
223
let $n= $dbs;
 
224
let $n1= $n;
 
225
dec $n1;
 
226
 
 
227
--disable_warnings
 
228
# The following query will leave so many warnings as many extra db pairs
 
229
eval rename table $tables_2_rename d$n.t$m to d$n1.t$m;
 
230
--enable_warnings
 
231
 
 
232
--enable_query_log
 
233
 
 
234
#
 
235
# DEBUG output (to remove)
 
236
# Hunting after bug#13033076.
 
237
# Let's see if rename leaves any garbage after its run
 
238
#
 
239
sync_slave_with_master;
 
240
let $MYSQLD_DATADIR= `SELECT @@datadir`;
 
241
while ($n)
 
242
{
 
243
  echo "database d$n:";
 
244
  --list_files $MYSQLD_DATADIR/d$n
 
245
  dec $n;
 
246
}
 
247
 
 
248
 
 
249
#
 
250
# Clean-up
 
251
#
 
252
 
 
253
connection master;
 
254
 
 
255
let $n= $dbs;
 
256
--disable_query_log
 
257
 
 
258
# Hunting after bug#13033076: to drop db:s on master concurrently as
 
259
# well through 4 connections.
 
260
 
 
261
--connect(con1, localhost, root,,)
 
262
--connect(con2, localhost, root,,)
 
263
--connect(con3, localhost, root,,)
 
264
--connect(con4, localhost, root,,)
 
265
 
 
266
let $reap_not_done= 0;
 
267
 
 
268
while ($n)
 
269
{
 
270
  --connection con1
 
271
  if ($reap_not_done)
 
272
  {
 
273
    --reap
 
274
  }
 
275
  --send_eval drop database d$n;
 
276
  dec $n;
 
277
 
 
278
  --connection con2
 
279
  if ($reap_not_done)
 
280
  {
 
281
    --reap
 
282
  }
 
283
  --send_eval drop database d$n;
 
284
  dec $n;
 
285
 
 
286
  --connection con3
 
287
  if ($reap_not_done)
 
288
  {
 
289
    --reap
 
290
  }
 
291
  --send_eval drop database d$n;
 
292
  dec $n;
 
293
 
 
294
  --connection con4
 
295
  if ($reap_not_done)
 
296
  {
 
297
    --reap
 
298
  }
 
299
  --send_eval drop database d$n;
 
300
  dec $n;
 
301
  let $reap_not_done= 1;
 
302
}
 
303
 
 
304
--enable_query_log
 
305
 
 
306
  --connection con1
 
307
  --reap
 
308
  --disconnect con1
 
309
 
 
310
  --connection con2
 
311
  --reap
 
312
  --disconnect con2
 
313
  
 
314
  --connection con3
 
315
  --reap
 
316
  --disconnect con3
 
317
  
 
318
  --connection con4
 
319
  --reap
 
320
  --disconnect con4
 
321
 
 
322
connection master;
 
323
sync_slave_with_master;
 
324
 
 
325
set @@global.slave_parallel_workers= @save.slave_parallel_workers;
 
326
 
 
327
--source include/rpl_end.inc
 
328