Below is the list of changes that have just been committed into a local
6.0 repository of istruewing. When istruewing does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2008-05-23 17:27:26+02:00, istruewing@stripped +4 -0
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls,
adapted backup_ddl_blocker.test and re-enabled it.
mysql-test/r/backup_ddl_blocker.result@stripped, 2008-05-23 17:27:24+02:00, istruewing@stripped +415 -256
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed result.
mysql-test/t/backup_ddl_blocker.test@stripped, 2008-05-23 17:27:24+02:00, istruewing@stripped +484 -777
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed test.
mysql-test/t/disabled.def@stripped, 2008-05-23 17:27:24+02:00, istruewing@stripped +1 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Re-enabled the converted test case.
sql/ddl_blocker.cc@stripped, 2008-05-23 17:27:24+02:00, istruewing@stripped +4 -4
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
diff -Nrup a/mysql-test/r/backup_ddl_blocker.result b/mysql-test/r/backup_ddl_blocker.result
--- a/mysql-test/r/backup_ddl_blocker.result 2007-12-20 21:32:15 +01:00
+++ b/mysql-test/r/backup_ddl_blocker.result 2008-05-23 17:27:24 +02:00
@@ -1,4 +1,4 @@
-SET GLOBAL debug="d,backup_debug:d,backup";
+SET DEBUG_SYNC= 'reset';
Starting Test 1 - Backup
@@ -23,54 +23,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+after_start_ddl CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+before_check_ddl_blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -144,54 +157,67 @@ DROP TABLE bup_ddl_blocker.t1, bup_ddl_b
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+after_start_ddl CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+before_check_ddl_blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -240,54 +266,67 @@ INSERT INTO bup_ddl_blocker.t3 VALUES ("
INSERT INTO bup_ddl_blocker.t4 VALUES ("01 Some data to test");
INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
REPAIR TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+after_start_ddl RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress REPAIR TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl REPAIR TABLE bup_ddl_blocker.t2
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
REPAIR TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+before_check_ddl_blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked REPAIR TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
Table Op Msg_type Msg_text
@@ -352,54 +391,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
REPAIR TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+after_start_ddl RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress REPAIR TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl REPAIR TABLE bup_ddl_blocker.t2
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
REPAIR TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+before_check_ddl_blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked REPAIR TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
Table Op Msg_type Msg_text
@@ -444,54 +496,67 @@ INSERT INTO bup_ddl_blocker.t3 VALUES ("
INSERT INTO bup_ddl_blocker.t4 VALUES ("01 Some data to test");
INSERT INTO bup_ddl_blocker.t4 VALUES ("02 Some data to test");
INSERT INTO bup_ddl_blocker.t4 VALUES ("03 Some data to test");
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
OPTIMIZE TABLE bup_ddl_blocker.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress OPTIMIZE TABLE bup_ddl_blocker.t1
+after_start_ddl OPTIMIZE TABLE bup_ddl_blocker.t1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress DROP TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP TABLE bup_ddl_blocker.t2
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
OPTIMIZE TABLE bup_ddl_blocker.t3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked OPTIMIZE TABLE bup_ddl_blocker.t3
+before_check_ddl_blocked OPTIMIZE TABLE bup_ddl_blocker.t3
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked DROP TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
Table Op Msg_type Msg_text
bup_ddl_blocker.t1 optimize status OK
@@ -551,54 +616,67 @@ INSERT INTO bup_ddl_blocker.t4 VALUES ("
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
OPTIMIZE TABLE bup_ddl_blocker.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP TABLE bup_ddl_blocker.t2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_in_progress OPTIMIZE TABLE bup_ddl_blocker.t1
+after_start_ddl OPTIMIZE TABLE bup_ddl_blocker.t1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
state info
-debug_sync_point: DDL_in_progress DROP TABLE bup_ddl_blocker.t2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP TABLE bup_ddl_blocker.t2
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
OPTIMIZE TABLE bup_ddl_blocker.t3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP TABLE bup_ddl_blocker.t4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
state info
-DDL blocker: DDL is blocked OPTIMIZE TABLE bup_ddl_blocker.t3
+before_check_ddl_blocked OPTIMIZE TABLE bup_ddl_blocker.t3
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
state info
-DDL blocker: DDL is blocked DROP TABLE bup_ddl_blocker.t4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
Table Op Msg_type Msg_text
bup_ddl_blocker.t1 optimize status OK
@@ -644,54 +722,67 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
Database (bup_ddl_blocker_%)
bup_ddl_blocker_2
bup_ddl_blocker_4
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE DATABASE bup_ddl_blocker_1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP DATABASE bup_ddl_blocker_2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE * TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+before_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
state info
-debug_sync_point: DDL_in_progress CREATE DATABASE bup_ddl_blocker_1
+after_start_ddl CREATE DATABASE bup_ddl_blocker_1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress DROP DATABASE bup_ddl_blocker_2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP DATABASE bup_ddl_blocker_2
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+after_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE DATABASE bup_ddl_blocker_3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP DATABASE bup_ddl_blocker_4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
state info
-DDL blocker: DDL is blocked CREATE DATABASE bup_ddl_blocker_3
+before_check_ddl_blocked CREATE DATABASE bup_ddl_blocker_3
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked DROP DATABASE bup_ddl_blocker_4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -751,54 +842,67 @@ bup_ddl_blocker_4
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE DATABASE bup_ddl_blocker_1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP DATABASE bup_ddl_blocker_2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
state info
-debug_sync_point: DDL_in_progress CREATE DATABASE bup_ddl_blocker_1
+after_start_ddl CREATE DATABASE bup_ddl_blocker_1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress DROP DATABASE bup_ddl_blocker_2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP DATABASE bup_ddl_blocker_2
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE DATABASE bup_ddl_blocker_3;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP DATABASE bup_ddl_blocker_4;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
state info
-DDL blocker: DDL is blocked CREATE DATABASE bup_ddl_blocker_3
+before_check_ddl_blocked CREATE DATABASE bup_ddl_blocker_3
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked DROP DATABASE bup_ddl_blocker_4
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -839,54 +943,67 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
Database (bup_ddl_blocker_%)
bup_ddl_blocker_2
bup_ddl_blocker_4
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
TRUNCATE TABLE bup_ddl_blocker_2.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE * TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+before_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress TRUNCATE TABLE bup_ddl_blocker_2.t1
+after_start_ddl TRUNCATE TABLE bup_ddl_blocker_2.t1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+after_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
TRUNCATE TABLE bup_ddl_blocker_4.t1;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+before_check_ddl_blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -975,54 +1092,67 @@ bup_ddl_blocker_4
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
TRUNCATE TABLE bup_ddl_blocker_2.t1;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+after_start_ddl ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
state info
-debug_sync_point: DDL_in_progress TRUNCATE TABLE bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl TRUNCATE TABLE bup_ddl_blocker_2.t1
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
TRUNCATE TABLE bup_ddl_blocker_4.t1;
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
+before_check_ddl_blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
state info
-DDL blocker: DDL is blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -1087,60 +1217,73 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES
INSERT INTO bup_ddl_blocker_4.t1 VALUES ("02 Some data to test", 12);
INSERT INTO bup_ddl_blocker_4.t1 VALUES ("03 Some data to test", 3);
CREATE INDEX 4t1col_b ON bup_ddl_blocker_4.t1 (col_b);
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
bup_ddl_blocker_3, bup_ddl_blocker_4
TO "bup_ddl_blocker.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_in_progress BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+before_block_ddl BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
bup_ddl_blocker_3, bup_ddl_blocker_4
TO "bup_ddl_blocker.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 1t1col_b%";
state info
-debug_sync_point: DDL_in_progress CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+after_start_ddl CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP INDEX 2t1col_b%";
state info
-debug_sync_point: DDL_in_progress DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: DDL_blocked BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+after_block_ddl BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
bup_ddl_blocker_3, bup_ddl_blocker_4
TO "bup_ddl_blocker.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 3t1col_b%";
state info
-DDL blocker: DDL is blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
+before_check_ddl_blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP INDEX 4t1col_b%";
state info
-DDL blocker: DDL is blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -1265,57 +1408,67 @@ bup_ddl_blocker_3, bup_ddl_blocker_4
TO "bup_ddl_blocker_orig.bak";
backup_id
#
-con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-get_lock("DDL_in_progress", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
+con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
con1: Restoring database -- will block with lock
RESTORE FROM "bup_ddl_blocker_orig.bak";
-con6: Checking locks
+con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_in_progress RESTORE FROM "bup_ddl_blocker_orig.bak"
+before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 1t1col_b%";
state info
-debug_sync_point: DDL_in_progress CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+after_start_ddl CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP INDEX 2t1col_b%";
state info
-debug_sync_point: DDL_in_progress DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
-con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-get_lock("DDL_blocked", 0)
-1
-con6: Checking locks
+after_start_ddl DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-debug_sync_point: DDL_blocked RESTORE FROM "bup_ddl_blocker_orig.bak"
+after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
con4: Try a DDL but it is blocked by backup -- will not be in backup
CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
con5: Try a DDL but it is blocked by backup -- will not be in backup
DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
+con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 3t1col_b%";
state info
-DDL blocker: DDL is blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
-Timeout in wait_condition.inc for SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DDROP INDEX 4t1col_b%"
+before_check_ddl_blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DROP INDEX 4t1col_b%";
state info
-DDL blocker: DDL is blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
-con6: Releasing lock
-SELECT release_lock("DDL_blocked");
-release_lock("DDL_blocked")
-1
+before_check_ddl_blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -1397,33 +1550,38 @@ col_a
01 Some data to test
02 Some data to test
03 Some data to test
-con5: Getting lock on DDL in progress.
-SELECT get_lock("DDL_not_blocked", 0);
-get_lock("DDL_not_blocked", 0)
-1
+con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
con2: Get a DDL going and stop in the middle
ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int;
+con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
con3: Get a DDL going and stop in the middle
ALTER TABLE test.t2 ADD COLUMN col_b int;
+con3: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con4_started WAIT_FOR status_shown';
con4: Get a DDL going and stop in the middle
ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int;
-con5: Checking locks
+con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
state info
-debug_sync_point: DDL_not_blocked ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int
+after_start_ddl ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE test.t2%";
state info
-debug_sync_point: DDL_not_blocked ALTER TABLE test.t2 ADD COLUMN col_b int
+after_start_ddl ALTER TABLE test.t2 ADD COLUMN col_b int
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
state info
-debug_sync_point: DDL_not_blocked ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
-con5: Releasing lock
-SELECT release_lock("DDL_not_blocked");
-release_lock("DDL_not_blocked")
-1
+after_start_ddl ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
+con5: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown';
con2: Completing DDL
con3: Completing DDL
con4: Completing DDL
@@ -1460,3 +1618,4 @@ count(*)
2
DROP TABLE test.t2;
DROP DATABASE bup_ddl_blocker;
+SET DEBUG_SYNC= 'reset';
diff -Nrup a/mysql-test/t/backup_ddl_blocker.test b/mysql-test/t/backup_ddl_blocker.test
--- a/mysql-test/t/backup_ddl_blocker.test 2008-02-14 21:57:14 +01:00
+++ b/mysql-test/t/backup_ddl_blocker.test 2008-05-23 17:27:24 +02:00
@@ -1,5 +1,5 @@
#
-# This test is for the DDL blocker
+# This test is for the DDL blocker.
# The goals of the test should be to ensure the following assumptions for
# the behaviour of the DDL blocker hold true.
#
@@ -42,22 +42,19 @@
#
# TODO : Add a native driver to the test when one becomes available
#
-# Notes
-# You must use a dedicated connection for getting and releasing locks.
-# Do not issue a get_lock() or release_lock() in the same connection
-# (thread) as code that calls BACKUP_BREAKPOINT(). Using the same connection
-# to get/release locks and run code that issues BACKUP_BREAKPOINTs will result
-# in an assertion using DEBUG_ASSERT(thd->ull == NULL) from debug_sync_point()
-# in item_func.cc.
-#
--source include/have_innodb.inc
---source include/have_debug.inc
+--source include/have_debug_sync.inc
--source include/not_embedded.inc
+SET DEBUG_SYNC= 'reset';
+
#
# Remove backup files (if they exist)
#
+# Note: More preparatory cleanup is done in
+# include/backup_ddl_create_data.inc
+#
--error 0,1
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak;
@@ -69,7 +66,7 @@
#
# con1 used to create data, load data, and run the backup
# con2-con5 used for DDL statements: 2 before backup and 2 during backup
-# con6 used for setting and releasing breakpoints
+# con6 used to show status/processlist
#
connect (con1,localhost,root,,);
@@ -81,9 +78,6 @@ connect (con6,localhost,root,,);
connection con1;
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
#
# Backup test sequence diagram (not UML)
#
@@ -117,6 +111,10 @@ SET GLOBAL debug="d,backup_debug:d,backu
# Note: The resume of the commands is indicated with <...> and
# may occur in any order.
#
+# Note by Ingo: I wonder if the line above "(results)" is correct.
+# I understand the above explanations so that DDL3 and 4 cannot
+# resume before BACKUP/RESTORE finished. But the line indicates
+# that these can resume in any order.
##############################################################
@@ -129,19 +127,19 @@ SET GLOBAL debug="d,backup_debug:d,backu
--source include/backup_ddl_create_data.inc
DROP TABLE bup_ddl_blocker.t1, bup_ddl_blocker.t3;
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
@@ -149,85 +147,61 @@ send ALTER TABLE bup_ddl_blocker.t2 ADD
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -245,7 +219,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -298,19 +272,19 @@ DROP TABLE bup_ddl_blocker.t1, bup_ddl_b
--replace_column 1 #
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int;
@@ -318,85 +292,61 @@ send ALTER TABLE bup_ddl_blocker.t2 ADD
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -414,15 +364,17 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
reap;
+##############################################################
--echo
--echo Verifying Test 1 results for restore.
--echo
+##############################################################
--echo con1: Table t1 should not be in restored data.
--echo con1: Table t2 should not have new column in restored data.
@@ -434,6 +386,9 @@ DESCRIBE bup_ddl_blocker.t2;
DESCRIBE bup_ddl_blocker.t3;
DESCRIBE bup_ddl_blocker.t4;
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
+
##############################################################
@@ -445,19 +400,19 @@ DESCRIBE bup_ddl_blocker.t4;
# Create data for this test and tailor it to the test.
--source include/backup_ddl_create_data.inc
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send REPAIR TABLE bup_ddl_blocker.t2;
@@ -465,87 +420,61 @@ send REPAIR TABLE bup_ddl_blocker.t2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
-
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send REPAIR TABLE bup_ddl_blocker.t4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -563,7 +492,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -610,19 +539,19 @@ SHOW TABLES;
--replace_column 1 #
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send REPAIR TABLE bup_ddl_blocker.t2;
@@ -630,85 +559,61 @@ send REPAIR TABLE bup_ddl_blocker.t2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send REPAIR TABLE bup_ddl_blocker.t4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "REPAIR TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -726,7 +631,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -742,7 +647,8 @@ reap;
use bup_ddl_blocker;
SHOW TABLES;
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
@@ -755,19 +661,19 @@ SHOW TABLES;
# Create data for this test and tailor it to the test.
--source include/backup_ddl_create_data.inc
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send OPTIMIZE TABLE bup_ddl_blocker.t1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP TABLE bup_ddl_blocker.t2;
@@ -775,86 +681,61 @@ send DROP TABLE bup_ddl_blocker.t2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
send BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send OPTIMIZE TABLE bup_ddl_blocker.t3;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP TABLE bup_ddl_blocker.t4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -872,7 +753,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -917,19 +798,19 @@ SHOW TABLES;
--replace_column 1 #
BACKUP DATABASE bup_ddl_blocker to 'bup_ddl_blocker_orig.bak';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send OPTIMIZE TABLE bup_ddl_blocker.t1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP TABLE bup_ddl_blocker.t2;
@@ -937,85 +818,61 @@ send DROP TABLE bup_ddl_blocker.t2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP TABLE bup_ddl_blocker.t2%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send OPTIMIZE TABLE bup_ddl_blocker.t3;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP TABLE bup_ddl_blocker.t4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
+ WHERE info LIKE "DROP TABLE bup_ddl_blocker.t4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1033,7 +890,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -1049,7 +906,8 @@ reap;
use bup_ddl_blocker;
SHOW TABLES;
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
@@ -1088,19 +946,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES
--echo con1: Show that the new data doesn't exist before backup.
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE DATABASE bup_ddl_blocker_1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP DATABASE bup_ddl_blocker_2;
@@ -1108,86 +966,61 @@ send DROP DATABASE bup_ddl_blocker_2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE DATABASE bup_ddl_blocker_3;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP DATABASE bup_ddl_blocker_4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
+ WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1205,7 +1038,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -1279,19 +1112,19 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
--replace_column 1 #
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE DATABASE bup_ddl_blocker_1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP DATABASE bup_ddl_blocker_2;
@@ -1299,85 +1132,61 @@ send DROP DATABASE bup_ddl_blocker_2;
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP DATABASE bup_ddl_blocker_2%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE DATABASE bup_ddl_blocker_3;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP DATABASE bup_ddl_blocker_4;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
+ WHERE info LIKE "DROP DATABASE bup_ddl_blocker_4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1395,7 +1204,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -1410,7 +1219,8 @@ reap;
--echo con1: Database bup_ddl_blocker_4 should not be in restored data.
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
@@ -1450,19 +1260,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES
--echo con1: Show that the new data doesn't exist before backup.
SHOW DATABASES LIKE 'bup_ddl_blocker_%';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send TRUNCATE TABLE bup_ddl_blocker_2.t1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
@@ -1470,85 +1280,61 @@ send ALTER DATABASE bup_ddl_blocker_2 CH
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
send BACKUP DATABASE * TO "bup_ddl_blocker.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send TRUNCATE TABLE bup_ddl_blocker_4.t1;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
-connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
+connection con6;
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
+ WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1566,7 +1352,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -1613,7 +1399,6 @@ SELECT * FROM bup_ddl_blocker_4.t1;
DROP DATABASE bup_ddl_blocker_2;
DROP DATABASE bup_ddl_blocker_4;
-
##############################################################
--echo
--echo Starting Test 5 - Restore
@@ -1655,19 +1440,19 @@ SHOW DATABASES LIKE 'bup_ddl_blocker_%';
--replace_column 1 #
BACKUP DATABASE bup_ddl_blocker_2, bup_ddl_blocker_4 to 'bup_ddl_blocker_orig.bak';
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send TRUNCATE TABLE bup_ddl_blocker_2.t1;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2;
@@ -1675,85 +1460,61 @@ send ALTER DATABASE bup_ddl_blocker_2 CH
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_2%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_2%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send TRUNCATE TABLE bup_ddl_blocker_4.t1;
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
+ WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1771,7 +1532,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -1796,7 +1557,8 @@ SELECT * FROM bup_ddl_blocker_4.t1;
DROP DATABASE bup_ddl_blocker_2;
DROP DATABASE bup_ddl_blocker_4;
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
@@ -1848,19 +1610,19 @@ INSERT INTO bup_ddl_blocker_4.t1 VALUES
CREATE INDEX 4t1col_b ON bup_ddl_blocker_4.t1 (col_b);
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
@@ -1868,7 +1630,11 @@ send DROP INDEX 2t1col_b ON bup_ddl_bloc
connection con1;
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for backup.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Backing up database -- will block with lock
send BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
bup_ddl_blocker_3, bup_ddl_blocker_4
@@ -1876,80 +1642,51 @@ send BACKUP DATABASE bup_ddl_blocker_1,
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE INDEX 1t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "BACKUP DATABASE%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 1t1col_b%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP INDEX 2t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE INDEX 1t1col_b%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 2t1col_b%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP INDEX 2t1col_b%";
+--echo con6: Resume all and wait for backup to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
+ WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE INDEX 3t1col_b%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 3t1col_b%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP INDEX 4t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE INDEX 3t1col_b%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 4t1col_b%";
+ WHERE info LIKE "DROP INDEX 4t1col_b%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -1967,7 +1704,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -2017,6 +1754,7 @@ DROP DATABASE bup_ddl_blocker_4;
--echo Starting Test 6 - Restore
--echo
##############################################################
+
--disable_warnings
DROP DATABASE IF EXISTS bup_ddl_blocker_1;
DROP DATABASE IF EXISTS bup_ddl_blocker_2;
@@ -2066,19 +1804,19 @@ BACKUP DATABASE bup_ddl_blocker_1, bup_d
bup_ddl_blocker_3, bup_ddl_blocker_4
TO "bup_ddl_blocker_orig.bak";
-connection con6;
-
-# Set the breakpoint for DDL in progress.
---echo con6: Getting lock on DDL in progress.
-SELECT get_lock("DDL_in_progress", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b);
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1;
@@ -2086,85 +1824,61 @@ send DROP INDEX 2t1col_b ON bup_ddl_bloc
connection con1;
+--echo con1: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con1: Activate synchronization points for restore.
+SET DEBUG_SYNC= 'before_block_ddl SIGNAL bup_blocked WAIT_FOR status_shown';
+SET DEBUG_SYNC= 'after_block_ddl SIGNAL bup_started WAIT_FOR status_shown2';
--echo con1: Restoring database -- will block with lock
send RESTORE FROM "bup_ddl_blocker_orig.bak";
connection con6;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con1 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_blocked';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE INDEX 1t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "RESTORE FROM%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 1t1col_b%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_in_progress"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DROP INDEX 2t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE INDEX 1t1col_b%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 2t1col_b%";
-
-# Now set the breakpoint for DDL blocker.
-# This releases lock on DDL_in_progress stopping all DDLs.
---echo con6: Getting lock on DDL blocker.
-SELECT get_lock("DDL_blocked", 0);
-
-connection con6;
-
---echo con6: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "RESTORE FROM%";
---source include/wait_condition.inc
+ WHERE info LIKE "DROP INDEX 2t1col_b%";
+--echo con6: Resume all and wait for restore to start after DDL finish.
+SET DEBUG_SYNC= 'now SIGNAL status_shown WAIT_FOR bup_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "RESTORE FROM%";
+ WHERE info LIKE "RESTORE FROM%";
connection con4;
+--echo con4: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con4_started
+ WAIT_FOR status_shown2';
--echo con4: Try a DDL but it is blocked by backup -- will not be in backup
send CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b);
connection con5;
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
+--echo con5: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'before_check_ddl_blocked SIGNAL con5_started
+ WAIT_FOR status_shown2';
--echo con5: Try a DDL but it is blocked by backup -- will not be in backup
send DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1;
connection con6;
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "CREATE INDEX 3t1col_b%";
---source include/wait_condition.inc
-
+--echo con6: Wait for con5 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con5_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "CREATE INDEX 3t1col_b%";
-
-let $wait_condition = SELECT state = "DDL blocker: DDL is blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DDROP INDEX 4t1col_b%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "CREATE INDEX 3t1col_b%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "DROP INDEX 4t1col_b%";
+ WHERE info LIKE "DROP INDEX 4t1col_b%";
---echo con6: Releasing lock
-SELECT release_lock("DDL_blocked");
+--echo con6: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown2';
-# Reconnect to connections and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -2182,7 +1896,7 @@ connection con5;
--echo con5: Completing DDL
reap;
-# Reconnect to con1 and let backup finish.
+# Reconnect to con1 and fetch its result.
connection con1;
--replace_column 1 #
@@ -2207,7 +1921,8 @@ DROP DATABASE bup_ddl_blocker_2;
DROP DATABASE bup_ddl_blocker_3;
DROP DATABASE bup_ddl_blocker_4;
-
+# Cleanup
+--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
@@ -2265,59 +1980,46 @@ SELECT * FROM bup_ddl_blocker.t1;
SELECT * FROM test.t2;
SELECT * FROM bup_ddl_blocker.t3;
-connection con5;
-
-# Set the breakpoint for DDL in progress.
---echo con5: Getting lock on DDL in progress.
-SELECT get_lock("DDL_not_blocked", 0);
-
connection con2;
+--echo con2: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con2_started WAIT_FOR status_shown';
--echo con2: Get a DDL going and stop in the middle
send ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int;
connection con3;
+--echo con3: Wait for con2 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con2_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con3_started WAIT_FOR status_shown';
--echo con3: Get a DDL going and stop in the middle
send ALTER TABLE test.t2 ADD COLUMN col_b int;
connection con4;
+--echo con3: Wait for con3 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con3_started';
+--echo con3: Activate synchronization point for DDL.
+SET DEBUG_SYNC= 'after_start_ddl SIGNAL con4_started WAIT_FOR status_shown';
--echo con4: Get a DDL going and stop in the middle
send ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking locks
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
---source include/wait_condition.inc
-
+--echo con5: Wait for con4 to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR con4_started';
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE test.t2%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE test.t2%";
-
-let $wait_condition = SELECT state = "debug_sync_point: DDL_not_blocked"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
---source include/wait_condition.inc
-
+ WHERE info LIKE "ALTER TABLE test.t2%";
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
+ WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t3%";
---echo con5: Releasing lock
-SELECT release_lock("DDL_not_blocked");
+--echo con5: Resume all.
+SET DEBUG_SYNC= 'now SIGNAL status_shown';
-# Reconnect to con2, con3, and con4 and allow them to finish.
+# Reconnect to con2, con3, and con4 and fetch their results.
connection con2;
--echo con2: Completing DDL
@@ -2362,21 +2064,26 @@ WHERE TABLE_NAME = 't3' AND TABLE_SCHEMA
DROP TABLE test.t2;
DROP DATABASE bup_ddl_blocker;
-#
-# Normally, when tests are run the test/ directory corresponding to the test database
-# is empty. In particular, it doesn't contain the db.opt file storing database settings.
-# Some tests rely on that, as they use server options to determine these settings.
-# If we backup test database (e.g., with "BACKUP DATABASE * ...") and then restore it,
-# then it will be created using "CREATE DATABASE test" statement and this will create
-# the db.opt file. As a result, some tests run after that will fail. To avoid this situation
-# we remove the test/db.opt file as a part of clean-up.
-#
+# Normally, when tests are run the test/ directory corresponding to the
+# test database is empty. In particular, it doesn't contain the db.opt
+# file storing database settings. Some tests rely on that, as they use
+# server options to determine these settings. If we backup test database
+# (e.g., with "BACKUP DATABASE * ...") and then restore it, then it will
+# be created using "CREATE DATABASE test" statement and this will create
+# the db.opt file. As a result, some tests run after that will fail. To
+# avoid this situation we remove the test/db.opt file as a part of
+# clean-up.
--error 0,1
--remove_file $MYSQLTEST_VARDIR/master-data/test/db.opt
--remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker_orig.bak
---remove_file $MYSQLTEST_VARDIR/master-data/bup_ddl_blocker.bak
-
-
+connection default;
+disconnect con1;
+disconnect con2;
+disconnect con3;
+disconnect con4;
+disconnect con5;
+disconnect con6;
+SET DEBUG_SYNC= 'reset';
diff -Nrup a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
--- a/mysql-test/t/disabled.def 2008-05-22 17:03:10 +02:00
+++ b/mysql-test/t/disabled.def 2008-05-23 17:27:24 +02:00
@@ -24,7 +24,7 @@ ps_ddl : Bug#12093 2007-12
user_limits : Bug#23921 2007-12-16 random failure of user_limits.test
backup :BUG#34235 pending replacement of test facility with WL#4259
backup_commit_blocker :BUG#34235 pending replacement of test facility with WL#4259
-backup_ddl_blocker :BUG#34235 pending replacement of test facility with WL#4259
+#backup_ddl_blocker :BUG#34235 pending replacement of test facility with WL#4259
#backup_progress :BUG#34235 pending replacement of test facility with WL#4259
#backup_security :BUG#34235 pending replacement of test facility with WL#4259
#backup_snapshot :BUG#34235 pending replacement of test facility with WL#4259
diff -Nrup a/sql/ddl_blocker.cc b/sql/ddl_blocker.cc
--- a/sql/ddl_blocker.cc 2007-12-12 21:13:23 +01:00
+++ b/sql/ddl_blocker.cc 2008-05-23 17:27:24 +02:00
@@ -110,7 +110,7 @@ void DDL_blocker_class::end_DDL()
my_bool DDL_blocker_class::check_DDL_blocker(THD *thd)
{
DBUG_ENTER("check_DDL_blocker()");
- BACKUP_BREAKPOINT("DDL_not_blocked");
+ DEBUG_SYNC(thd, "before_check_ddl_blocked");
/*
Check the ddl blocker condition. Rest until ddl blocker is released.
@@ -122,7 +122,7 @@ my_bool DDL_blocker_class::check_DDL_blo
pthread_cond_wait(&COND_DDL_blocker, &THR_LOCK_DDL_is_blocked);
start_DDL();
thd->exit_cond("DDL blocker: Ok to run DDL");
- BACKUP_BREAKPOINT("DDL_in_progress");
+ DEBUG_SYNC(thd, "after_start_ddl");
DBUG_RETURN(TRUE);
}
@@ -143,7 +143,7 @@ my_bool DDL_blocker_class::block_DDL(THD
{
DBUG_ENTER("block_DDL()");
- BACKUP_BREAKPOINT("DDL_in_progress");
+ DEBUG_SYNC(thd, "before_block_ddl");
/*
Only 1 DDL blocking operation can run at a time.
@@ -171,7 +171,7 @@ my_bool DDL_blocker_class::block_DDL(THD
pthread_cond_wait(&COND_process_blocked, &THR_LOCK_DDL_blocker);
thd->exit_cond("DDL blocker: DDL is now blocked");
- BACKUP_BREAKPOINT("DDL_blocked");
+ DEBUG_SYNC(thd, "after_block_ddl");
DBUG_RETURN(TRUE);
}
| Thread |
|---|
| • bk commit into 6.0 tree (istruewing:1.2626) | Ingo Struewing | 23 May |