~jlukas79/+junk/mysql-server

« back to all changes in this revision

Viewing changes to mysql-test/t/backup_ddl_blocker.test

manual merge 6.0-main --> 6.0-bka-review

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#
2
 
# This test is for the DDL blocker
 
2
# This test is for the DDL blocker.
3
3
# The goals of the test should be to ensure the following assumptions for
4
4
# the behaviour of the DDL blocker hold true.
5
5
#
42
42
#
43
43
# TODO : Add a native driver to the test when one becomes available
44
44
#
45
 
# Notes
46
 
#   You must use a dedicated connection for getting and releasing locks.
47
 
# Do not issue a get_lock() or release_lock() in the same connection
48
 
# (thread) as code that calls BACKUP_BREAKPOINT(). Using the same connection
49
 
# to get/release locks and run code that issues BACKUP_BREAKPOINTs will result
50
 
# in an assertion using DEBUG_ASSERT(thd->ull == NULL) from debug_sync_point()
51
 
# in item_func.cc.
52
 
#
53
45
 
54
46
--source include/have_innodb.inc
55
 
--source include/have_debug.inc
 
47
--source include/have_debug_sync.inc
56
48
--source include/not_embedded.inc
57
49
 
 
50
SET DEBUG_SYNC= 'reset';
 
51
 
58
52
#
59
53
# Remove backup files (if they exist)
60
54
#
 
55
# Note: More preparatory cleanup is done in
 
56
# include/backup_ddl_create_data.inc
 
57
#
61
58
 
62
59
--error 0,1
63
60
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak;
69
66
#
70
67
# con1       used to create data, load data, and run the backup 
71
68
# con2-con5  used for DDL statements: 2 before backup and 2 during backup
72
 
# con6       used for setting and releasing breakpoints
 
69
# con6       used to show status/processlist 
73
70
#
74
71
 
75
72
connect (con1,localhost,root,,);
81
78
 
82
79
connection con1;
83
80
 
84
 
# Setup the server to use the backup breakpoints
85
 
SET GLOBAL debug="d,backup_debug:d,backup";
86
 
 
87
81
#
88
82
# Backup test sequence diagram (not UML)
89
83
#
96
90
# when the backup or restore is already running. Tests results
97
91
# show the realization of the assumptions above.
98
92
#
99
 
#     con1      con2     con3     con4     con6
 
93
#     con1      con2     con3     con4     con5     con6
100
94
#    (setup)     |        |        |        |        |
101
95
#       |        |        |        |        |        |
102
 
#       |        |        |        |        | lock("DDL_in_progress");
 
96
#       |        |        |        |        |        |
103
97
#       |   statememt 1   |        |        |        |
104
98
#       |        |   statement 2   |        |        |
105
 
#       |        |        |        |        |  <wait for locks>
 
99
#       |        |        |        |        |    show status
106
100
# BACKUP/RESTORE |        |        |        |        |
107
 
#       |        |        |        |        | lock("DDL_blocked");
108
 
#       |        |        |        |        | <wait for locks>
 
101
#       |        |        |        |        |        |
 
102
#       |        |        |        |        |        |
109
103
#       |      <...>    <...>      |        |        |
110
104
#       |        |        |   statement 3   |        |
111
105
#       |        |        |        |   statement 4   |
112
 
#       |        |        |        |        | <wait for DDL blocker>
113
 
#       |        |        |        |        |  <release locks>
 
106
#       |        |        |        |        |    show status
114
107
#     <...>      |        |      <...>    <...>      |
115
108
#   (results)    |        |        |        |        |
116
109
#
117
110
# Note: The resume of the commands is indicated with <...> and
118
111
#       may occur in any order.
119
112
#
 
113
# Note by Ingo: I wonder if the line above "(results)" is correct.
 
114
# I understand the above explanations so that DDL3 and 4 cannot
 
115
# resume before BACKUP/RESTORE finished. But the line indicates
 
116
# that these can resume in any order.
120
117
 
121
118
 
122
119
##############################################################
129
126
--source include/backup_ddl_create_data.inc
130
127
DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
131
128
 
132
 
connection con6;
133
 
 
134
 
# Set the breakpoint for DDL in progress.
135
 
--echo con6: Getting lock on DDL in progress.
136
 
SELECT get_lock("DDL_in_progress", 0);
137
 
 
138
129
connection con2;
139
130
 
 
131
--echo con2: Activate synchronization point for DDL.
 
132
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
140
133
--echo con2: Get a DDL going and stop in the middle
141
134
send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
142
135
 
143
136
connection con3;
144
137
 
 
138
--echo con3: Wait for con2 to reach its synchronization point.
 
139
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
140
--echo con3: Activate synchronization point for DDL.
 
141
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
145
142
--echo con3: Get a DDL going and stop in the middle
146
143
send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
147
144
 
149
146
 
150
147
connection con1;
151
148
 
 
149
--echo con1: Wait for con3 to reach its synchronization point.
 
150
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
151
--echo con1: Activate synchronization points for backup.
 
152
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
153
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
152
154
--echo con1: Backing up database -- will block with lock
153
155
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
154
156
 
155
157
connection con6;
156
158
 
157
 
# Wait for lock to be acquired and execution to reach breakpoint
158
 
--echo con6: Checking locks
159
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
160
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
161
 
                      WHERE info LIKE "BACKUP DATABASE%";
162
 
--source include/wait_condition.inc
163
 
 
164
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
165
 
WHERE info LIKE "BACKUP DATABASE%";
166
 
 
167
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
168
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
169
 
                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
170
 
--source include/wait_condition.inc
171
 
 
172
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
173
 
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
174
 
 
175
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
176
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
177
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
178
 
--source include/wait_condition.inc
179
 
 
180
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
181
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
182
 
 
183
 
# Now set the breakpoint for DDL blocker.
184
 
# This releases lock on DDL_in_progress stopping all DDLs.
185
 
--echo con6: Getting lock on DDL blocker.
186
 
SELECT get_lock("DDL_blocked", 0);
187
 
 
188
 
connection con6;
189
 
 
190
 
--echo con6: Checking locks
191
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
192
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
193
 
                      WHERE info LIKE "BACKUP DATABASE%";
194
 
--source include/wait_condition.inc
195
 
 
196
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
197
 
WHERE info LIKE "BACKUP DATABASE%";
 
159
--echo con6: Wait for con1 to reach its synchronization point.
 
160
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
161
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
162
  WHERE info LIKE "BACKUP DATABASE%";
 
163
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
164
  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 
165
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
166
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 
167
 
 
168
--echo con6: Resume all and wait for backup to start after DDL finish.
 
169
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
170
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
171
  WHERE info LIKE "BACKUP DATABASE%";
198
172
 
199
173
connection con4;
200
174
 
 
175
--echo con4: Activate synchronization point for DDL.
 
176
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
177
                 WAIT_FOR status_shown2';
201
178
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
202
179
send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
203
180
 
204
181
connection con5;
205
182
 
 
183
--echo con5: Wait for con4 to reach its synchronization point.
 
184
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
185
--echo con5: Activate synchronization point for DDL.
 
186
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
187
                 WAIT_FOR status_shown2';
206
188
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
207
189
send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
208
190
 
209
191
connection con6;
210
192
 
211
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
212
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
213
 
                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
214
 
--source include/wait_condition.inc
215
 
 
216
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
217
 
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
218
 
 
219
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
220
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
221
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
222
 
--source include/wait_condition.inc
223
 
 
224
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
225
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
226
 
 
227
 
--echo con6: Releasing lock
228
 
SELECT release_lock("DDL_blocked");
229
 
 
230
 
# Reconnect to connections and allow them to finish.
 
193
--echo con6: Wait for con5 to reach its synchronization point.
 
194
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
195
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
196
  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 
197
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
198
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 
199
 
 
200
--echo con6: Resume all.
 
201
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
202
 
 
203
# Reconnect to connections and fetch their results.
231
204
 
232
205
connection con2;
233
206
--echo con2: Completing DDL
245
218
--echo con5: Completing DDL
246
219
reap;
247
220
 
248
 
# Reconnect to con1 and let backup finish.
 
221
# Reconnect to con1 and fetch its result.
249
222
 
250
223
connection con1;
251
224
--replace_column 1 #
298
271
--replace_column 1 #
299
272
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
300
273
 
301
 
connection con6;
302
 
 
303
 
# Set the breakpoint for DDL in progress.
304
 
--echo con6: Getting lock on DDL in progress.
305
 
SELECT get_lock("DDL_in_progress", 0);
306
 
 
307
274
connection con2;
308
275
 
 
276
--echo con2: Activate synchronization point for DDL.
 
277
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
309
278
--echo con2: Get a DDL going and stop in the middle
310
279
send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
311
280
 
312
281
connection con3;
313
282
 
 
283
--echo con3: Wait for con2 to reach its synchronization point.
 
284
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
285
--echo con3: Activate synchronization point for DDL.
 
286
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
314
287
--echo con3: Get a DDL going and stop in the middle
315
288
send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
316
289
 
318
291
 
319
292
connection con1;
320
293
 
 
294
--echo con1: Wait for con3 to reach its synchronization point.
 
295
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
296
--echo con1: Activate synchronization points for restore.
 
297
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
298
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
321
299
--echo con1: Restoring database -- will block with lock
322
300
send RESTORE FROM "bup_ddl_blocker_orig.bak";
323
301
 
324
302
connection con6;
325
303
 
326
 
# Wait for lock to be acquired and execution to reach breakpoint
327
 
--echo con6: Checking locks
328
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
329
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
330
 
                      WHERE info LIKE "RESTORE FROM%";
331
 
--source include/wait_condition.inc
332
 
 
333
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
334
 
WHERE info LIKE "RESTORE FROM%";
335
 
 
336
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
337
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
338
 
                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
339
 
--source include/wait_condition.inc
340
 
 
341
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
342
 
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
343
 
 
344
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
345
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
346
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
347
 
--source include/wait_condition.inc
348
 
 
349
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
350
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
351
 
 
352
 
# Now set the breakpoint for DDL blocker.
353
 
# This releases lock on DDL_in_progress stopping all DDLs.
354
 
--echo con6: Getting lock on DDL blocker.
355
 
SELECT get_lock("DDL_blocked", 0);
356
 
 
357
 
connection con6;
358
 
 
359
 
--echo con6: Checking locks
360
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
361
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
362
 
                      WHERE info LIKE "RESTORE FROM%";
363
 
--source include/wait_condition.inc
364
 
 
365
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
366
 
WHERE info LIKE "RESTORE FROM%";
 
304
--echo con6: Wait for con1 to reach its synchronization point.
 
305
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
306
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
307
  WHERE info LIKE "RESTORE FROM%";
 
308
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
309
  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
 
310
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
311
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
 
312
 
 
313
--echo con6: Resume all and wait for restore to start after DDL finish.
 
314
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
315
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
316
  WHERE info LIKE "RESTORE FROM%";
367
317
 
368
318
connection con4;
369
319
 
 
320
--echo con4: Activate synchronization point for DDL.
 
321
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
322
                 WAIT_FOR status_shown2';
370
323
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
371
324
send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
372
325
 
373
326
connection con5;
374
327
 
 
328
--echo con5: Wait for con4 to reach its synchronization point.
 
329
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
330
--echo con5: Activate synchronization point for DDL.
 
331
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
332
                 WAIT_FOR status_shown2';
375
333
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
376
334
send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
377
335
 
378
336
connection con6;
379
337
 
380
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
381
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
382
 
                      WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
383
 
--source include/wait_condition.inc
384
 
 
385
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
386
 
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
387
 
 
388
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
389
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
390
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
391
 
--source include/wait_condition.inc
392
 
 
393
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
394
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
395
 
 
396
 
--echo con6: Releasing lock
397
 
SELECT release_lock("DDL_blocked");
398
 
 
399
 
# Reconnect to connections and allow them to finish.
 
338
--echo con6: Wait for con5 to reach its synchronization point.
 
339
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
340
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
341
  WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
 
342
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
343
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
 
344
 
 
345
--echo con6: Resume all.
 
346
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
347
 
 
348
# Reconnect to connections and fetch their results.
400
349
 
401
350
connection con2;
402
351
--echo con2: Completing DDL
414
363
--echo con5: Completing DDL
415
364
reap;
416
365
 
417
 
# Reconnect to con1 and let backup finish.
 
366
# Reconnect to con1 and fetch its result.
418
367
 
419
368
connection con1;
420
369
--replace_column 1 #
421
370
reap;
422
371
 
 
372
##############################################################
423
373
--echo
424
374
--echo Verifying Test 1 results for restore.
425
375
--echo
 
376
##############################################################
426
377
 
427
378
--echo con1: Table t1 should not be in restored data.
428
379
--echo con1: Table t2 should not have new column in restored data.
434
385
DESCRIBE bup_ddl_blocker.t3;
435
386
DESCRIBE bup_ddl_blocker.t4;
436
387
 
 
388
# Cleanup
 
389
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
390
 
437
391
 
438
392
 
439
393
##############################################################
445
399
# Create data for this test and tailor it to the test.
446
400
--source include/backup_ddl_create_data.inc
447
401
 
448
 
connection con6;
449
 
 
450
 
# Set the breakpoint for DDL in progress.
451
 
--echo con6: Getting lock on DDL in progress.
452
 
SELECT get_lock("DDL_in_progress", 0);
453
 
 
454
402
connection con2;
455
403
 
 
404
--echo con2: Activate synchronization point for DDL.
 
405
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
456
406
--echo con2: Get a DDL going and stop in the middle
457
407
send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
458
408
 
459
409
connection con3;
460
410
 
 
411
--echo con3: Wait for con2 to reach its synchronization point.
 
412
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
413
--echo con3: Activate synchronization point for DDL.
 
414
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
461
415
--echo con3: Get a DDL going and stop in the middle
462
416
send REPAIR TABLE bup_ddl_blocker.t2;
463
417
 
465
419
 
466
420
connection con1;
467
421
 
 
422
--echo con1: Wait for con3 to reach its synchronization point.
 
423
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
424
--echo con1: Activate synchronization points for backup.
 
425
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
426
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
468
427
--echo con1: Backing up database -- will block with lock
469
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
470
428
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
471
429
 
472
430
connection con6;
473
431
 
474
 
# Wait for lock to be acquired and execution to reach breakpoint
475
 
--echo con6: Checking locks
476
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
477
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
478
 
                      WHERE info LIKE "BACKUP DATABASE%";
479
 
--source include/wait_condition.inc
480
 
 
481
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
482
 
WHERE info LIKE "BACKUP DATABASE%";
483
 
 
484
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
485
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
486
 
                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
487
 
--source include/wait_condition.inc
488
 
 
489
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
490
 
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
491
 
 
492
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
493
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
494
 
                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
495
 
--source include/wait_condition.inc
496
 
 
497
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
498
 
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
499
 
 
500
 
 
501
 
# Now set the breakpoint for DDL blocker.
502
 
# This releases lock on DDL_in_progress stopping all DDLs.
503
 
--echo con6: Getting lock on DDL blocker.
504
 
SELECT get_lock("DDL_blocked", 0);
505
 
 
506
 
connection con6;
507
 
 
508
 
--echo con6: Checking locks
509
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
510
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
511
 
                      WHERE info LIKE "BACKUP DATABASE%";
512
 
--source include/wait_condition.inc
513
 
 
514
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
515
 
WHERE info LIKE "BACKUP DATABASE%";
 
432
--echo con6: Wait for con1 to reach its synchronization point.
 
433
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
434
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
435
  WHERE info LIKE "BACKUP DATABASE%";
 
436
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
437
  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 
438
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
439
  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 
440
 
 
441
--echo con6: Resume all and wait for backup to start after DDL finish.
 
442
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
443
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
444
  WHERE info LIKE "BACKUP DATABASE%";
516
445
 
517
446
connection con4;
518
447
 
 
448
--echo con4: Activate synchronization point for DDL.
 
449
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
450
                 WAIT_FOR status_shown2';
519
451
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
520
452
send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
521
453
 
522
454
connection con5;
523
455
 
 
456
--echo con5: Wait for con4 to reach its synchronization point.
 
457
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
458
--echo con5: Activate synchronization point for DDL.
 
459
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
460
                 WAIT_FOR status_shown2';
524
461
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
525
462
send REPAIR TABLE bup_ddl_blocker.t4;
526
463
 
527
464
connection con6;
528
465
 
529
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
530
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
531
 
                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
532
 
--source include/wait_condition.inc
533
 
 
534
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
535
 
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
536
 
 
537
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
538
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
539
 
                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
540
 
--source include/wait_condition.inc
541
 
 
542
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
543
 
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
544
 
 
545
 
--echo con6: Releasing lock
546
 
SELECT release_lock("DDL_blocked");
547
 
 
548
 
# Reconnect to connections and allow them to finish.
 
466
--echo con6: Wait for con5 to reach its synchronization point.
 
467
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
468
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
469
  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 
470
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
471
  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 
472
 
 
473
--echo con6: Resume all.
 
474
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
475
 
 
476
# Reconnect to connections and fetch their results.
549
477
 
550
478
connection con2;
551
479
--echo con2: Completing DDL
563
491
--echo con5: Completing DDL
564
492
reap;
565
493
 
566
 
# Reconnect to con1 and let backup finish.
 
494
# Reconnect to con1 and fetch its result.
567
495
 
568
496
connection con1;
569
497
--replace_column 1 #
610
538
--replace_column 1 #
611
539
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
612
540
 
613
 
connection con6;
614
 
 
615
 
# Set the breakpoint for DDL in progress.
616
 
--echo con6: Getting lock on DDL in progress.
617
 
SELECT get_lock("DDL_in_progress", 0);
618
 
 
619
541
connection con2;
620
542
 
 
543
--echo con2: Activate synchronization point for DDL.
 
544
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
621
545
--echo con2: Get a DDL going and stop in the middle
622
546
send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
623
547
 
624
548
connection con3;
625
549
 
 
550
--echo con3: Wait for con2 to reach its synchronization point.
 
551
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
552
--echo con3: Activate synchronization point for DDL.
 
553
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
626
554
--echo con3: Get a DDL going and stop in the middle
627
555
send REPAIR TABLE bup_ddl_blocker.t2;
628
556
 
630
558
 
631
559
connection con1;
632
560
 
 
561
--echo con1: Wait for con3 to reach its synchronization point.
 
562
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
563
--echo con1: Activate synchronization points for restore.
 
564
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
565
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
633
566
--echo con1: Restoring database -- will block with lock
634
567
send RESTORE FROM "bup_ddl_blocker_orig.bak";
635
568
 
636
569
connection con6;
637
570
 
638
 
# Wait for lock to be acquired and execution to reach breakpoint
639
 
--echo con6: Checking locks
640
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
641
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
642
 
                      WHERE info LIKE "RESTORE FROM%";
643
 
--source include/wait_condition.inc
644
 
 
645
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
646
 
WHERE info LIKE "RESTORE FROM%";
647
 
 
648
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
649
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
650
 
                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
651
 
--source include/wait_condition.inc
652
 
 
653
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
654
 
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
655
 
 
656
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
657
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
658
 
                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
659
 
--source include/wait_condition.inc
660
 
 
661
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
662
 
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
663
 
 
664
 
# Now set the breakpoint for DDL blocker.
665
 
# This releases lock on DDL_in_progress stopping all DDLs.
666
 
--echo con6: Getting lock on DDL blocker.
667
 
SELECT get_lock("DDL_blocked", 0);
668
 
 
669
 
connection con6;
670
 
 
671
 
--echo con6: Checking locks
672
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
673
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
674
 
                      WHERE info LIKE "RESTORE FROM%";
675
 
--source include/wait_condition.inc
676
 
 
677
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
678
 
WHERE info LIKE "RESTORE FROM%";
 
571
--echo con6: Wait for con1 to reach its synchronization point.
 
572
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
573
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
574
  WHERE info LIKE "RESTORE FROM%";
 
575
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
576
  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
 
577
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
578
  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
 
579
 
 
580
--echo con6: Resume all and wait for restore to start after DDL finish.
 
581
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
582
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
583
  WHERE info LIKE "RESTORE FROM%";
679
584
 
680
585
connection con4;
681
586
 
 
587
--echo con4: Activate synchronization point for DDL.
 
588
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
589
                 WAIT_FOR status_shown2';
682
590
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
683
591
send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
684
592
 
685
593
connection con5;
686
594
 
 
595
--echo con5: Wait for con4 to reach its synchronization point.
 
596
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
597
--echo con5: Activate synchronization point for DDL.
 
598
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
599
                 WAIT_FOR status_shown2';
687
600
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
688
601
send REPAIR TABLE bup_ddl_blocker.t4;
689
602
 
690
603
connection con6;
691
604
 
692
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
693
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
694
 
                      WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
695
 
--source include/wait_condition.inc
696
 
 
697
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
698
 
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
699
 
 
700
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
701
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
702
 
                      WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
703
 
--source include/wait_condition.inc
704
 
 
705
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
706
 
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
707
 
 
708
 
--echo con6: Releasing lock
709
 
SELECT release_lock("DDL_blocked");
710
 
 
711
 
# Reconnect to connections and allow them to finish.
 
605
--echo con6: Wait for con5 to reach its synchronization point.
 
606
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
607
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
608
  WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
 
609
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
610
  WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
 
611
 
 
612
--echo con6: Resume all.
 
613
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
614
 
 
615
# Reconnect to connections and fetch their results.
712
616
 
713
617
connection con2;
714
618
--echo con2: Completing DDL
726
630
--echo con5: Completing DDL
727
631
reap;
728
632
 
729
 
# Reconnect to con1 and let backup finish.
 
633
# Reconnect to con1 and fetch its result.
730
634
 
731
635
connection con1;
732
636
--replace_column 1 #
742
646
use bup_ddl_blocker;
743
647
SHOW TABLES;
744
648
 
745
 
 
 
649
# Cleanup
 
650
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
746
651
 
747
652
 
748
653
 
755
660
# Create data for this test and tailor it to the test.
756
661
--source include/backup_ddl_create_data.inc
757
662
 
758
 
connection con6;
759
 
 
760
 
# Set the breakpoint for DDL in progress.
761
 
--echo con6: Getting lock on DDL in progress.
762
 
SELECT get_lock("DDL_in_progress", 0);
763
 
 
764
663
connection con2;
765
664
 
 
665
--echo con2: Activate synchronization point for DDL.
 
666
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
766
667
--echo con2: Get a DDL going and stop in the middle
767
668
send OPTIMIZE TABLE bup_ddl_blocker.t1;
768
669
 
769
670
connection con3;
770
671
 
 
672
--echo con3: Wait for con2 to reach its synchronization point.
 
673
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
674
--echo con3: Activate synchronization point for DDL.
 
675
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
771
676
--echo con3: Get a DDL going and stop in the middle
772
677
send DROP TABLE bup_ddl_blocker.t2;
773
678
 
775
680
 
776
681
connection con1;
777
682
 
 
683
--echo con1: Wait for con3 to reach its synchronization point.
 
684
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
685
--echo con1: Activate synchronization points for backup.
 
686
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
687
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
778
688
--echo con1: Backing up database -- will block with lock
779
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
780
689
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
781
690
 
782
691
connection con6;
783
692
 
784
 
# Wait for lock to be acquired and execution to reach breakpoint
785
 
--echo con6: Checking locks
786
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
787
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
788
 
                      WHERE info LIKE "BACKUP DATABASE%";
789
 
--source include/wait_condition.inc
790
 
 
791
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
792
 
WHERE info LIKE "BACKUP DATABASE%";
793
 
 
794
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
795
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
796
 
                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
797
 
--source include/wait_condition.inc
798
 
 
799
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
800
 
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
801
 
 
802
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
803
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
804
 
                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
805
 
--source include/wait_condition.inc
806
 
 
807
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
808
 
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
809
 
 
810
 
# Now set the breakpoint for DDL blocker.
811
 
# This releases lock on DDL_in_progress stopping all DDLs.
812
 
--echo con6: Getting lock on DDL blocker.
813
 
SELECT get_lock("DDL_blocked", 0);
814
 
 
815
 
connection con6;
816
 
 
817
 
--echo con6: Checking locks
818
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
819
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
820
 
                      WHERE info LIKE "BACKUP DATABASE%";
821
 
--source include/wait_condition.inc
822
 
 
823
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
824
 
WHERE info LIKE "BACKUP DATABASE%";
 
693
--echo con6: Wait for con1 to reach its synchronization point.
 
694
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
695
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
696
  WHERE info LIKE "BACKUP DATABASE%";
 
697
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
698
  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 
699
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
700
  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 
701
 
 
702
--echo con6: Resume all and wait for backup to start after DDL finish.
 
703
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
704
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
705
  WHERE info LIKE "BACKUP DATABASE%";
825
706
 
826
707
connection con4;
827
708
 
 
709
--echo con4: Activate synchronization point for DDL.
 
710
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
711
                 WAIT_FOR status_shown2';
828
712
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
829
713
send OPTIMIZE TABLE bup_ddl_blocker.t3;
830
714
 
831
715
connection con5;
832
716
 
 
717
--echo con5: Wait for con4 to reach its synchronization point.
 
718
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
719
--echo con5: Activate synchronization point for DDL.
 
720
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
721
                 WAIT_FOR status_shown2';
833
722
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
834
723
send DROP TABLE bup_ddl_blocker.t4;
835
724
 
836
725
connection con6;
837
726
 
838
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
839
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
840
 
                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
841
 
--source include/wait_condition.inc
842
 
 
843
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
844
 
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
845
 
 
846
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
847
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
848
 
                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
849
 
--source include/wait_condition.inc
850
 
 
851
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
852
 
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
853
 
 
854
 
--echo con6: Releasing lock
855
 
SELECT release_lock("DDL_blocked");
856
 
 
857
 
# Reconnect to connections and allow them to finish.
 
727
--echo con6: Wait for con5 to reach its synchronization point.
 
728
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
729
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
730
  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 
731
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
732
  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 
733
 
 
734
--echo con6: Resume all.
 
735
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
736
 
 
737
# Reconnect to connections and fetch their results.
858
738
 
859
739
connection con2;
860
740
--echo con2: Completing DDL
872
752
--echo con5: Completing DDL
873
753
reap;
874
754
 
875
 
# Reconnect to con1 and let backup finish.
 
755
# Reconnect to con1 and fetch its result.
876
756
 
877
757
connection con1;
878
758
--replace_column 1 #
917
797
--replace_column 1 #
918
798
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
919
799
 
920
 
connection con6;
921
 
 
922
 
# Set the breakpoint for DDL in progress.
923
 
--echo con6: Getting lock on DDL in progress.
924
 
SELECT get_lock("DDL_in_progress", 0);
925
 
 
926
800
connection con2;
927
801
 
 
802
--echo con2: Activate synchronization point for DDL.
 
803
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
928
804
--echo con2: Get a DDL going and stop in the middle
929
805
send OPTIMIZE TABLE bup_ddl_blocker.t1;
930
806
 
931
807
connection con3;
932
808
 
 
809
--echo con3: Wait for con2 to reach its synchronization point.
 
810
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
811
--echo con3: Activate synchronization point for DDL.
 
812
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
933
813
--echo con3: Get a DDL going and stop in the middle
934
814
send DROP TABLE bup_ddl_blocker.t2;
935
815
 
937
817
 
938
818
connection con1;
939
819
 
 
820
--echo con1: Wait for con3 to reach its synchronization point.
 
821
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
822
--echo con1: Activate synchronization points for restore.
 
823
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
824
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
940
825
--echo con1: Restoring database -- will block with lock
941
826
send RESTORE FROM "bup_ddl_blocker_orig.bak";
942
827
 
943
828
connection con6;
944
829
 
945
 
# Wait for lock to be acquired and execution to reach breakpoint
946
 
--echo con6: Checking locks
947
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
948
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
949
 
                      WHERE info LIKE "RESTORE FROM%";
950
 
--source include/wait_condition.inc
951
 
 
952
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
953
 
WHERE info LIKE "RESTORE FROM%";
954
 
 
955
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
956
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
957
 
                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
958
 
--source include/wait_condition.inc
959
 
 
960
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
961
 
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
962
 
 
963
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
964
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
965
 
                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
966
 
--source include/wait_condition.inc
967
 
 
968
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
969
 
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
970
 
 
971
 
# Now set the breakpoint for DDL blocker.
972
 
# This releases lock on DDL_in_progress stopping all DDLs.
973
 
--echo con6: Getting lock on DDL blocker.
974
 
SELECT get_lock("DDL_blocked", 0);
975
 
 
976
 
connection con6;
977
 
 
978
 
--echo con6: Checking locks
979
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
980
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
981
 
                      WHERE info LIKE "RESTORE FROM%";
982
 
--source include/wait_condition.inc
983
 
 
984
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
985
 
WHERE info LIKE "RESTORE FROM%";
 
830
--echo con6: Wait for con1 to reach its synchronization point.
 
831
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
832
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
833
  WHERE info LIKE "RESTORE FROM%";
 
834
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
835
  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
 
836
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
837
  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
 
838
 
 
839
--echo con6: Resume all and wait for restore to start after DDL finish.
 
840
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
841
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
842
  WHERE info LIKE "RESTORE FROM%";
986
843
 
987
844
connection con4;
988
845
 
 
846
--echo con4: Activate synchronization point for DDL.
 
847
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
848
                 WAIT_FOR status_shown2';
989
849
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
990
850
send OPTIMIZE TABLE bup_ddl_blocker.t3;
991
851
 
992
852
connection con5;
993
853
 
 
854
--echo con5: Wait for con4 to reach its synchronization point.
 
855
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
856
--echo con5: Activate synchronization point for DDL.
 
857
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
858
                 WAIT_FOR status_shown2';
994
859
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
995
860
send DROP TABLE bup_ddl_blocker.t4;
996
861
 
997
862
connection con6;
998
863
 
999
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1000
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1001
 
                      WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
1002
 
--source include/wait_condition.inc
1003
 
 
1004
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1005
 
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
1006
 
 
1007
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1008
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1009
 
                      WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
1010
 
--source include/wait_condition.inc
1011
 
 
1012
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1013
 
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
1014
 
 
1015
 
--echo con6: Releasing lock
1016
 
SELECT release_lock("DDL_blocked");
1017
 
 
1018
 
# Reconnect to connections and allow them to finish.
 
864
--echo con6: Wait for con5 to reach its synchronization point.
 
865
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
866
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
867
  WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
 
868
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
869
  WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
 
870
 
 
871
--echo con6: Resume all.
 
872
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
873
 
 
874
# Reconnect to connections and fetch their results.
1019
875
 
1020
876
connection con2;
1021
877
--echo con2: Completing DDL
1033
889
--echo con5: Completing DDL
1034
890
reap;
1035
891
 
1036
 
# Reconnect to con1 and let backup finish.
 
892
# Reconnect to con1 and fetch its result.
1037
893
 
1038
894
connection con1;
1039
895
--replace_column 1 #
1049
905
use bup_ddl_blocker;
1050
906
SHOW TABLES;
1051
907
 
1052
 
 
 
908
# Cleanup
 
909
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
1053
910
 
1054
911
 
1055
912
 
1088
945
--echo con1: Show that the new data doesn't exist before backup.
1089
946
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
1090
947
 
1091
 
connection con6;
1092
 
 
1093
 
# Set the breakpoint for DDL in progress.
1094
 
--echo con6: Getting lock on DDL in progress.
1095
 
SELECT get_lock("DDL_in_progress", 0);
1096
 
 
1097
948
connection con2;
1098
949
 
 
950
--echo con2: Activate synchronization point for DDL.
 
951
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
1099
952
--echo con2: Get a DDL going and stop in the middle
1100
953
send CREATE DATABASE bup_ddl_blocker_1;
1101
954
 
1102
955
connection con3;
1103
956
 
 
957
--echo con3: Wait for con2 to reach its synchronization point.
 
958
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
959
--echo con3: Activate synchronization point for DDL.
 
960
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
1104
961
--echo con3: Get a DDL going and stop in the middle
1105
962
send DROP DATABASE bup_ddl_blocker_2;
1106
963
 
1108
965
 
1109
966
connection con1;
1110
967
 
 
968
--echo con1: Wait for con3 to reach its synchronization point.
 
969
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
970
--echo con1: Activate synchronization points for backup.
 
971
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
972
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
1111
973
--echo con1: Backing up database -- will block with lock
1112
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
1113
974
send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
1114
975
 
1115
976
connection con6;
1116
977
 
1117
 
# Wait for lock to be acquired and execution to reach breakpoint
1118
 
--echo con6: Checking locks
1119
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1120
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1121
 
                      WHERE info LIKE "BACKUP DATABASE%";
1122
 
--source include/wait_condition.inc
1123
 
 
1124
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1125
 
WHERE info LIKE "BACKUP DATABASE%";
1126
 
 
1127
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1128
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1129
 
                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
1130
 
--source include/wait_condition.inc
1131
 
 
1132
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1133
 
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
1134
 
 
1135
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1136
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1137
 
                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
1138
 
--source include/wait_condition.inc
1139
 
 
1140
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1141
 
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
1142
 
 
1143
 
# Now set the breakpoint for DDL blocker.
1144
 
# This releases lock on DDL_in_progress stopping all DDLs.
1145
 
--echo con6: Getting lock on DDL blocker.
1146
 
SELECT get_lock("DDL_blocked", 0);
1147
 
 
1148
 
connection con6;
1149
 
 
1150
 
--echo con6: Checking locks
1151
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
1152
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1153
 
                      WHERE info LIKE "BACKUP DATABASE%";
1154
 
--source include/wait_condition.inc
1155
 
 
1156
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1157
 
WHERE info LIKE "BACKUP DATABASE%";
 
978
--echo con6: Wait for con1 to reach its synchronization point.
 
979
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
980
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
981
  WHERE info LIKE "BACKUP DATABASE%";
 
982
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
983
  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 
984
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
985
  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 
986
 
 
987
--echo con6: Resume all and wait for backup to start after DDL finish.
 
988
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
989
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
990
  WHERE info LIKE "BACKUP DATABASE%";
1158
991
 
1159
992
connection con4;
1160
993
 
 
994
--echo con4: Activate synchronization point for DDL.
 
995
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
996
                 WAIT_FOR status_shown2';
1161
997
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
1162
998
send CREATE DATABASE bup_ddl_blocker_3;
1163
999
 
1164
1000
connection con5;
1165
1001
 
 
1002
--echo con5: Wait for con4 to reach its synchronization point.
 
1003
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1004
--echo con5: Activate synchronization point for DDL.
 
1005
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1006
                 WAIT_FOR status_shown2';
1166
1007
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
1167
1008
send DROP DATABASE bup_ddl_blocker_4;
1168
1009
 
1169
1010
connection con6;
1170
1011
 
1171
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1172
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1173
 
                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
1174
 
--source include/wait_condition.inc
1175
 
 
1176
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1177
 
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
1178
 
 
1179
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1180
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1181
 
                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1182
 
--source include/wait_condition.inc
1183
 
 
1184
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1185
 
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1186
 
 
1187
 
--echo con6: Releasing lock
1188
 
SELECT release_lock("DDL_blocked");
1189
 
 
1190
 
# Reconnect to connections and allow them to finish.
 
1012
--echo con6: Wait for con5 to reach its synchronization point.
 
1013
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1014
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1015
  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 
1016
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1017
  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 
1018
 
 
1019
--echo con6: Resume all.
 
1020
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1021
 
 
1022
# Reconnect to connections and fetch their results.
1191
1023
 
1192
1024
connection con2;
1193
1025
--echo con2: Completing DDL
1205
1037
--echo con5: Completing DDL
1206
1038
reap;
1207
1039
 
1208
 
# Reconnect to con1 and let backup finish.
 
1040
# Reconnect to con1 and fetch its result.
1209
1041
 
1210
1042
connection con1;
1211
1043
--replace_column 1 #
1279
1111
--replace_column 1 #
1280
1112
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
1281
1113
 
1282
 
connection con6;
1283
 
 
1284
 
# Set the breakpoint for DDL in progress.
1285
 
--echo con6: Getting lock on DDL in progress.
1286
 
SELECT get_lock("DDL_in_progress", 0);
1287
 
 
1288
1114
connection con2;
1289
1115
 
 
1116
--echo con2: Activate synchronization point for DDL.
 
1117
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
1290
1118
--echo con2: Get a DDL going and stop in the middle
1291
1119
send CREATE DATABASE bup_ddl_blocker_1;
1292
1120
 
1293
1121
connection con3;
1294
1122
 
 
1123
--echo con3: Wait for con2 to reach its synchronization point.
 
1124
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1125
--echo con3: Activate synchronization point for DDL.
 
1126
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
1295
1127
--echo con3: Get a DDL going and stop in the middle
1296
1128
send DROP DATABASE bup_ddl_blocker_2;
1297
1129
 
1299
1131
 
1300
1132
connection con1;
1301
1133
 
 
1134
--echo con1: Wait for con3 to reach its synchronization point.
 
1135
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
1136
--echo con1: Activate synchronization points for restore.
 
1137
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
1138
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
1302
1139
--echo con1: Restoring database -- will block with lock
1303
1140
send RESTORE FROM "bup_ddl_blocker_orig.bak";
1304
1141
 
1305
1142
connection con6;
1306
1143
 
1307
 
# Wait for lock to be acquired and execution to reach breakpoint
1308
 
--echo con6: Checking locks
1309
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1310
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1311
 
                      WHERE info LIKE "RESTORE FROM%";
1312
 
--source include/wait_condition.inc
1313
 
 
1314
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1315
 
WHERE info LIKE "RESTORE FROM%";
1316
 
 
1317
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1318
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1319
 
                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
1320
 
--source include/wait_condition.inc
1321
 
 
1322
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1323
 
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
1324
 
 
1325
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1326
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1327
 
                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
1328
 
--source include/wait_condition.inc
1329
 
 
1330
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1331
 
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
1332
 
 
1333
 
# Now set the breakpoint for DDL blocker.
1334
 
# This releases lock on DDL_in_progress stopping all DDLs.
1335
 
--echo con6: Getting lock on DDL blocker.
1336
 
SELECT get_lock("DDL_blocked", 0);
1337
 
 
1338
 
connection con6;
1339
 
 
1340
 
--echo con6: Checking locks
1341
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
1342
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1343
 
                      WHERE info LIKE "RESTORE FROM%";
1344
 
--source include/wait_condition.inc
1345
 
 
1346
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1347
 
WHERE info LIKE "RESTORE FROM%";
 
1144
--echo con6: Wait for con1 to reach its synchronization point.
 
1145
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
1146
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1147
  WHERE info LIKE "RESTORE FROM%";
 
1148
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1149
  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
 
1150
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1151
  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
 
1152
 
 
1153
--echo con6: Resume all and wait for restore to start after DDL finish.
 
1154
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
1155
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1156
  WHERE info LIKE "RESTORE FROM%";
1348
1157
 
1349
1158
connection con4;
1350
1159
 
 
1160
--echo con4: Activate synchronization point for DDL.
 
1161
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
1162
                 WAIT_FOR status_shown2';
1351
1163
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
1352
1164
send CREATE DATABASE bup_ddl_blocker_3;
1353
1165
 
1354
1166
connection con5;
1355
1167
 
 
1168
--echo con5: Wait for con4 to reach its synchronization point.
 
1169
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1170
--echo con5: Activate synchronization point for DDL.
 
1171
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1172
                 WAIT_FOR status_shown2';
1356
1173
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
1357
1174
send DROP DATABASE bup_ddl_blocker_4;
1358
1175
 
1359
1176
connection con6;
1360
1177
 
1361
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1362
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1363
 
                      WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
1364
 
--source include/wait_condition.inc
1365
 
 
1366
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1367
 
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
1368
 
 
1369
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1370
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1371
 
                      WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1372
 
--source include/wait_condition.inc
1373
 
 
1374
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1375
 
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1376
 
 
1377
 
--echo con6: Releasing lock
1378
 
SELECT release_lock("DDL_blocked");
1379
 
 
1380
 
# Reconnect to connections and allow them to finish.
 
1178
--echo con6: Wait for con5 to reach its synchronization point.
 
1179
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1180
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1181
  WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
 
1182
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1183
  WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
 
1184
 
 
1185
--echo con6: Resume all.
 
1186
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1187
 
 
1188
# Reconnect to connections and fetch their results.
1381
1189
 
1382
1190
connection con2;
1383
1191
--echo con2: Completing DDL
1395
1203
--echo con5: Completing DDL
1396
1204
reap;
1397
1205
 
1398
 
# Reconnect to con1 and let backup finish.
 
1206
# Reconnect to con1 and fetch its result.
1399
1207
 
1400
1208
connection con1;
1401
1209
--replace_column 1 #
1410
1218
--echo con1: Database bup_ddl_blocker_4 should not be in restored data.
1411
1219
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
1412
1220
 
1413
 
 
 
1221
# Cleanup
 
1222
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
1414
1223
 
1415
1224
 
1416
1225
 
1450
1259
--echo con1: Show that the new data doesn't exist before backup.
1451
1260
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
1452
1261
 
1453
 
connection con6;
1454
 
 
1455
 
# Set the breakpoint for DDL in progress.
1456
 
--echo con6: Getting lock on DDL in progress.
1457
 
SELECT get_lock("DDL_in_progress", 0);
1458
 
 
1459
1262
connection con2;
1460
1263
 
 
1264
--echo con2: Activate synchronization point for DDL.
 
1265
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
1461
1266
--echo con2: Get a DDL going and stop in the middle
1462
1267
send TRUNCATE TABLE bup_ddl_blocker_2.t1;
1463
1268
 
1464
1269
connection con3;
1465
1270
 
 
1271
--echo con3: Wait for con2 to reach its synchronization point.
 
1272
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1273
--echo con3: Activate synchronization point for DDL.
 
1274
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
1466
1275
--echo con3: Get a DDL going and stop in the middle
1467
1276
send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
1468
1277
 
1470
1279
 
1471
1280
connection con1;
1472
1281
 
 
1282
--echo con1: Wait for con3 to reach its synchronization point.
 
1283
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
1284
--echo con1: Activate synchronization points for backup.
 
1285
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
1286
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
1473
1287
--echo con1: Backing up database -- will block with lock
1474
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
1475
1288
send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
1476
1289
 
1477
1290
connection con6;
1478
1291
 
1479
 
# Wait for lock to be acquired and execution to reach breakpoint
1480
 
--echo con6: Checking locks
1481
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1482
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1483
 
                      WHERE info LIKE "BACKUP DATABASE%";
1484
 
--source include/wait_condition.inc
1485
 
 
1486
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1487
 
WHERE info LIKE "BACKUP DATABASE%";
1488
 
 
1489
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1490
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1491
 
                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
1492
 
--source include/wait_condition.inc
1493
 
 
1494
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1495
 
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
1496
 
 
1497
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1498
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1499
 
                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
1500
 
--source include/wait_condition.inc
1501
 
 
1502
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1503
 
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
1504
 
 
1505
 
# Now set the breakpoint for DDL blocker.
1506
 
# This releases lock on DDL_in_progress stopping all DDLs.
1507
 
--echo con6: Getting lock on DDL blocker.
1508
 
SELECT get_lock("DDL_blocked", 0);
1509
 
 
1510
 
connection con6;
1511
 
 
1512
 
--echo con6: Checking locks
1513
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
1514
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1515
 
                      WHERE info LIKE "BACKUP DATABASE%";
1516
 
--source include/wait_condition.inc
1517
 
 
1518
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1519
 
WHERE info LIKE "BACKUP DATABASE%";
 
1292
--echo con6: Wait for con1 to reach its synchronization point.
 
1293
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
1294
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1295
  WHERE info LIKE "BACKUP DATABASE%";
 
1296
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1297
  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 
1298
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1299
  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 
1300
 
 
1301
--echo con6: Resume all and wait for backup to start after DDL finish.
 
1302
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
1303
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1304
  WHERE info LIKE "BACKUP DATABASE%";
1520
1305
 
1521
1306
connection con4;
1522
1307
 
 
1308
--echo con4: Activate synchronization point for DDL.
 
1309
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
1310
                 WAIT_FOR status_shown2';
1523
1311
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
1524
1312
send TRUNCATE TABLE bup_ddl_blocker_4.t1;
1525
1313
 
1526
1314
connection con5;
1527
1315
 
 
1316
--echo con5: Wait for con4 to reach its synchronization point.
 
1317
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1318
--echo con5: Activate synchronization point for DDL.
 
1319
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1320
                 WAIT_FOR status_shown2';
1528
1321
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
1529
1322
send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
 
1323
 
1530
1324
connection con6;
1531
1325
 
1532
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1533
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1534
 
                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
1535
 
--source include/wait_condition.inc
1536
 
 
1537
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1538
 
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
1539
 
 
1540
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1541
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1542
 
                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
1543
 
--source include/wait_condition.inc
1544
 
 
1545
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1546
 
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
1547
 
 
1548
 
--echo con6: Releasing lock
1549
 
SELECT release_lock("DDL_blocked");
1550
 
 
1551
 
# Reconnect to connections and allow them to finish.
 
1326
--echo con6: Wait for con5 to reach its synchronization point.
 
1327
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1328
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1329
  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 
1330
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1331
  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 
1332
 
 
1333
--echo con6: Resume all.
 
1334
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1335
 
 
1336
# Reconnect to connections and fetch their results.
1552
1337
 
1553
1338
connection con2;
1554
1339
--echo con2: Completing DDL
1566
1351
--echo con5: Completing DDL
1567
1352
reap;
1568
1353
 
1569
 
# Reconnect to con1 and let backup finish.
 
1354
# Reconnect to con1 and fetch its result.
1570
1355
 
1571
1356
connection con1;
1572
1357
--replace_column 1 #
1613
1398
DROP DATABASE bup_ddl_blocker_2;
1614
1399
DROP DATABASE bup_ddl_blocker_4;
1615
1400
 
1616
 
 
1617
1401
##############################################################
1618
1402
--echo 
1619
1403
--echo Starting Test 5 - Restore
1655
1439
--replace_column 1 #
1656
1440
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
1657
1441
 
1658
 
connection con6;
1659
 
 
1660
 
# Set the breakpoint for DDL in progress.
1661
 
--echo con6: Getting lock on DDL in progress.
1662
 
SELECT get_lock("DDL_in_progress", 0);
1663
 
 
1664
1442
connection con2;
1665
1443
 
 
1444
--echo con2: Activate synchronization point for DDL.
 
1445
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
1666
1446
--echo con2: Get a DDL going and stop in the middle
1667
1447
send TRUNCATE TABLE bup_ddl_blocker_2.t1;
1668
1448
 
1669
1449
connection con3;
1670
1450
 
 
1451
--echo con3: Wait for con2 to reach its synchronization point.
 
1452
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1453
--echo con3: Activate synchronization point for DDL.
 
1454
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
1671
1455
--echo con3: Get a DDL going and stop in the middle
1672
1456
send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
1673
1457
 
1675
1459
 
1676
1460
connection con1;
1677
1461
 
 
1462
--echo con1: Wait for con3 to reach its synchronization point.
 
1463
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
1464
--echo con1: Activate synchronization points for restore.
 
1465
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
1466
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
1678
1467
--echo con1: Restoring database -- will block with lock
1679
1468
send RESTORE FROM "bup_ddl_blocker_orig.bak";
1680
1469
 
1681
1470
connection con6;
1682
1471
 
1683
 
# Wait for lock to be acquired and execution to reach breakpoint
1684
 
--echo con6: Checking locks
1685
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1686
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1687
 
                      WHERE info LIKE "RESTORE FROM%";
1688
 
--source include/wait_condition.inc
1689
 
 
1690
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1691
 
WHERE info LIKE "RESTORE FROM%";
1692
 
 
1693
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1694
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1695
 
                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
1696
 
--source include/wait_condition.inc
1697
 
 
1698
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1699
 
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
1700
 
 
1701
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1702
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1703
 
                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
1704
 
--source include/wait_condition.inc
1705
 
 
1706
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1707
 
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
1708
 
 
1709
 
# Now set the breakpoint for DDL blocker.
1710
 
# This releases lock on DDL_in_progress stopping all DDLs.
1711
 
--echo con6: Getting lock on DDL blocker.
1712
 
SELECT get_lock("DDL_blocked", 0);
1713
 
 
1714
 
connection con6;
1715
 
 
1716
 
--echo con6: Checking locks
1717
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
1718
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1719
 
                      WHERE info LIKE "RESTORE FROM%";
1720
 
--source include/wait_condition.inc
1721
 
 
1722
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1723
 
WHERE info LIKE "RESTORE FROM%";
 
1472
--echo con6: Wait for con1 to reach its synchronization point.
 
1473
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
1474
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1475
  WHERE info LIKE "RESTORE FROM%";
 
1476
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1477
  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
 
1478
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1479
  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
 
1480
 
 
1481
--echo con6: Resume all and wait for restore to start after DDL finish.
 
1482
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
1483
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1484
  WHERE info LIKE "RESTORE FROM%";
1724
1485
 
1725
1486
connection con4;
1726
1487
 
 
1488
--echo con4: Activate synchronization point for DDL.
 
1489
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
1490
                 WAIT_FOR status_shown2';
1727
1491
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
1728
1492
send TRUNCATE TABLE bup_ddl_blocker_4.t1;
1729
1493
 
1730
1494
connection con5;
1731
1495
 
 
1496
--echo con5: Wait for con4 to reach its synchronization point.
 
1497
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1498
--echo con5: Activate synchronization point for DDL.
 
1499
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1500
                 WAIT_FOR status_shown2';
1732
1501
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
1733
1502
send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
1734
1503
 
1735
1504
connection con6;
1736
1505
 
1737
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1738
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1739
 
                      WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
1740
 
--source include/wait_condition.inc
1741
 
 
1742
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1743
 
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
1744
 
 
1745
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1746
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1747
 
                      WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
1748
 
--source include/wait_condition.inc
1749
 
 
1750
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1751
 
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
1752
 
 
1753
 
--echo con6: Releasing lock
1754
 
SELECT release_lock("DDL_blocked");
1755
 
 
1756
 
# Reconnect to connections and allow them to finish.
 
1506
--echo con6: Wait for con5 to reach its synchronization point.
 
1507
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1508
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1509
  WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
 
1510
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1511
  WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
 
1512
 
 
1513
--echo con6: Resume all.
 
1514
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1515
 
 
1516
# Reconnect to connections and fetch their results.
1757
1517
 
1758
1518
connection con2;
1759
1519
--echo con2: Completing DDL
1771
1531
--echo con5: Completing DDL
1772
1532
reap;
1773
1533
 
1774
 
# Reconnect to con1 and let backup finish.
 
1534
# Reconnect to con1 and fetch its result.
1775
1535
 
1776
1536
connection con1;
1777
1537
--replace_column 1 #
1796
1556
DROP DATABASE bup_ddl_blocker_2;
1797
1557
DROP DATABASE bup_ddl_blocker_4;
1798
1558
 
1799
 
 
 
1559
# Cleanup
 
1560
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
1800
1561
 
1801
1562
 
1802
1563
 
1848
1609
 
1849
1610
CREATE INDEX 4t1col_b ON bup_ddl_blocker_4.t1 (col_b); 
1850
1611
 
1851
 
connection con6;
1852
 
 
1853
 
# Set the breakpoint for DDL in progress.
1854
 
--echo con6: Getting lock on DDL in progress.
1855
 
SELECT get_lock("DDL_in_progress", 0);
1856
 
 
1857
1612
connection con2;
1858
1613
 
 
1614
--echo con2: Activate synchronization point for DDL.
 
1615
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
1859
1616
--echo con2: Get a DDL going and stop in the middle
1860
1617
send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b); 
1861
1618
 
1862
1619
connection con3;
1863
1620
 
 
1621
--echo con3: Wait for con2 to reach its synchronization point.
 
1622
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1623
--echo con3: Activate synchronization point for DDL.
 
1624
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
1864
1625
--echo con3: Get a DDL going and stop in the middle
1865
1626
send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
1866
1627
 
1868
1629
 
1869
1630
connection con1;
1870
1631
 
1871
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
 
1632
--echo con1: Wait for con3 to reach its synchronization point.
 
1633
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
1634
--echo con1: Activate synchronization points for backup.
 
1635
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
1636
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
1872
1637
--echo con1: Backing up database -- will block with lock
1873
1638
send BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
1874
1639
                     bup_ddl_blocker_3, bup_ddl_blocker_4
1876
1641
 
1877
1642
connection con6;
1878
1643
 
1879
 
# Wait for lock to be acquired and execution to reach breakpoint
1880
 
--echo con6: Checking locks
1881
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1882
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1883
 
                      WHERE info LIKE "BACKUP DATABASE%";
1884
 
--source include/wait_condition.inc
1885
 
 
1886
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1887
 
WHERE info LIKE "BACKUP DATABASE%";
1888
 
 
1889
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1890
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1891
 
                      WHERE info LIKE "CREATE INDEX 1t1col_b%";
1892
 
--source include/wait_condition.inc
1893
 
 
1894
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1895
 
WHERE info LIKE "CREATE INDEX 1t1col_b%";
1896
 
 
1897
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
1898
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1899
 
                      WHERE info LIKE "DROP INDEX 2t1col_b%";
1900
 
--source include/wait_condition.inc
1901
 
 
1902
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1903
 
WHERE info LIKE "DROP INDEX 2t1col_b%";
1904
 
 
1905
 
# Now set the breakpoint for DDL blocker.
1906
 
# This releases lock on DDL_in_progress stopping all DDLs.
1907
 
--echo con6: Getting lock on DDL blocker.
1908
 
SELECT get_lock("DDL_blocked", 0);
1909
 
 
1910
 
connection con6;
1911
 
 
1912
 
--echo con6: Checking locks
1913
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
1914
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1915
 
                      WHERE info LIKE "BACKUP DATABASE%";
1916
 
--source include/wait_condition.inc
1917
 
 
1918
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1919
 
WHERE info LIKE "BACKUP DATABASE%";
 
1644
--echo con6: Wait for con1 to reach its synchronization point.
 
1645
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
1646
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1647
  WHERE info LIKE "BACKUP DATABASE%";
 
1648
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1649
  WHERE info LIKE "CREATE INDEX 1t1col_b%";
 
1650
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1651
  WHERE info LIKE "DROP INDEX 2t1col_b%";
 
1652
 
 
1653
--echo con6: Resume all and wait for backup to start after DDL finish.
 
1654
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
1655
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1656
  WHERE info LIKE "BACKUP DATABASE%";
1920
1657
 
1921
1658
connection con4;
1922
1659
 
 
1660
--echo con4: Activate synchronization point for DDL.
 
1661
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
1662
                 WAIT_FOR status_shown2';
1923
1663
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
1924
1664
send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
1925
1665
 
1926
1666
connection con5;
1927
1667
 
 
1668
--echo con5: Wait for con4 to reach its synchronization point.
 
1669
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1670
--echo con5: Activate synchronization point for DDL.
 
1671
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1672
                 WAIT_FOR status_shown2';
1928
1673
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
1929
1674
send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
1930
1675
 
1931
1676
connection con6;
1932
1677
 
1933
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1934
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1935
 
                      WHERE info LIKE "CREATE INDEX 3t1col_b%";
1936
 
--source include/wait_condition.inc
1937
 
 
1938
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1939
 
WHERE info LIKE "CREATE INDEX 3t1col_b%";
1940
 
 
1941
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
1942
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
1943
 
                      WHERE info LIKE "DROP INDEX 4t1col_b%";
1944
 
--source include/wait_condition.inc
1945
 
 
1946
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1947
 
WHERE info LIKE "DROP INDEX 4t1col_b%";
1948
 
 
1949
 
--echo con6: Releasing lock
1950
 
SELECT release_lock("DDL_blocked");
1951
 
 
1952
 
# Reconnect to connections and allow them to finish.
 
1678
--echo con6: Wait for con5 to reach its synchronization point.
 
1679
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1680
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1681
  WHERE info LIKE "CREATE INDEX 3t1col_b%";
 
1682
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1683
  WHERE info LIKE "DROP INDEX 4t1col_b%";
 
1684
 
 
1685
--echo con6: Resume all.
 
1686
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1687
 
 
1688
# Reconnect to connections and fetch their results.
1953
1689
 
1954
1690
connection con2;
1955
1691
--echo con2: Completing DDL
1967
1703
--echo con5: Completing DDL
1968
1704
reap;
1969
1705
 
1970
 
# Reconnect to con1 and let backup finish.
 
1706
# Reconnect to con1 and fetch its result.
1971
1707
 
1972
1708
connection con1;
1973
1709
--replace_column 1 #
2017
1753
--echo Starting Test 6 - Restore
2018
1754
--echo 
2019
1755
##############################################################
 
1756
 
2020
1757
--disable_warnings
2021
1758
DROP DATABASE IF EXISTS bup_ddl_blocker_1;
2022
1759
DROP DATABASE IF EXISTS bup_ddl_blocker_2;
2066
1803
                bup_ddl_blocker_3, bup_ddl_blocker_4
2067
1804
                TO "bup_ddl_blocker_orig.bak";
2068
1805
 
2069
 
connection con6;
2070
 
 
2071
 
# Set the breakpoint for DDL in progress.
2072
 
--echo con6: Getting lock on DDL in progress.
2073
 
SELECT get_lock("DDL_in_progress", 0);
2074
 
 
2075
1806
connection con2;
2076
1807
 
 
1808
--echo con2: Activate synchronization point for DDL.
 
1809
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
2077
1810
--echo con2: Get a DDL going and stop in the middle
2078
1811
send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
2079
1812
 
2080
1813
connection con3;
2081
1814
 
 
1815
--echo con3: Wait for con2 to reach its synchronization point.
 
1816
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1817
--echo con3: Activate synchronization point for DDL.
 
1818
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
2082
1819
--echo con3: Get a DDL going and stop in the middle
2083
1820
send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
2084
1821
 
2086
1823
 
2087
1824
connection con1;
2088
1825
 
 
1826
--echo con1: Wait for con3 to reach its synchronization point.
 
1827
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
1828
--echo con1: Activate synchronization points for restore.
 
1829
SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
 
1830
SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
2089
1831
--echo con1: Restoring database -- will block with lock
2090
1832
send RESTORE FROM "bup_ddl_blocker_orig.bak";
2091
1833
 
2092
1834
connection con6;
2093
1835
 
2094
 
# Wait for lock to be acquired and execution to reach breakpoint
2095
 
--echo con6: Checking locks
2096
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
2097
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2098
 
                      WHERE info LIKE "RESTORE FROM%";
2099
 
--source include/wait_condition.inc
2100
 
 
2101
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2102
 
WHERE info LIKE "RESTORE FROM%";
2103
 
 
2104
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
2105
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2106
 
                      WHERE info LIKE "CREATE INDEX 1t1col_b%";
2107
 
--source include/wait_condition.inc
2108
 
 
2109
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2110
 
WHERE info LIKE "CREATE INDEX 1t1col_b%";
2111
 
 
2112
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
2113
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2114
 
                      WHERE info LIKE "DROP INDEX 2t1col_b%";
2115
 
--source include/wait_condition.inc
2116
 
 
2117
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2118
 
WHERE info LIKE "DROP INDEX 2t1col_b%";
2119
 
 
2120
 
# Now set the breakpoint for DDL blocker.
2121
 
# This releases lock on DDL_in_progress stopping all DDLs.
2122
 
--echo con6: Getting lock on DDL blocker.
2123
 
SELECT get_lock("DDL_blocked", 0);
2124
 
 
2125
 
connection con6;
2126
 
 
2127
 
--echo con6: Checking locks
2128
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
2129
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2130
 
                      WHERE info LIKE "RESTORE FROM%";
2131
 
--source include/wait_condition.inc
2132
 
 
2133
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2134
 
WHERE info LIKE "RESTORE FROM%";
 
1836
--echo con6: Wait for con1 to reach its synchronization point.
 
1837
SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
 
1838
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1839
  WHERE info LIKE "RESTORE FROM%";
 
1840
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1841
  WHERE info LIKE "CREATE INDEX 1t1col_b%";
 
1842
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1843
  WHERE info LIKE "DROP INDEX 2t1col_b%";
 
1844
 
 
1845
--echo con6: Resume all and wait for restore to start after DDL finish.
 
1846
SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
 
1847
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1848
  WHERE info LIKE "RESTORE FROM%";
2135
1849
 
2136
1850
connection con4;
2137
1851
 
 
1852
--echo con4: Activate synchronization point for DDL.
 
1853
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
 
1854
                 WAIT_FOR status_shown2';
2138
1855
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
2139
1856
send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
2140
1857
 
2141
1858
connection con5;
2142
1859
 
 
1860
--echo con5: Wait for con4 to reach its synchronization point.
 
1861
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
1862
--echo con5: Activate synchronization point for DDL.
 
1863
SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
 
1864
                 WAIT_FOR status_shown2';
2143
1865
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
2144
1866
send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
2145
1867
 
2146
1868
connection con6;
2147
1869
 
2148
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
2149
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2150
 
                      WHERE info LIKE "CREATE INDEX 3t1col_b%";
2151
 
--source include/wait_condition.inc
2152
 
 
2153
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2154
 
WHERE info LIKE "CREATE INDEX 3t1col_b%";
2155
 
 
2156
 
let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
2157
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2158
 
                      WHERE info LIKE "DDROP INDEX 4t1col_b%";
2159
 
--source include/wait_condition.inc
2160
 
 
2161
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2162
 
WHERE info LIKE "DROP INDEX 4t1col_b%";
2163
 
 
2164
 
--echo con6: Releasing lock
2165
 
SELECT release_lock("DDL_blocked");
2166
 
 
2167
 
# Reconnect to connections and allow them to finish.
 
1870
--echo con6: Wait for con5 to reach its synchronization point.
 
1871
SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
 
1872
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1873
  WHERE info LIKE "CREATE INDEX 3t1col_b%";
 
1874
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
1875
  WHERE info LIKE "DROP INDEX 4t1col_b%";
 
1876
 
 
1877
--echo con6: Resume all.
 
1878
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
 
1879
 
 
1880
# Reconnect to connections and fetch their results.
2168
1881
 
2169
1882
connection con2;
2170
1883
--echo con2: Completing DDL
2182
1895
--echo con5: Completing DDL
2183
1896
reap;
2184
1897
 
2185
 
# Reconnect to con1 and let backup finish.
 
1898
# Reconnect to con1 and fetch its result.
2186
1899
 
2187
1900
connection con1;
2188
1901
--replace_column 1 #
2207
1920
DROP DATABASE bup_ddl_blocker_3;
2208
1921
DROP DATABASE bup_ddl_blocker_4;
2209
1922
 
2210
 
 
 
1923
# Cleanup
 
1924
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
2211
1925
 
2212
1926
 
2213
1927
 
2265
1979
SELECT * FROM test.t2;
2266
1980
SELECT * FROM bup_ddl_blocker.t3;
2267
1981
 
2268
 
connection con5;
2269
 
 
2270
 
# Set the breakpoint for DDL in progress.
2271
 
--echo con5: Getting lock on DDL in progress.
2272
 
SELECT get_lock("DDL_not_blocked", 0);
2273
 
 
2274
1982
connection con2;
2275
1983
 
 
1984
--echo con2: Activate synchronization point for DDL.
 
1985
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
2276
1986
--echo con2: Get a DDL going and stop in the middle
2277
1987
send ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int;
2278
1988
 
2279
1989
connection con3;
2280
1990
 
 
1991
--echo con3: Wait for con2 to reach its synchronization point.
 
1992
SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
 
1993
--echo con3: Activate synchronization point for DDL.
 
1994
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
2281
1995
--echo con3: Get a DDL going and stop in the middle
2282
1996
send ALTER TABLE test.t2 ADD COLUMN col_b int;
2283
1997
 
2284
1998
connection con4;
2285
1999
 
 
2000
--echo con3: Wait for con3 to reach its synchronization point.
 
2001
SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
 
2002
--echo con3: Activate synchronization point for DDL.
 
2003
SET DEBUG_SYNC= 'after_start_ddl SIGNAL con4_started WAIT_FOR status_shown';
2286
2004
--echo con4: Get a DDL going and stop in the middle
2287
2005
send ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int;
2288
2006
 
2289
2007
connection con5;
2290
2008
 
2291
 
# Wait for lock to be acquired and execution to reach breakpoint
2292
 
--echo con5: Checking locks
2293
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
2294
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2295
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
2296
 
--source include/wait_condition.inc
2297
 
 
2298
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2299
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
2300
 
 
2301
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
2302
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2303
 
                      WHERE info LIKE "ALTER TABLE test.t2%";
2304
 
--source include/wait_condition.inc
2305
 
 
2306
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2307
 
WHERE info LIKE "ALTER TABLE test.t2%";
2308
 
 
2309
 
let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
2310
 
                      FROM INFORMATION_SCHEMA.PROCESSLIST
2311
 
                      WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
2312
 
--source include/wait_condition.inc
2313
 
 
2314
 
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2315
 
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
2316
 
 
2317
 
--echo con5: Releasing lock
2318
 
SELECT release_lock("DDL_not_blocked");
2319
 
 
2320
 
# Reconnect to con2, con3, and con4 and allow them to finish.
 
2009
--echo con5: Wait for con4 to reach its synchronization point.
 
2010
SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
 
2011
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
2012
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
 
2013
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
2014
  WHERE info LIKE "ALTER TABLE test.t2%";
 
2015
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
 
2016
  WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
 
2017
 
 
2018
--echo con5: Resume all.
 
2019
SET DEBUG_SYNC= 'now SIGNAL status_shown';
 
2020
 
 
2021
# Reconnect to con2, con3, and con4 and fetch their results.
2321
2022
 
2322
2023
connection con2;
2323
2024
--echo con2: Completing DDL
2362
2063
DROP TABLE test.t2;
2363
2064
DROP DATABASE bup_ddl_blocker;
2364
2065
 
2365
 
#
2366
 
# Normally, when tests are run the test/ directory corresponding to the test database
2367
 
# is empty. In particular, it doesn't contain the db.opt file storing database settings.
2368
 
# Some tests rely on that, as they use server options to determine these settings.
2369
 
# If we backup test database (e.g., with "BACKUP DATABASE * ...") and then restore it,
2370
 
# then it will be created using "CREATE DATABASE test" statement and this will create
2371
 
# the db.opt file. As a result, some tests run after that will fail. To avoid this situation
2372
 
# we remove the test/db.opt file as a part of clean-up.
2373
 
#
 
2066
# Normally, when tests are run the test/ directory corresponding to the
 
2067
# test database is empty. In particular, it doesn't contain the db.opt
 
2068
# file storing database settings. Some tests rely on that, as they use
 
2069
# server options to determine these settings. If we backup test database
 
2070
# (e.g., with "BACKUP DATABASE * ...") and then restore it, then it will
 
2071
# be created using "CREATE DATABASE test" statement and this will create
 
2072
# the db.opt file. As a result, some tests run after that will fail. To
 
2073
# avoid this situation we remove the test/db.opt file as a part of
 
2074
# clean-up.
2374
2075
--error 0,1
2375
2076
--remove_file $MYSQLTEST_VARDIR/master-data/test/db.opt
2376
2077
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak
2377
 
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
2378
 
 
2379
 
 
2380
 
 
2381
 
 
 
2078
 
 
2079
connection default;
 
2080
disconnect con1;
 
2081
disconnect con2;
 
2082
disconnect con3;
 
2083
disconnect con4;
 
2084
disconnect con5;
 
2085
disconnect con6;
 
2086
 
 
2087
SET DEBUG_SYNC= 'reset';
2382
2088