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-06-05 21:17:55+02:00, istruewing@stripped +14 -0
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls,
adapted backup_commit_blocker.test and re-enabled it,
fixed previous patches.
WL#4259 - Debug Sync Facility
Added extern "C" to improve linkability on some platforms.
Fixed compiler warnings.
Moved locking of the mutex out of the SIGNAL and WAIT_FOR branches.
Made a more verbose proc_info.
mysql-test/r/backup_commit_blocker.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +100 -80
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed result.
mysql-test/r/backup_ddl_blocker.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +75 -75
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed result.
mysql-test/r/backup_snapshot.result@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed result.
mysql-test/t/backup_commit_blocker.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +150 -231
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed test.
mysql-test/t/backup_ddl_blocker.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +6 -7
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Fixed forgotten comment changes from a previous patch.
mysql-test/t/backup_snapshot.test@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Fixed sync point in the second test of a previous patch
after placing the sync point in the real wait branch.
mysql-test/t/disabled.def@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Re-enabled the converted test case.
sql/backup/data_backup.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +3 -3
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
sql/debug_sync.cc@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +29 -14
WL#4259 - Debug Sync Facility
Added extern "C" to improve linkability on some platforms.
Fixed compiler warnings.
Moved locking of the mutex out of the SIGNAL and WAIT_FOR branches.
Made a more verbose proc_info.
sql/handler.cc@stripped, 2008-06-05 21:17:52+02:00, istruewing@stripped +1 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
sql/lock.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +32 -1
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Added a sync point into the waiting branch of
lock_global_read_lock().
Moved the sync point of wait_if_global_read_lock() inside the
waiting branch. Added a comment.
Added DBUG_PRINTs.
sql/sql_delete.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +1 -7
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
sql/sql_insert.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +1 -2
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
sql/sql_parse.cc@stripped, 2008-06-05 21:17:53+02:00, istruewing@stripped +2 -2
Convert BACKUP_BREAKPOINT to DEBUG_SYNC.
Changed synchronization point calls.
diff -Nrup a/mysql-test/r/backup_commit_blocker.result b/mysql-test/r/backup_commit_blocker.result
--- a/mysql-test/r/backup_commit_blocker.result 2007-12-04 18:38:00 +01:00
+++ b/mysql-test/r/backup_commit_blocker.result 2008-06-05 21:17:52 +02:00
@@ -1,6 +1,6 @@
+SET DEBUG_SYNC= 'RESET';
DROP DATABASE IF EXISTS bup_commit_blocker;
CREATE DATABASE bup_commit_blocker;
-SET GLOBAL debug="d,backup_debug:d,backup";
Starting Test 1
@@ -55,62 +55,72 @@ Assumption (b): TRX in commit is include
BEGIN;
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-get_lock("commit_blocker_step_1", 0)
-1
+con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+ WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit WAIT_FOR finish';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: commit_blocker_step_1 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con3: Starting commit -- will block with lock
+debug sync point: before_commit_block BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+ WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit SIGNAL commit_done
+ WAIT_FOR finish';
+con3: Starting commit -- will block on sync point
COMMIT;
-con5: Checking lock
+con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
state info
-debug_sync_point: commit_blocker_step_1 COMMIT
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+debug sync point: within_ha_commit_trans COMMIT
+con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: backup_commit_blocker BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con5: Checking lock
+Waiting to get readlock BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con5: Let COMMIT continue until end of statement.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR commit_done';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
state info
-debug_sync_point: backup_commit_blocker COMMIT
-con4: Starting begin -- will block with lock
+debug sync point: after_commit COMMIT
+con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+ WAIT_FOR finish';
+con4: Starting begin -- will block on sync point
Assumption (c): TRX not started is not included in backup
BEGIN;
-con5: Checking lock
+con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BEGIN%";
state info
-debug_sync_point: backup_commit_blocker BEGIN
-con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-1
+debug sync point: before_begin_trans BEGIN
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
con2: Completing transaction
DELETE FROM bup_commit_blocker.t1 WHERE col_a LIKE '02%';
COMMIT;
-con3: Completing transaction
+con3: Fetch COMMIT result
+con4: Fetch BEGIN result and completing transaction
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
COMMIT;
+con1: Fetch BACKUP result
backup_id
#
con1: Showing data after updates and backup
@@ -185,6 +195,7 @@ count(*)
0
con1: Cleanup
DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
Starting Test 2
@@ -201,23 +212,18 @@ col_a
30
40
50
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+con1: Activate synchronization point for BACKUP.
+SET DEBUG_SYNC= 'before_backup_data_unlock SIGNAL bup_data_unlock
+ WAIT_FOR finish';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_4", 0);
-get_lock("commit_blocker_step_4", 0)
-1
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_data_unlock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: commit_blocker_step_4 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+debug sync point: before_backup_data_unlock BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
con7: Show that the statement in progress has executed before backup.
SELECT * FROM bup_commit_blocker.t5;
col_a
@@ -226,24 +232,22 @@ col_a
30
40
50
-con7: Starting non-trx about to start -- will block with lock
+con7: Activate synchronization point for UPDATE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL upd_read_lock';
+con7: Starting non-trx about to start
Assumption (e): non-TRX not started is not included in backup
UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30;
-con5: Checking lock
+con5: Wait for UPDATE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR upd_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "UPDATE%";
state info
Waiting for release of readlock UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30
-con5: Releasing locks
-SELECT release_lock("commit_blocker_step_4");
-release_lock("commit_blocker_step_4")
-1
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-NULL
-con6: Completing statement
-con7: Completing statement
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
+con7: Fetch UPDATE result
+con1: Fetch BACKUP result
backup_id
#
con1: Showing data after updates and backup
@@ -277,6 +281,7 @@ count(*)
0
con1: Cleanup
DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
Starting Test 3
@@ -341,57 +346,68 @@ Assumption (b): TRX in commit is include
BEGIN;
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-get_lock("commit_blocker_step_1", 0)
-1
+con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+ WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit SIGNAL bup_unblocking
+ WAIT_FOR finish';
con1: Backing up database -- will block with lock
BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-con5: Checking lock
+con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: commit_blocker_step_1 BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con3: Starting commit -- will block with lock
+debug sync point: before_commit_block BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+ WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit WAIT_FOR finish';
+con3: Starting commit -- will block on sync point
COMMIT;
-con5: Checking lock
+con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
state info
-debug_sync_point: commit_blocker_step_1 COMMIT
-con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-get_lock("backup_commit_blocker", 0)
-1
-con5: Checking lock
+debug sync point: within_ha_commit_trans COMMIT
+con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-debug_sync_point: backup_commit_blocker BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
-con5: Checking lock
+Waiting to get readlock BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con5: Let COMMIT continue until the sync point at its end.
+con5: The completed COMMIT implicitly wakes BACKUP.
+con5: So wait for BACKUP to reach the next synchronization point.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR bup_unblocking';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
state info
-debug_sync_point: backup_commit_blocker COMMIT
+debug sync point: after_commit COMMIT
+SELECT state, info FROM
+INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "BACKUP DATABASE%";
+state info
+debug sync point: before_backup_unblock_commit BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+ WAIT_FOR finish';
con4: Starting begin -- will block with lock
Assumption (c): TRX not started is not included in backup
BEGIN;
-con5: Checking lock
+con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BEGIN%";
state info
-debug_sync_point: backup_commit_blocker BEGIN
-con5: Checking lock
-SELECT state, info FROM
-INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-state info
-debug_sync_point: backup_commit_blocker BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak"
+debug sync point: before_begin_trans BEGIN
con7: Show that the statement in progress has executed before backup.
SELECT * FROM bup_commit_blocker.t5;
col_a
@@ -400,27 +416,30 @@ col_a
30
40
50
+con7: Activate synchronization point for DELETE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL del_read_lock';
con7: Starting non-trx about to start -- will block with lock
Assumption (e): non-TRX not started is not included in backup
DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50;
-con5: Checking lock
+con5: Wait for DELETE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR del_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DELETE%";
state info
Waiting for release of readlock DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50
-con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
-release_lock("backup_commit_blocker")
-1
+con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
con2: Completing transaction
DELETE FROM bup_commit_blocker.t2 WHERE col_a LIKE '02%';
COMMIT;
-con3: Completing transaction
+con3: Fetch COMMIT result
+con4: Fetch BEGIN result and completing transaction
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
COMMIT;
-con7: Completing statement
+con7: Fetch DELETE result
+con1: Fetch BACKUP result
backup_id
#
con1: Showing data after updates and backup
@@ -513,3 +532,4 @@ count(*)
1
con1: Cleanup
DROP DATABASE bup_commit_blocker;
+SET DEBUG_SYNC= 'RESET';
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 2008-05-23 17:27:24 +02:00
+++ b/mysql-test/r/backup_ddl_blocker.result 2008-06-05 21:17:52 +02:00
@@ -45,21 +45,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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
-after_start_ddl CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: 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
-after_start_ddl ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+debug sync point: 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
-after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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';
@@ -77,11 +77,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: 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
-before_check_ddl_blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+debug sync point: 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
@@ -179,21 +179,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl CREATE TABLE bup_ddl_blocker.t1 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: 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
-after_start_ddl ALTER TABLE bup_ddl_blocker.t2 ADD COLUMN col_b int
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -211,11 +211,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked CREATE TABLE bup_ddl_blocker.t3 (col_a CHAR(40)) ENGINE=INNODB
+debug sync point: 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
-before_check_ddl_blocked ALTER TABLE bup_ddl_blocker.t4 ADD COLUMN col_b int
+debug sync point: 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
@@ -288,21 +288,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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
-after_start_ddl RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+debug sync point: 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
-after_start_ddl REPAIR TABLE bup_ddl_blocker.t2
+debug sync point: 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
-after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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';
@@ -320,11 +320,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+debug sync point: 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
-before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -413,21 +413,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl RENAME TABLE bup_ddl_blocker.t1 TO bup_ddl_blocker.t01
+debug sync point: 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
-after_start_ddl REPAIR TABLE bup_ddl_blocker.t2
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -445,11 +445,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RENAME TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked RENAME TABLE bup_ddl_blocker.t3 TO bup_ddl_blocker.t03
+debug sync point: 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
-before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked REPAIR TABLE bup_ddl_blocker.t4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -518,21 +518,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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
-after_start_ddl OPTIMIZE TABLE bup_ddl_blocker.t1
+debug sync point: 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
-after_start_ddl DROP TABLE bup_ddl_blocker.t2
+debug sync point: 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
-after_block_ddl BACKUP DATABASE bup_ddl_blocker TO "bup_ddl_blocker.bak"
+debug sync point: 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';
@@ -550,11 +550,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked OPTIMIZE TABLE bup_ddl_blocker.t3
+debug sync point: 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
-before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -638,21 +638,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl OPTIMIZE TABLE bup_ddl_blocker.t1
+debug sync point: 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
-after_start_ddl DROP TABLE bup_ddl_blocker.t2
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -670,11 +670,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "OPTIMIZE TABLE bup_ddl_blocker.t3%";
state info
-before_check_ddl_blocked OPTIMIZE TABLE bup_ddl_blocker.t3
+debug sync point: 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
-before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
+debug sync point: before_check_ddl_blocked DROP TABLE bup_ddl_blocker.t4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -744,21 +744,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: 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
-after_start_ddl CREATE DATABASE bup_ddl_blocker_1
+debug sync point: 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
-after_start_ddl DROP DATABASE bup_ddl_blocker_2
+debug sync point: 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
-after_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: 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';
@@ -776,11 +776,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
state info
-before_check_ddl_blocked CREATE DATABASE bup_ddl_blocker_3
+debug sync point: 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
-before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
+debug sync point: before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -864,21 +864,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl CREATE DATABASE bup_ddl_blocker_1
+debug sync point: 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
-after_start_ddl DROP DATABASE bup_ddl_blocker_2
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -896,11 +896,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE DATABASE bup_ddl_blocker_3%";
state info
-before_check_ddl_blocked CREATE DATABASE bup_ddl_blocker_3
+debug sync point: 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
-before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
+debug sync point: before_check_ddl_blocked DROP DATABASE bup_ddl_blocker_4
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -965,21 +965,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: 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
-after_start_ddl TRUNCATE TABLE bup_ddl_blocker_2.t1
+debug sync point: 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
-after_start_ddl ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+debug sync point: 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
-after_block_ddl BACKUP DATABASE * TO "bup_ddl_blocker.bak"
+debug sync point: 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';
@@ -997,11 +997,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER DATABASE bup_ddl_blocker_4%";
state info
-before_check_ddl_blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+debug sync point: 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
-before_check_ddl_blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
+debug sync point: before_check_ddl_blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
con6: Resume all.
SET DEBUG_SYNC= 'now SIGNAL status_shown2';
con2: Completing DDL
@@ -1114,21 +1114,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl ALTER DATABASE bup_ddl_blocker_2 CHARACTER SET latin2
+debug sync point: 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
-after_start_ddl TRUNCATE TABLE bup_ddl_blocker_2.t1
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -1146,11 +1146,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "TRUNCATE TABLE bup_ddl_blocker_4%";
state info
-before_check_ddl_blocked TRUNCATE TABLE bup_ddl_blocker_4.t1
+debug sync point: 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
-before_check_ddl_blocked ALTER DATABASE bup_ddl_blocker_4 CHARACTER SET latin2
+debug sync point: 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
@@ -1241,23 +1241,23 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
state info
-before_block_ddl BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+debug sync point: 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
-after_start_ddl CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+debug sync point: 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
-after_start_ddl DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+debug sync point: 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
-after_block_ddl BACKUP DATABASE bup_ddl_blocker_1, bup_ddl_blocker_2,
+debug sync point: 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.
@@ -1277,11 +1277,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 3t1col_b%";
state info
-before_check_ddl_blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
+debug sync point: 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
-before_check_ddl_blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+debug sync point: 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
@@ -1430,21 +1430,21 @@ SET DEBUG_SYNC= 'now WAIT_FOR bup_blocke
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "RESTORE FROM%";
state info
-before_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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
-after_start_ddl CREATE INDEX 1t1col_b ON bup_ddl_blocker_1.t1 (col_b)
+debug sync point: 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
-after_start_ddl DROP INDEX 2t1col_b ON bup_ddl_blocker_2.t1
+debug sync point: 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
-after_block_ddl RESTORE FROM "bup_ddl_blocker_orig.bak"
+debug sync point: 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';
@@ -1462,11 +1462,11 @@ SET DEBUG_SYNC= 'now WAIT_FOR con5_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "CREATE INDEX 3t1col_b%";
state info
-before_check_ddl_blocked CREATE INDEX 3t1col_b ON bup_ddl_blocker_3.t1 (col_b)
+debug sync point: 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
-before_check_ddl_blocked DROP INDEX 4t1col_b ON bup_ddl_blocker_4.t1
+debug sync point: 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
@@ -1571,15 +1571,15 @@ SET DEBUG_SYNC= 'now WAIT_FOR con4_start
SELECT state, info FROM INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "ALTER TABLE bup_ddl_blocker.t1%";
state info
-after_start_ddl ALTER TABLE bup_ddl_blocker.t1 ADD COLUMN col_b int
+debug sync point: 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
-after_start_ddl ALTER TABLE test.t2 ADD COLUMN col_b int
+debug sync point: 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
-after_start_ddl ALTER TABLE bup_ddl_blocker.t3 ADD COLUMN col_b int
+debug sync point: 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
diff -Nrup a/mysql-test/r/backup_snapshot.result b/mysql-test/r/backup_snapshot.result
--- a/mysql-test/r/backup_snapshot.result 2008-05-22 17:03:10 +02:00
+++ b/mysql-test/r/backup_snapshot.result 2008-06-05 21:17:52 +02:00
@@ -83,7 +83,7 @@ con2: Wait for backup to start reading.
SET DEBUG_SYNC= 'now WAIT_FOR reading';
con2: Start an insert now that CS has a transaction
con2: Activate sync points for the insert statement.
-SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL inserting';
+SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL inserting';
INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
con2: insert additional rows.
INSERT INTO bup_snapshot.t1 VALUES("- Yes");
diff -Nrup a/mysql-test/t/backup_commit_blocker.test b/mysql-test/t/backup_commit_blocker.test
--- a/mysql-test/t/backup_commit_blocker.test 2007-12-20 21:32:16 +01:00
+++ b/mysql-test/t/backup_commit_blocker.test 2008-06-05 21:17:52 +02:00
@@ -27,24 +27,13 @@
#
# TODO : Add a native driver to the test when one becomes available
#
-# We use a breakpoint named "backup_commit_blocker" which is placed
-# strategically in the code to allow the threads to pause at the
-# corresponding location for those goals above.
-#
-# 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
--disable_warnings
+SET DEBUG_SYNC= 'RESET';
DROP DATABASE IF EXISTS bup_commit_blocker;
--error 0,1
--remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
@@ -59,7 +48,7 @@ CREATE DATABASE bup_commit_blocker;
# con2 - used for setting up transactions in progress
# con3 - used for setting up transactions in commit
# con4 - used for setting up transactions about to start
-# con5 - used for setting and releasing breakpoints
+# con5 - used to show status
# con6 - used for setting up non-transactions in progress
# con7 - used for setting up non-transactions about to start
#
@@ -74,9 +63,6 @@ connect (con7,localhost,root,,);
connection con1;
-# Setup the server to use the backup breakpoints
-SET GLOBAL debug="d,backup_debug:d,backup";
-
#
# Test 1 - transactional statements only
#
@@ -96,16 +82,12 @@ SET GLOBAL debug="d,backup_debug:d,backu
# | | BEGIN | |
# | | INSERT t2 | |
# | | INSERT t2 | |
-# | | | | lock("commit_blocker_step_1");
+# | | | | show status
# BACKUP | | | |
-# | | | | <wait for locks>
# | | COMMIT | |
-# | | | | <wait for locks>
-# | | | | lock("backup_commit_blocker");
-# | | | | <wait for locks>
+# | | | | show status
# | | | BEGIN |
-# | | | | <wait for locks>
-# | | | | <release locks>
+# | | | | show status
# | DELETE t1 | | |
# | COMMIT | | |
# | | <...> | |
@@ -163,14 +145,6 @@ BEGIN;
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-
-# Start the backup and allow it to break on lock.
-
connection con1;
#
@@ -178,89 +152,73 @@ connection con1;
# We stop (with the lock) the backup after the metadata but before the
# commit blocker.
#
+--echo con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+ WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit WAIT_FOR finish';
--echo con1: Backing up database -- will block with lock
send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
connection con3;
---echo con3: Starting commit -- will block with lock
+--echo con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+ WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit SIGNAL commit_done
+ WAIT_FOR finish';
+--echo con3: Starting commit -- will block on sync point
send COMMIT;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Let COMMIT continue until end of statement.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR commit_done';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
connection con4;
---echo con4: Starting begin -- will block with lock
+--echo con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+ WAIT_FOR finish';
+--echo con4: Starting begin -- will block on sync point
--echo Assumption (c): TRX not started is not included in backup
send BEGIN;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BEGIN%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BEGIN%";
---echo con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
-# Reconnect to con2, con3, and con4 and allow them to finish.
+# Reconnect to connections and fetch their results.
connection con2;
@@ -269,18 +227,21 @@ connection con2;
COMMIT;
connection con3;
---echo con3: Completing transaction
+
+--echo con3: Fetch COMMIT result
reap;
connection con4;
+
+--echo con4: Fetch BEGIN result and completing transaction
reap;
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
COMMIT;
-# Reconnect to con1 and let backup finish.
-
connection con1;
+
+--echo con1: Fetch BACKUP result
--replace_column 1 #
reap;
@@ -324,6 +285,7 @@ SELECT count(*) FROM bup_commit_blocker.
DROP DATABASE bup_commit_blocker;
remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
+SET DEBUG_SYNC= 'RESET';
#
# Test 2 - non-transactional statements only
@@ -333,23 +295,29 @@ remove_file $MYSQLTEST_VARDIR/master-dat
--echo Starting Test 2
--echo
+# Ingo: DELETE was disabled before converting the test from
+# BACKUP_BREAKPOINT to DEBUG_SYNC. I left it disabled
+# as an attempt to enable it made an infinite loop in
+# write_table_data() in the loop:
+# while (sch.prepare_count > 0)
+# if (sch.step())
+# goto error;
+# sch.prepare_count did not change from being 1.
+# When this is fixed, please remove this comment.
+
#
# Test 2 sequence diagram (not UML)
#
# con1 con2 con3 con4 con5 con6 con7
# (setup) | | | | | |
# | | | | | | |
-# | | | | lock("backup_commit_blocker");
-# | | | | | DELETE t4 |
-# | | | | <wait for locks> |
+# | | | | | #DELETE t4 |
+# | | | | #show status | |
# BACKUP | | | | | |
-# | | | | <wait for locks> |
-# | | | | lock("commit_blocker_step_4");
-# | | | | <wait for locks> |
-# | | | | (results) | |
+# | | | | show status | |
+# | | | | | | (results)
# | | | | | | UPDATE t5
-# | | | | <wait for locks> |
-# | | | | <release locks>| |
+# | | | | show status | |
# <...> | | | | <...> <...>
# (results) | | | | | |
#
@@ -372,49 +340,34 @@ INSERT INTO bup_commit_blocker.t5 VALUES
#SELECT * FROM bup_commit_blocker.t4;
SELECT * FROM bup_commit_blocker.t5;
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-connection con6;
-
+#connection con6;
+#
+#--echo con6: Activate synchronization point for DELETE.
+#SET DEBUG_SYNC= 'at_delete_end SIGNAL del_at_end WAIT_FOR finish';
#--echo con6: Starting non-trx in progress -- will block with lock
#--echo Assumption (d): non-TRX in progress is included in backup
#send DELETE FROM bup_commit_blocker.t4 WHERE col_a <= 2;
-
-connection con5;
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-#let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
-# FROM INFORMATION_SCHEMA.PROCESSLIST
-# WHERE info LIKE "DELETE%";
-#--source include/wait_condition.inc
+#
+#connection con5;
+#
+#--echo con5: Wait for DELETE to reach its synchronization point.
+#SET DEBUG_SYNC= 'now WAIT_FOR del_at_end';
+#SELECT state, info FROM
+#INFORMATION_SCHEMA.PROCESSLIST
+#WHERE info LIKE "DELETE%";
connection con1;
+--echo con1: Activate synchronization point for BACKUP.
+SET DEBUG_SYNC= 'before_backup_data_unlock SIGNAL bup_data_unlock
+ WAIT_FOR finish';
--echo con1: Backing up database -- will block with lock
send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
connection con5;
-# Set the breakpoint for the commit blocker.
-#
-# This allows the statement that was inprogress to finish and unblock the
-# backup which is waiting on open_and_lock_tables.
-#
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_4", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_4"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_data_unlock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
@@ -425,41 +378,38 @@ connection con7;
#SELECT * FROM bup_commit_blocker.t4;
SELECT * FROM bup_commit_blocker.t5;
---echo con7: Starting non-trx about to start -- will block with lock
+--echo con7: Activate synchronization point for UPDATE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL upd_read_lock';
+--echo con7: Starting non-trx about to start
--echo Assumption (e): non-TRX not started is not included in backup
send UPDATE bup_commit_blocker.t5 SET col_a = 333 WHERE col_a = 30;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "Waiting for release of readlock"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "UPDATE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for UPDATE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR upd_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "UPDATE%";
---echo con5: Releasing locks
-SELECT release_lock("commit_blocker_step_4");
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
-# Reconnect to con6 and con7 and allow them to finish.
+# Reconnect to con6 and con7 and fetch their results.
-connection con6;
-
---echo con6: Completing statement
+#connection con6;
+#
+#--echo con6: Fetch DELETE result
#reap;
connection con7;
---echo con7: Completing statement
-reap;
-# Reconnect to con1 and let backup finish.
+--echo con7: Fetch UPDATE result
+reap;
connection con1;
+
+--echo con1: Fetch BACKUP result
--replace_column 1 #
reap;
@@ -497,6 +447,7 @@ SELECT count(*) FROM bup_commit_blocker.
DROP DATABASE bup_commit_blocker;
remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
+SET DEBUG_SYNC= 'RESET';
#
# Test 3 - mix of both transactional and non-transactional statements
@@ -517,20 +468,17 @@ remove_file $MYSQLTEST_VARDIR/master-dat
# | | BEGIN | | | |
# | | INSERT t2 | | | |
# | | INSERT t2 | | | |
-# | | | | lock("commit_blocker_step_1");
# BACKUP | | | | | |
-# | | | | | INSERT t4 |
-# | | | | <wait for locks> |
+# | | | | | #INSERT t4 |
+# | | | | show status | |
# | | COMMIT | | | |
-# | | | | <wait for locks> |
-# | | | | lock("backup_commit_blocker");
-# | | | | <wait for locks> |
+# | | | | show status | |
# | | | BEGIN | | |
-# | | | | <wait for locks> |
+# | | | | show status | |
# | | | | | | (results)
# | | | | | | DELETE t5
-# | | | | <wait for locks> |
-# | | | | <release locks>| |
+# | | | | show status | |
+# | | | | wake all | |
# | DELETE t1 | | | | |
# | COMMIT | | | | |
# | | <...> | | | |
@@ -598,14 +546,6 @@ BEGIN;
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 04 Some data to test");
INSERT INTO bup_commit_blocker.t2 VALUES ("con3: 05 Some data to test");
-connection con5;
-
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("commit_blocker_step_1", 0);
-
-# Start the backup and allow it to break on lock.
-
connection con1;
#
@@ -613,137 +553,113 @@ connection con1;
# We stop (with the lock) the backup after the metadata but before the
# commit blocker.
#
+--echo con1: Activate synchronization points for BACKUP.
+SET DEBUG_SYNC= 'before_commit_block SIGNAL bup_commit_block
+ WAIT_FOR bup_go_read_lock';
+SET DEBUG_SYNC= 'wait_protect_global_read_lock SIGNAL bup_read_lock';
+SET DEBUG_SYNC= 'before_backup_unblock_commit SIGNAL bup_unblocking
+ WAIT_FOR finish';
--echo con1: Backing up database -- will block with lock
send BACKUP DATABASE bup_commit_blocker TO "bup_commit_blocker.bak";
-connection con6;
-
+#connection con6;
+#
+#--echo con6: Activate synchronization point for INSERT.
+#SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL insert_table_locked
+# WAIT_FOR finish';
#--echo con6: Starting non-trx in progress -- will block
#--echo Assumption (d): non-TRX in progress is included in backup
#send INSERT INTO bup_commit_blocker.t4 VALUES (31), (32), (33);
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BACKUP to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR bup_commit_block';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
-# Wait for lock to be acquired and execution to reach breakpoint
-#--echo con5: Checking lock
-#let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
-# FROM INFORMATION_SCHEMA.PROCESSLIST
-# WHERE info LIKE "INSERT INTO bup_commit_blocker.t4%";
-#--source include/wait_condition.inc
+#--echo con5: Wait for INSERT to reach its synchronization point.
+#SET DEBUG_SYNC= 'now WAIT_FOR insert_table_locked';
+#SELECT state, info FROM
+#INFORMATION_SCHEMA.PROCESSLIST
+#WHERE info LIKE "BACKUP DATABASE%";
connection con3;
---echo con3: Starting commit -- will block with lock
+--echo con3: Activate synchronization points for COMMIT.
+SET DEBUG_SYNC= 'within_ha_commit_trans SIGNAL commit_read_locked
+ WAIT_FOR commit_go_done';
+SET DEBUG_SYNC= 'after_commit WAIT_FOR finish';
+--echo con3: Starting commit -- will block on sync point
send COMMIT;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: commit_blocker_step_1"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Wait for COMMIT to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR commit_read_locked';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
-# Set the breakpoint for the commit blocker.
---echo con5: Getting lock on commit blocker.
-SELECT get_lock("backup_commit_blocker", 0);
-
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
+--echo con5: Let BACKUP run until the next sync point.
+SET DEBUG_SYNC= 'now SIGNAL bup_go_read_lock WAIT_FOR bup_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BACKUP DATABASE%";
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "COMMIT%";
---source include/wait_condition.inc
-
+--echo con5: Let COMMIT continue until the sync point at its end.
+--echo con5: The completed COMMIT implicitly wakes BACKUP.
+--echo con5: So wait for BACKUP to reach the next synchronization point.
+SET DEBUG_SYNC= 'now SIGNAL commit_go_done WAIT_FOR bup_unblocking';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "COMMIT%";
+SELECT state, info FROM
+INFORMATION_SCHEMA.PROCESSLIST
+WHERE info LIKE "BACKUP DATABASE%";
connection con4;
+--echo con4: Activate synchronization point for BEGIN.
+SET DEBUG_SYNC= 'before_begin_trans SIGNAL begin_starting
+ WAIT_FOR finish';
--echo con4: Starting begin -- will block with lock
--echo Assumption (c): TRX not started is not included in backup
send BEGIN;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BEGIN%";
---source include/wait_condition.inc
-
+--echo con5: Wait for BEGIN to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR begin_starting';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "BEGIN%";
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-
-let $wait_condition = SELECT state = "debug_sync_point: backup_commit_blocker"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "BACKUP DATABASE%";
---source include/wait_condition.inc
-
-SELECT state, info FROM
-INFORMATION_SCHEMA.PROCESSLIST
-WHERE info LIKE "BACKUP DATABASE%";
-
connection con7;
--echo con7: Show that the statement in progress has executed before backup.
#SELECT * FROM bup_commit_blocker.t4;
SELECT * FROM bup_commit_blocker.t5;
+--echo con7: Activate synchronization point for DELETE.
+SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL del_read_lock';
--echo con7: Starting non-trx about to start -- will block with lock
--echo Assumption (e): non-TRX not started is not included in backup
send DELETE FROM bup_commit_blocker.t5 WHERE col_a = 50;
connection con5;
-# Wait for lock to be acquired and execution to reach breakpoint
---echo con5: Checking lock
-let $wait_condition = SELECT state = "Waiting for release of readlock"
- FROM INFORMATION_SCHEMA.PROCESSLIST
- WHERE info LIKE "DELETE%";
---source include/wait_condition.inc
-
+--echo con5: Wait for DELETE to reach its synchronization point.
+SET DEBUG_SYNC= 'now WAIT_FOR del_read_lock';
SELECT state, info FROM
INFORMATION_SCHEMA.PROCESSLIST
WHERE info LIKE "DELETE%";
---echo con5: Releasing lock
-SELECT release_lock("backup_commit_blocker");
+--echo con5: Sending finish signal to wake them all.
+SET DEBUG_SYNC= 'now SIGNAL finish';
-# Reconnect to con2, con3, con4, con6, and con7 and allow them to finish.
+# Reconnect to con2, con3, con4, con6, and con7 and fetch their results.
connection con2;
@@ -752,10 +668,13 @@ connection con2;
COMMIT;
connection con3;
---echo con3: Completing transaction
+
+--echo con3: Fetch COMMIT result
reap;
connection con4;
+
+--echo con4: Fetch BEGIN result and completing transaction
reap;
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 05 CHANGED" WHERE col_a LIKE '05%';
UPDATE bup_commit_blocker.t3 SET col_a = "con4: 06 CHANGED" WHERE col_a LIKE '06%';
@@ -763,17 +682,17 @@ COMMIT;
connection con6;
-#--echo con6: Completing statement
+#--echo con6: Fetch INSERT result
#reap;
connection con7;
---echo con7: Completing statement
+--echo con7: Fetch DELETE result
reap;
-# Reconnect to con1 and let backup finish.
-
connection con1;
+
+--echo con1: Fetch BACKUP result
--replace_column 1 #
reap;
@@ -829,5 +748,5 @@ SELECT count(*) FROM bup_commit_blocker.
DROP DATABASE bup_commit_blocker;
remove_file $MYSQLTEST_VARDIR/master-data/bup_commit_blocker.bak;
-
+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-05-23 17:27:24 +02:00
+++ b/mysql-test/t/backup_ddl_blocker.test 2008-06-05 21:17:52 +02:00
@@ -90,21 +90,20 @@ connection con1;
# when the backup or restore is already running. Tests results
# show the realization of the assumptions above.
#
-# con1 con2 con3 con4 con6
+# con1 con2 con3 con4 con5 con6
# (setup) | | | | |
# | | | | | |
-# | | | | | lock("DDL_in_progress");
+# | | | | | |
# | statememt 1 | | | |
# | | statement 2 | | |
-# | | | | | <wait for locks>
+# | | | | | show status
# BACKUP/RESTORE | | | | |
-# | | | | | lock("DDL_blocked");
-# | | | | | <wait for locks>
+# | | | | | |
+# | | | | | |
# | <...> <...> | | |
# | | | statement 3 | |
# | | | | statement 4 |
-# | | | | | <wait for DDL blocker>
-# | | | | | <release locks>
+# | | | | | show status
# <...> | | <...> <...> |
# (results) | | | | |
#
diff -Nrup a/mysql-test/t/backup_snapshot.test b/mysql-test/t/backup_snapshot.test
--- a/mysql-test/t/backup_snapshot.test 2008-05-22 17:03:10 +02:00
+++ b/mysql-test/t/backup_snapshot.test 2008-06-05 21:17:52 +02:00
@@ -147,7 +147,7 @@ SET DEBUG_SYNC= 'now WAIT_FOR reading';
# the backup is released.
--echo con2: Activate sync points for the insert statement.
-SET DEBUG_SYNC= 'wait_if_global_read_lock SIGNAL inserting';
+SET DEBUG_SYNC= 'after_insert_locked_tables SIGNAL inserting';
# Insert will wait in wait_if_global_read_lock() until backup is done.
INSERT INTO bup_snapshot.t1 VALUES("- Dave Mathews");
diff -Nrup a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
--- a/mysql-test/t/disabled.def 2008-05-23 17:27:24 +02:00
+++ b/mysql-test/t/disabled.def 2008-06-05 21:17:52 +02:00
@@ -23,7 +23,7 @@ status : Bug#32966 main.st
ps_ddl : Bug#12093 2007-12-14 pending WL#4165 / WL#4166
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_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_progress :BUG#34235 pending replacement of test facility with WL#4259
#backup_security :BUG#34235 pending replacement of test facility with WL#4259
diff -Nrup a/sql/backup/data_backup.cc b/sql/backup/data_backup.cc
--- a/sql/backup/data_backup.cc 2008-05-22 14:12:57 +02:00
+++ b/sql/backup/data_backup.cc 2008-06-05 21:17:53 +02:00
@@ -409,7 +409,7 @@ int block_commits(THD *thd, TABLE_LIST *
/*
Step 1 - global read lock.
*/
- BACKUP_BREAKPOINT("commit_blocker_step_1");
+ DEBUG_SYNC(thd, "before_commit_block");
if (lock_global_read_lock(thd))
DBUG_RETURN(1);
@@ -642,15 +642,15 @@ int write_table_data(THD* thd, Backup_in
*/
vp_time= my_time(0);
- BACKUP_BREAKPOINT("commit_blocker_step_4");
BACKUP_BREAKPOINT("data_unlock");
+ DEBUG_SYNC(thd, "before_backup_data_unlock");
if (sch.unlock())
goto error;
/*
Unblock commits.
*/
- BACKUP_BREAKPOINT("backup_commit_blocker");
+ DEBUG_SYNC(thd, "before_backup_unblock_commit");
error= unblock_commits(thd);
if (error)
goto error;
diff -Nrup a/sql/debug_sync.cc b/sql/debug_sync.cc
--- a/sql/debug_sync.cc 2008-04-29 11:22:02 +02:00
+++ b/sql/debug_sync.cc 2008-06-05 21:17:52 +02:00
@@ -259,9 +259,9 @@ struct st_debug_sync_globals
static st_debug_sync_globals debug_sync_global; /* All globals in one object */
/**
- Callback pointer from thr_lock.cc
+ Callback pointer from thr_lock.c
*/
-extern void (*debug_sync_wait_for_lock_callback_ptr)(void);
+extern "C" void (*debug_sync_wait_for_lock_callback_ptr)(void);
/**
@@ -815,7 +815,7 @@ static st_debug_sync_action *debug_sync_
DBUG_ASSERT(name_len);
DBUG_ASSERT(ds_control);
DBUG_PRINT("debug_sync", ("sync_point: '%.*s'", (int) name_len, dsp_name));
- DBUG_PRINT("debug_sync", ("active: %lu allocated: %lu",
+ DBUG_PRINT("debug_sync", ("active: %u allocated: %u",
ds_control->ds_active, ds_control->ds_allocated));
/* There cannot be more active actions than allocated. */
@@ -1562,15 +1562,24 @@ static void debug_sync_execute(THD *thd,
{
action->execute--;
+ /*
+ Protect copying of the signal string to the global string
+ to avoid race conditions during test case development.
+ After approaching a clean test case it should not happen
+ that two threads try to signal at the same time.
+
+ Do also acquire the mutex for a WAIT_FOR action. The sense is to
+ clamp SIGNAL and WAIT_FOR in the mutex. If we wake another thread
+ with the signal, it should not run until we set PROC_INFO in
+ enter_cond().
+
+ Note. When 'execute' is non-zero, at least one of SIGNAL, WAIT_FOR
+ is set.
+ */
+ pthread_mutex_lock(&debug_sync_global.ds_mutex);
+
if (action->signal.length())
{
- /*
- Protect copying of the signal string to the global string
- to avoid race conditions during test case development.
- After approaching a clean test case it should not happen
- that two threads try to signal at the same time.
- */
- pthread_mutex_lock(&debug_sync_global.ds_mutex);
/* Copy the signal to the global variable. */
if (debug_sync_global.ds_signal.copy(action->signal))
{
@@ -1585,8 +1594,6 @@ static void debug_sync_execute(THD *thd,
DBUG_PRINT("debug_sync_exec", ("signal '%s' at: '%s'",
action->signal.c_ptr(),
action->sync_point.c_ptr()));
- pthread_mutex_unlock(&debug_sync_global.ds_mutex);
-
} /* end if (action->signal.length()) */
if (action->wait_for.length())
@@ -1594,11 +1601,13 @@ static void debug_sync_execute(THD *thd,
const char *old_proc_info;
int error= 0;
struct timespec abstime;
+ String proc_info;
- pthread_mutex_lock(&debug_sync_global.ds_mutex);
+ proc_info.set("debug sync point: ", 18, system_charset_info);
+ proc_info.append(action->sync_point);
old_proc_info= thd->enter_cond(&debug_sync_global.ds_cond,
&debug_sync_global.ds_mutex,
- action->sync_point.c_ptr());
+ proc_info.c_ptr());
set_timespec(abstime, action->timeout);
DBUG_PRINT("debug_sync_exec", ("wait for '%s' at: '%s' curr: '%s'",
@@ -1631,9 +1640,15 @@ static void debug_sync_execute(THD *thd,
action->wait_for.c_ptr(),
action->sync_point.c_ptr()));
+ /* exit_cond() does also unlock the mutex. */
thd->exit_cond(old_proc_info);
} /* end if (action->wait_for.length()) */
+ else
+ {
+ /* Need explicit unlock of mutex as we don't use exit_cond() here. */
+ pthread_mutex_unlock(&debug_sync_global.ds_mutex);
+ }
} /* end if (action->execute) */
diff -Nrup a/sql/handler.cc b/sql/handler.cc
--- a/sql/handler.cc 2008-04-07 17:26:37 +02:00
+++ b/sql/handler.cc 2008-06-05 21:17:52 +02:00
@@ -1091,7 +1091,7 @@ int ha_commit_trans(THD *thd, bool all)
/*
Breakpoints for backup testing.
*/
- BACKUP_BREAKPOINT("commit_blocker_step_1");
+ DEBUG_SYNC(thd, "within_ha_commit_trans");
DBUG_EXECUTE_IF("crash_commit_before", abort(););
/* Close all cursors that can not survive COMMIT */
diff -Nrup a/sql/lock.cc b/sql/lock.cc
--- a/sql/lock.cc 2008-05-22 17:03:10 +02:00
+++ b/sql/lock.cc 2008-06-05 21:17:53 +02:00
@@ -1424,6 +1424,19 @@ bool lock_global_read_lock(THD *thd)
{
const char *old_message;
(void) pthread_mutex_lock(&LOCK_global_read_lock);
+
+#if defined(ENABLED_DEBUG_SYNC)
+ /*
+ The below sync point fires if we have to wait for
+ protect_against_global_read_lock. Beware to use WAIT_FOR with this
+ sync point. We hold LOCK_global_read_lock here.
+ Call the sync point before calling enter_cond() as it will call it
+ itself if WAIT_FOR is used anyhow.
+ */
+ if (protect_against_global_read_lock)
+ DEBUG_SYNC(thd, "wait_protect_global_read_lock");
+#endif /* defined(ENABLED_DEBUG_SYNC) */
+
old_message=thd->enter_cond(&COND_global_read_lock, &LOCK_global_read_lock,
"Waiting to get readlock");
DBUG_PRINT("info",
@@ -1497,7 +1510,6 @@ bool wait_if_global_read_lock(THD *thd,
deadlock.
*/
safe_mutex_assert_not_owner(&LOCK_open);
- DEBUG_SYNC(thd, "wait_if_global_read_lock");
(void) pthread_mutex_lock(&LOCK_global_read_lock);
if ((need_exit_cond= must_wait))
@@ -1515,6 +1527,19 @@ bool wait_if_global_read_lock(THD *thd,
*/
DBUG_RETURN(is_not_commit);
}
+
+#if defined(ENABLED_DEBUG_SYNC)
+ /*
+ The below sync point fires if we have to wait for
+ global_read_lock. Beware to use WAIT_FOR with this
+ sync point. We hold LOCK_global_read_lock here.
+ Call the sync point before calling enter_cond() as it will call it
+ itself if WAIT_FOR is used anyhow.
+ */
+ if (must_wait)
+ DEBUG_SYNC(thd, "wait_if_global_read_lock");
+#endif /* defined(ENABLED_DEBUG_SYNC) */
+
old_message=thd->enter_cond(&COND_global_read_lock, &LOCK_global_read_lock,
"Waiting for release of readlock");
while (must_wait && ! thd->killed &&
@@ -1528,7 +1553,11 @@ bool wait_if_global_read_lock(THD *thd,
result=1;
}
if (!abort_on_refresh && !result)
+ {
protect_against_global_read_lock++;
+ DBUG_PRINT("sql_lock", ("protect_against_global_read_lock incr: %u",
+ protect_against_global_read_lock));
+ }
/*
The following is only true in case of a global read locks (which is rare)
and if old_message is set
@@ -1550,6 +1579,8 @@ void start_waiting_global_read_lock(THD
(void) pthread_mutex_lock(&LOCK_global_read_lock);
tmp= (!--protect_against_global_read_lock &&
(waiting_for_read_lock || global_read_lock_blocks_commit));
+ DBUG_PRINT("sql_lock", ("protect_against_global_read_lock decr: %u",
+ protect_against_global_read_lock));
(void) pthread_mutex_unlock(&LOCK_global_read_lock);
if (tmp)
pthread_cond_broadcast(&COND_global_read_lock);
diff -Nrup a/sql/sql_delete.cc b/sql/sql_delete.cc
--- a/sql/sql_delete.cc 2008-04-14 12:10:01 +02:00
+++ b/sql/sql_delete.cc 2008-06-05 21:17:53 +02:00
@@ -400,13 +400,7 @@ cleanup:
DBUG_ASSERT(transactional_table || !deleted || thd->transaction.stmt.modified_non_trans_table);
free_underlaid_joins(thd, select_lex);
- /*
- Breakpoints for backup testing.
- */
- if (!table->file->has_transactions())
- {
- BACKUP_BREAKPOINT("backup_commit_blocker");
- }
+ DEBUG_SYNC(thd, "at_delete_end");
MYSQL_DELETE_END();
if (error < 0 || (thd->lex->ignore && !thd->is_fatal_error))
diff -Nrup a/sql/sql_insert.cc b/sql/sql_insert.cc
--- a/sql/sql_insert.cc 2008-04-21 12:20:17 +02:00
+++ b/sql/sql_insert.cc 2008-06-05 21:17:53 +02:00
@@ -620,8 +620,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
/*
Breakpoints for backup testing.
*/
- BACKUP_BREAKPOINT("backup_cs_reading");
- BACKUP_BREAKPOINT("commit_blocker_step_1");
+ DEBUG_SYNC(thd, "after_insert_locked_tables");
thd_proc_info(thd, "init");
thd->used_tables=0;
values= its++;
diff -Nrup a/sql/sql_parse.cc b/sql/sql_parse.cc
--- a/sql/sql_parse.cc 2008-05-05 21:33:24 +02:00
+++ b/sql/sql_parse.cc 2008-06-05 21:17:53 +02:00
@@ -3849,7 +3849,7 @@ end_with_restore_list:
/*
Breakpoints for backup testing.
*/
- BACKUP_BREAKPOINT("backup_commit_blocker");
+ DEBUG_SYNC(thd, "before_begin_trans");
if (begin_trans(thd))
goto error;
my_ok(thd);
@@ -3861,7 +3861,7 @@ end_with_restore_list:
/*
Breakpoints for backup testing.
*/
- BACKUP_BREAKPOINT("backup_commit_blocker");
+ DEBUG_SYNC(thd, "after_commit");
my_ok(thd);
break;
case SQLCOM_ROLLBACK:
| Thread |
|---|
| • bk commit into 6.0 tree (istruewing:1.2627) WL#4259 | Ingo Struewing | 5 Jun |