96
90
# when the backup or restore is already running. Tests results
97
91
# show the realization of the assumptions above.
99
# con1 con2 con3 con4 con6
93
# con1 con2 con3 con4 con5 con6
100
94
# (setup) | | | | |
102
# | | | | | lock("DDL_in_progress");
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>
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) | | | | |
117
110
# Note: The resume of the commands is indicated with <...> and
118
111
# may occur in any order.
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.
122
119
##############################################################
129
126
--source include/backup_ddl_create_data.inc
130
127
DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
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);
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;
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;
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";
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
164
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
165
WHERE info LIKE "BACKUP DATABASE%";
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
172
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
173
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
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
180
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
181
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
216
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
217
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
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
224
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
225
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
227
--echo con6: Releasing lock
228
SELECT release_lock("DDL_blocked");
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%";
200
--echo con6: Resume all.
201
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
203
# Reconnect to connections and fetch their results.
233
206
--echo con2: Completing DDL
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";
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
333
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
334
WHERE info LIKE "RESTORE FROM%";
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
341
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
342
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
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
349
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
350
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
385
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
386
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
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
393
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
394
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
396
--echo con6: Releasing lock
397
SELECT release_lock("DDL_blocked");
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%";
345
--echo con6: Resume all.
346
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
348
# Reconnect to connections and fetch their results.
402
351
--echo con2: Completing DDL
445
399
# Create data for this test and tailor it to the test.
446
400
--source include/backup_ddl_create_data.inc
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);
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;
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;
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";
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
481
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
482
WHERE info LIKE "BACKUP DATABASE%";
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
489
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
490
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
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
497
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
498
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
534
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
535
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
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
542
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
543
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
545
--echo con6: Releasing lock
546
SELECT release_lock("DDL_blocked");
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%";
473
--echo con6: Resume all.
474
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
476
# Reconnect to connections and fetch their results.
551
479
--echo con2: Completing DDL
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";
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
645
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
646
WHERE info LIKE "RESTORE FROM%";
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
653
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
654
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
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
661
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
662
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
697
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
698
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
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
705
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
706
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
708
--echo con6: Releasing lock
709
SELECT release_lock("DDL_blocked");
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%";
612
--echo con6: Resume all.
613
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
615
# Reconnect to connections and fetch their results.
714
618
--echo con2: Completing DDL
755
660
# Create data for this test and tailor it to the test.
756
661
--source include/backup_ddl_create_data.inc
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);
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;
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;
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";
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
791
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
792
WHERE info LIKE "BACKUP DATABASE%";
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
799
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
800
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
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
807
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
808
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
843
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
844
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
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
851
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
852
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
854
--echo con6: Releasing lock
855
SELECT release_lock("DDL_blocked");
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%";
734
--echo con6: Resume all.
735
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
737
# Reconnect to connections and fetch their results.
860
740
--echo con2: Completing DDL
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";
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
952
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
953
WHERE info LIKE "RESTORE FROM%";
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
960
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
961
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
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
968
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
969
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
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);
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
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%";
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%";
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;
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;
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
1004
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1005
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
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
1012
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1013
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
1015
--echo con6: Releasing lock
1016
SELECT release_lock("DDL_blocked");
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%";
871
--echo con6: Resume all.
872
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
874
# Reconnect to connections and fetch their results.
1020
876
connection con2;
1021
877
--echo con2: Completing DDL
1088
945
--echo con1: Show that the new data doesn't exist before backup.
1089
946
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
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);
1097
948
connection con2;
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;
1102
955
connection con3;
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;
1109
966
connection con1;
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";
1115
976
connection con6;
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
1124
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1125
WHERE info LIKE "BACKUP DATABASE%";
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
1132
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1133
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
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
1140
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1141
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
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);
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
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%";
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%";
1159
992
connection con4;
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;
1164
1000
connection con5;
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;
1169
1010
connection con6;
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
1176
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1177
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
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
1184
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1185
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1187
--echo con6: Releasing lock
1188
SELECT release_lock("DDL_blocked");
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%";
1019
--echo con6: Resume all.
1020
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1022
# Reconnect to connections and fetch their results.
1192
1024
connection con2;
1193
1025
--echo con2: Completing DDL
1279
1111
--replace_column 1 #
1280
1112
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
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);
1288
1114
connection con2;
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;
1293
1121
connection con3;
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;
1300
1132
connection con1;
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";
1305
1142
connection con6;
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
1314
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1315
WHERE info LIKE "RESTORE FROM%";
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
1322
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1323
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
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
1330
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1331
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
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);
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
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%";
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%";
1349
1158
connection con4;
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;
1354
1166
connection con5;
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;
1359
1176
connection con6;
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
1366
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1367
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
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
1374
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1375
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
1377
--echo con6: Releasing lock
1378
SELECT release_lock("DDL_blocked");
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%";
1185
--echo con6: Resume all.
1186
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1188
# Reconnect to connections and fetch their results.
1382
1190
connection con2;
1383
1191
--echo con2: Completing DDL
1450
1259
--echo con1: Show that the new data doesn't exist before backup.
1451
1260
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
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);
1459
1262
connection con2;
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;
1464
1269
connection con3;
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;
1471
1280
connection con1;
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";
1477
1290
connection con6;
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
1486
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1487
WHERE info LIKE "BACKUP DATABASE%";
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
1494
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1495
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
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
1502
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1503
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
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);
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
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%";
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%";
1521
1306
connection con4;
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;
1526
1314
connection con5;
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;
1530
1324
connection con6;
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
1537
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1538
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
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
1545
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1546
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
1548
--echo con6: Releasing lock
1549
SELECT release_lock("DDL_blocked");
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%";
1333
--echo con6: Resume all.
1334
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1336
# Reconnect to connections and fetch their results.
1553
1338
connection con2;
1554
1339
--echo con2: Completing DDL
1655
1439
--replace_column 1 #
1656
1440
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
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);
1664
1442
connection con2;
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;
1669
1449
connection con3;
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;
1676
1460
connection con1;
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";
1681
1470
connection con6;
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
1690
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1691
WHERE info LIKE "RESTORE FROM%";
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
1698
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1699
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
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
1706
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1707
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
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);
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
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%";
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%";
1725
1486
connection con4;
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;
1730
1494
connection con5;
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;
1735
1504
connection con6;
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
1742
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1743
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
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
1750
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1751
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
1753
--echo con6: Releasing lock
1754
SELECT release_lock("DDL_blocked");
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%";
1513
--echo con6: Resume all.
1514
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1516
# Reconnect to connections and fetch their results.
1758
1518
connection con2;
1759
1519
--echo con2: Completing DDL
1877
1642
connection con6;
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
1886
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1887
WHERE info LIKE "BACKUP DATABASE%";
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
1894
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1895
WHERE info LIKE "CREATE INDEX 1t1col_b%";
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
1902
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1903
WHERE info LIKE "DROP INDEX 2t1col_b%";
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);
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
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%";
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%";
1921
1658
connection con4;
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);
1926
1666
connection con5;
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;
1931
1676
connection con6;
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
1938
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1939
WHERE info LIKE "CREATE INDEX 3t1col_b%";
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
1946
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
1947
WHERE info LIKE "DROP INDEX 4t1col_b%";
1949
--echo con6: Releasing lock
1950
SELECT release_lock("DDL_blocked");
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%";
1685
--echo con6: Resume all.
1686
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1688
# Reconnect to connections and fetch their results.
1954
1690
connection con2;
1955
1691
--echo con2: Completing DDL
2066
1803
bup_ddl_blocker_3, bup_ddl_blocker_4
2067
1804
TO "bup_ddl_blocker_orig.bak";
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);
2075
1806
connection con2;
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);
2080
1813
connection con3;
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;
2087
1824
connection con1;
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";
2092
1834
connection con6;
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
2101
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2102
WHERE info LIKE "RESTORE FROM%";
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
2109
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2110
WHERE info LIKE "CREATE INDEX 1t1col_b%";
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
2117
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2118
WHERE info LIKE "DROP INDEX 2t1col_b%";
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);
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
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%";
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%";
2136
1850
connection con4;
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);
2141
1858
connection con5;
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;
2146
1868
connection con6;
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
2153
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2154
WHERE info LIKE "CREATE INDEX 3t1col_b%";
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
2161
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2162
WHERE info LIKE "DROP INDEX 4t1col_b%";
2164
--echo con6: Releasing lock
2165
SELECT release_lock("DDL_blocked");
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%";
1877
--echo con6: Resume all.
1878
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
1880
# Reconnect to connections and fetch their results.
2169
1882
connection con2;
2170
1883
--echo con2: Completing DDL
2265
1979
SELECT * FROM test.t2;
2266
1980
SELECT * FROM bup_ddl_blocker.t3;
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);
2274
1982
connection con2;
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;
2279
1989
connection con3;
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;
2284
1998
connection con4;
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;
2289
2007
connection con5;
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
2298
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2299
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
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
2306
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2307
WHERE info LIKE "ALTER TABLE test.t2%";
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
2314
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
2315
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
2317
--echo con5: Releasing lock
2318
SELECT release_lock("DDL_not_blocked");
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%";
2018
--echo con5: Resume all.
2019
SET DEBUG_SYNC= 'now SIGNAL status_shown';
2021
# Reconnect to con2, con3, and con4 and fetch their results.
2322
2023
connection con2;
2323
2024
--echo con2: Completing DDL
2362
2063
DROP TABLE test.t2;
2363
2064
DROP DATABASE bup_ddl_blocker;
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.
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
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
2087
SET DEBUG_SYNC= 'reset';