Browse Source
WL#4259 - Debug Sync Facility
WL#4259 - Debug Sync Facility
Backport from 6.0 to 5.1. Only those sync points are included, which are used in debug_sync.test. The Debug Sync Facility allows to place synchronization points in the code: open_tables(...) DEBUG_SYNC(thd, "after_open_tables"); lock_tables(...) When activated, a sync point can - Send a signal and/or - Wait for a signal Nomenclature: - signal: A value of a global variable that persists until overwritten by a new signal. The global variable can also be seen as a "signal post" or "flag mast". Then the signal is what is attached to the "signal post" or "flag mast". - send a signal: Assign the value (the signal) to the global variable ("set a flag") and broadcast a global condition to wake those waiting for a signal. - wait for a signal: Loop over waiting for the global condition until the global value matches the wait-for signal. Please find more information in the top comment in debug_sync.cc or in the worklog entry. .bzrignore: WL#4259 - Debug Sync Facility Added the symbolic link libmysqld/debug_sync.cc. CMakeLists.txt: WL#4259 - Debug Sync Facility Added definition for ENABLED_DEBUG_SYNC. configure.in: WL#4259 - Debug Sync Facility Added definition for ENABLED_DEBUG_SYNC. include/my_sys.h: WL#4259 - Debug Sync Facility Added definition for the DEBUG_SYNC_C macro. libmysqld/CMakeLists.txt: WL#4259 - Debug Sync Facility Added sql/debug_sync.cc. libmysqld/Makefile.am: WL#4259 - Debug Sync Facility Added sql/debug_sync.cc. mysql-test/include/have_debug_sync.inc: WL#4259 - Debug Sync Facility New include file. mysql-test/mysql-test-run.pl: WL#4259 - Debug Sync Facility Added option --debug_sync_timeout. mysql-test/r/debug_sync.result: WL#4259 - Debug Sync Facility New test result. mysql-test/r/have_debug_sync.require: WL#4259 - Debug Sync Facility New require file. mysql-test/t/debug_sync.test: WL#4259 - Debug Sync Facility New test file. mysys/my_static.c: WL#4259 - Debug Sync Facility Added definition for debug_sync_C_callback_ptr. mysys/thr_lock.c: WL#4259 - Debug Sync Facility Added sync point "wait_for_lock". sql/CMakeLists.txt: WL#4259 - Debug Sync Facility Added debug_sync.cc and debug_sync.h. sql/Makefile.am: WL#4259 - Debug Sync Facility Added debug_sync.cc and debug_sync.h. sql/debug_sync.cc: WL#4259 - Debug Sync Facility New source file. sql/debug_sync.h: WL#4259 - Debug Sync Facility New header file. sql/mysqld.cc: WL#4259 - Debug Sync Facility Added opt_debug_sync_timeout. Added calls to debug_sync_init() and debug_sync_end(). Fixed a purecov comment (unrelated). sql/set_var.cc: WL#4259 - Debug Sync Facility Added server variable "debug_sync". sql/set_var.h: WL#4259 - Debug Sync Facility Added declaration for server variable "debug_sync". sql/share/errmsg.txt: WL#4259 - Debug Sync Facility Added error messages ER_DEBUG_SYNC_TIMEOUT and ER_DEBUG_SYNC_HIT_LIMIT. sql/sql_base.cc: WL#4259 - Debug Sync Facility Added sync points "after_flush_unlock" and "before_lock_tables_takes_lock". sql/sql_class.cc: WL#4259 - Debug Sync Facility Added initialization for debug_sync_control to THD::THD. Added calls to debug_sync_init_thread() and debug_sync_end_thread(). sql/sql_class.h: WL#4259 - Debug Sync Facility Added element debug_sync_control to THD. storage/myisam/myisamchk.c: Fixed a typo in an error message string (unrelated).pull/374/head
25 changed files with 2846 additions and 2 deletions
-
1.bzrignore
-
6CMakeLists.txt
-
17configure.in
-
10include/my_sys.h
-
1libmysqld/CMakeLists.txt
-
1libmysqld/Makefile.am
-
5mysql-test/include/have_debug_sync.inc
-
9mysql-test/mysql-test-run.pl
-
277mysql-test/r/debug_sync.result
-
2mysql-test/r/have_debug_sync.require
-
420mysql-test/t/debug_sync.test
-
8mysys/my_static.c
-
22mysys/thr_lock.c
-
1sql/CMakeLists.txt
-
2sql/Makefile.am
-
1906sql/debug_sync.cc
-
60sql/debug_sync.h
-
46sql/mysqld.cc
-
6sql/set_var.cc
-
15sql/set_var.h
-
7sql/share/errmsg.txt
-
4sql/sql_base.cc
-
15sql/sql_class.cc
-
5sql/sql_class.h
-
2storage/myisam/myisamchk.c
@ -0,0 +1,5 @@ |
|||
--require r/have_debug_sync.require |
|||
disable_query_log; |
|||
let $value= query_get_value(SHOW VARIABLES LIKE 'debug_sync', Value, 1); |
|||
eval SELECT ('$value' LIKE 'ON %') AS debug_sync; |
|||
enable_query_log; |
@ -0,0 +1,277 @@ |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: '' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 CLEAR'; |
|||
SET DEBUG_SYNC='p0 TEST'; |
|||
SET DEBUG_SYNC='RESET'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6'; |
|||
set debug_sync='p0 signal s1 wait_for s2 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 execute 2'; |
|||
set debug_sync='p0 signal s1 wait_for s2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2'; |
|||
set debug_sync='p0 signal s1 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 execute 2'; |
|||
set debug_sync='p0 signal s1 hit_limit 3'; |
|||
set debug_sync='p0 signal s1'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 execute 2'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 timeout 6'; |
|||
set debug_sync='p0 wait_for s2 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 execute 2'; |
|||
set debug_sync='p0 wait_for s2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2'; |
|||
set debug_sync='p0 hit_limit 3'; |
|||
set debug_sync='p0 clear'; |
|||
set debug_sync='p0 test'; |
|||
set debug_sync='reset'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 |
|||
EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
SET DEBUG_SYNC=''; |
|||
ERROR 42000: Missing synchronization point name |
|||
SET DEBUG_SYNC=' '; |
|||
ERROR 42000: Missing synchronization point name |
|||
SET DEBUG_SYNC='p0'; |
|||
ERROR 42000: Missing action after synchronization point name 'p0' |
|||
SET DEBUG_SYNC='p0 EXECUTE 2'; |
|||
ERROR 42000: Missing action before EXECUTE |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAL' |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6 EXECUTE 2'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 EXECUTE 2 SIGNAL s1 TIMEOUT 6'; |
|||
ERROR 42000: Missing action before EXECUTE |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 SIGNAL s1'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT' |
|||
SET DEBUG_SYNC='p0 EXECUTE 2 TIMEOUT 6 SIGNAL s1'; |
|||
ERROR 42000: Missing action before EXECUTE |
|||
SET DEBUG_SYNC='p0 CLEAR HIT_LIMIT 3'; |
|||
ERROR 42000: Nothing must follow action CLEAR |
|||
SET DEBUG_SYNC='CLEAR'; |
|||
ERROR 42000: Missing action after synchronization point name 'CLEAR' |
|||
SET DEBUG_SYNC='p0 CLEAR p0'; |
|||
ERROR 42000: Nothing must follow action CLEAR |
|||
SET DEBUG_SYNC='TEST'; |
|||
ERROR 42000: Missing action after synchronization point name 'TEST' |
|||
SET DEBUG_SYNC='p0 TEST p0'; |
|||
ERROR 42000: Nothing must follow action TEST |
|||
SET DEBUG_SYNC='p0 RESET'; |
|||
ERROR 42000: Illegal or out of order stuff: 'RESET' |
|||
SET DEBUG_SYNC='RESET p0'; |
|||
ERROR 42000: Illegal or out of order stuff: 'p0' |
|||
SET DEBUG_SYNC='p0 RESET p0'; |
|||
ERROR 42000: Illegal or out of order stuff: 'RESET' |
|||
SET DEBUG_SYNC='p0 SIGNAL '; |
|||
ERROR 42000: Missing signal name after action SIGNAL |
|||
SET DEBUG_SYNC='p0 WAIT_FOR '; |
|||
ERROR 42000: Missing signal name after action WAIT_FOR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE '; |
|||
ERROR 42000: Missing valid number after EXECUTE |
|||
SET DEBUG_SYNCx='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
ERROR HY000: Unknown system variable 'DEBUG_SYNCx' |
|||
SET DEBUG_SYNC='p0 SIGNAx s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
ERROR 42000: Illegal or out of order stuff: 'SIGNAx' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOx s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
ERROR 42000: Illegal or out of order stuff: 'WAIT_FOx' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUx 0 EXECUTE 2 HIT_LIMIT 3'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TIMEOUx' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTx 2 HIT_LIMIT 3'; |
|||
ERROR 42000: Illegal or out of order stuff: 'EXECUTx' |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIx 3'; |
|||
ERROR 42000: Illegal or out of order stuff: 'HIT_LIMIx' |
|||
SET DEBUG_SYNC='p0 CLEARx'; |
|||
ERROR 42000: Illegal or out of order stuff: 'CLEARx' |
|||
SET DEBUG_SYNC='p0 TESTx'; |
|||
ERROR 42000: Illegal or out of order stuff: 'TESTx' |
|||
SET DEBUG_SYNC='RESETx'; |
|||
ERROR 42000: Missing action after synchronization point name 'RESETx' |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 0x6 EXECUTE 2 HIT_LIMIT 3'; |
|||
ERROR 42000: Missing valid number after TIMEOUT |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 0x2 HIT_LIMIT 3'; |
|||
ERROR 42000: Missing valid number after EXECUTE |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 7 EXECUTE 2 HIT_LIMIT 0x3'; |
|||
ERROR 42000: Missing valid number after HIT_LIMIT |
|||
SET DEBUG_SYNC= 7; |
|||
ERROR 42000: Incorrect argument type to variable 'debug_sync' |
|||
SET GLOBAL DEBUG_SYNC= 'p0 CLEAR'; |
|||
ERROR HY000: Variable 'debug_sync' is a SESSION variable and can't be used with SET GLOBAL |
|||
SET @myvar= 'now SIGNAL from_myvar'; |
|||
SET DEBUG_SYNC= @myvar; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 'from_myvar' |
|||
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24); |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 'from_function' |
|||
SET DEBUG_SYNC= 'now SIGNAL something'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 'something' |
|||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0'; |
|||
Warnings: |
|||
Warning #### debug sync point wait timed out |
|||
SET DEBUG_SYNC= 'now SIGNAL nothing'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 'nothing' |
|||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0'; |
|||
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 'nothing' |
|||
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0'; |
|||
SET DEBUG_SYNC= 'now HIT_LIMIT 1'; |
|||
ERROR HY000: debug sync point hit limit reached |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: '' |
|||
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p4a SIGNAL s4 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p5abcde SIGNAL s5 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p6ab SIGNAL s6 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p7 SIGNAL s7 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p8abcdef SIGNAL s8 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p4a TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's4' |
|||
SET DEBUG_SYNC= 'p1abcd TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's1' |
|||
SET DEBUG_SYNC= 'p7 TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's7' |
|||
SET DEBUG_SYNC= 'p9abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's9' |
|||
SET DEBUG_SYNC= 'p3abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's3' |
|||
SET DEBUG_SYNC= 'p1abcd CLEAR'; |
|||
SET DEBUG_SYNC= 'p2abc CLEAR'; |
|||
SET DEBUG_SYNC= 'p5abcde CLEAR'; |
|||
SET DEBUG_SYNC= 'p6ab CLEAR'; |
|||
SET DEBUG_SYNC= 'p8abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p9abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p3abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p4a CLEAR'; |
|||
SET DEBUG_SYNC= 'p7 CLEAR'; |
|||
SET DEBUG_SYNC= 'p1abcd TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's3' |
|||
SET DEBUG_SYNC= 'p7 TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's3' |
|||
SET DEBUG_SYNC= 'p9abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: 's3' |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
Variable_name Value |
|||
debug_sync ON - current signal: '' |
|||
CREATE USER mysqltest_1@localhost; |
|||
GRANT SUPER ON *.* TO mysqltest_1@localhost; |
|||
connection con1, mysqltest_1 |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
connection default |
|||
DROP USER mysqltest_1@localhost; |
|||
CREATE USER mysqltest_2@localhost; |
|||
GRANT ALL ON *.* TO mysqltest_2@localhost; |
|||
REVOKE SUPER ON *.* FROM mysqltest_2@localhost; |
|||
connection con1, mysqltest_2 |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
ERROR 42000: Access denied; you need the SUPER privilege for this operation |
|||
connection default |
|||
DROP USER mysqltest_2@localhost; |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
CREATE TABLE t1 (c1 INT); |
|||
connection con1 |
|||
SET DEBUG_SYNC= 'before_lock_tables_takes_lock |
|||
SIGNAL opened WAIT_FOR flushed'; |
|||
INSERT INTO t1 VALUES(1); |
|||
connection default |
|||
SET DEBUG_SYNC= 'now WAIT_FOR opened'; |
|||
SET DEBUG_SYNC= 'after_flush_unlock SIGNAL flushed'; |
|||
FLUSH TABLE t1; |
|||
connection con1 |
|||
connection default |
|||
DROP TABLE t1; |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
CREATE TABLE t1 (c1 INT); |
|||
LOCK TABLE t1 WRITE; |
|||
connection con1 |
|||
SET DEBUG_SYNC= 'wait_for_lock SIGNAL locked EXECUTE 2'; |
|||
INSERT INTO t1 VALUES (1); |
|||
connection default |
|||
SET DEBUG_SYNC= 'now WAIT_FOR locked'; |
|||
UNLOCK TABLES; |
|||
connection con1 |
|||
retrieve INSERT result. |
|||
connection default |
|||
DROP TABLE t1; |
|||
SET DEBUG_SYNC= 'RESET'; |
@ -0,0 +1,2 @@ |
|||
debug_sync |
|||
1 |
@ -0,0 +1,420 @@ |
|||
###################### t/debug_sync.test ############################### |
|||
# # |
|||
# Testing of the Debug Sync Facility. # |
|||
# # |
|||
# There is important documentation within sql/debug_sync.cc # |
|||
# # |
|||
# Used objects in this test case: # |
|||
# p0 - synchronization point 0. Non-existent dummy sync point. # |
|||
# s1 - signal 1. # |
|||
# s2 - signal 2. # |
|||
# # |
|||
# Creation: # |
|||
# 2008-02-18 istruewing # |
|||
# # |
|||
######################################################################## |
|||
|
|||
# |
|||
# We need the Debug Sync Facility. |
|||
# |
|||
--source include/have_debug_sync.inc |
|||
|
|||
# |
|||
# We are checking privileges, which the embedded server cannot do. |
|||
# |
|||
--source include/not_embedded.inc |
|||
|
|||
# |
|||
# Preparative cleanup. |
|||
# |
|||
--disable_warnings |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
--enable_warnings |
|||
|
|||
# |
|||
# Show the special system variable. |
|||
# It shows ON or OFF depending on the command line option --debug-sync. |
|||
# The test case assumes it is ON (command line option present). |
|||
# |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
|
|||
# |
|||
# Syntax. Valid forms. |
|||
# |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC='p0 CLEAR'; |
|||
SET DEBUG_SYNC='p0 TEST'; |
|||
SET DEBUG_SYNC='RESET'; |
|||
|
|||
# |
|||
# Syntax. Valid forms. Lower case. |
|||
# |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 timeout 6'; |
|||
set debug_sync='p0 signal s1 wait_for s2 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2 execute 2'; |
|||
set debug_sync='p0 signal s1 wait_for s2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 wait_for s2'; |
|||
set debug_sync='p0 signal s1 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 signal s1 execute 2'; |
|||
set debug_sync='p0 signal s1 hit_limit 3'; |
|||
set debug_sync='p0 signal s1'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 execute 2'; |
|||
set debug_sync='p0 wait_for s2 timeout 6 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 timeout 6'; |
|||
set debug_sync='p0 wait_for s2 execute 2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2 execute 2'; |
|||
set debug_sync='p0 wait_for s2 hit_limit 3'; |
|||
set debug_sync='p0 wait_for s2'; |
|||
set debug_sync='p0 hit_limit 3'; |
|||
set debug_sync='p0 clear'; |
|||
set debug_sync='p0 test'; |
|||
set debug_sync='reset'; |
|||
|
|||
# |
|||
# Syntax. Valid forms. Line wrap, leading, mid, trailing space. |
|||
# |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 |
|||
EXECUTE 2 HIT_LIMIT 3'; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2'; |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 '; |
|||
|
|||
# |
|||
# Syntax. Invalid forms. |
|||
# |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC=''; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC=' '; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6 EXECUTE 2'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 EXECUTE 2 SIGNAL s1 TIMEOUT 6'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TIMEOUT 6 SIGNAL s1'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 EXECUTE 2 TIMEOUT 6 SIGNAL s1'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 CLEAR HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='CLEAR'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 CLEAR p0'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='TEST'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TEST p0'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 RESET'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='RESET p0'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 RESET p0'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL '; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR '; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE '; |
|||
|
|||
# |
|||
# Syntax. Invalid keywords used. |
|||
# |
|||
--error ER_UNKNOWN_SYSTEM_VARIABLE |
|||
SET DEBUG_SYNCx='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAx s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOx s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUx 0 EXECUTE 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTx 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIx 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 CLEARx'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 TESTx'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='RESETx'; |
|||
|
|||
# |
|||
# Syntax. Invalid numbers. Decimal only. |
|||
# |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 0x6 EXECUTE 2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 0x2 HIT_LIMIT 3'; |
|||
--error ER_PARSE_ERROR |
|||
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 7 EXECUTE 2 HIT_LIMIT 0x3'; |
|||
|
|||
# |
|||
# Syntax. Invalid value type. |
|||
# |
|||
--error ER_WRONG_TYPE_FOR_VAR |
|||
SET DEBUG_SYNC= 7; |
|||
|
|||
# |
|||
# Syntax. DEBUG_SYNC is a SESSION-only variable. |
|||
# |
|||
--error ER_LOCAL_VARIABLE |
|||
SET GLOBAL DEBUG_SYNC= 'p0 CLEAR'; |
|||
|
|||
# |
|||
# Syntax. The variable value does not need to be a string literal. |
|||
# |
|||
SET @myvar= 'now SIGNAL from_myvar'; |
|||
SET DEBUG_SYNC= @myvar; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
# |
|||
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24); |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
|
|||
# |
|||
# Functional tests. |
|||
# |
|||
# NOTE: There is the special synchronization point 'now'. It is placed |
|||
# immediately after setting of the DEBUG_SYNC variable. |
|||
# So it is executed before the SET statement ends. |
|||
# |
|||
# NOTE: There is only one global signal (say "signal post" or "flag mast"). |
|||
# A SIGNAL action writes its signal into it ("sets a flag"). |
|||
# The signal persists until explicitly overwritten. |
|||
# To avoid confusion for later tests, it is recommended to clear |
|||
# the signal by signalling "empty" ("setting the 'empty' flag"): |
|||
# SET DEBUG_SYNC= 'now SIGNAL empty'; |
|||
# Preferably you can reset the whole facility with: |
|||
# SET DEBUG_SYNC= 'RESET'; |
|||
# The signal is then '' (really empty) which connot be done otherwise. |
|||
# |
|||
|
|||
# |
|||
# Time out immediately. This gives just a warning. |
|||
# |
|||
SET DEBUG_SYNC= 'now SIGNAL something'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
# Suppress warning number |
|||
--replace_column 2 #### |
|||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0'; |
|||
# |
|||
# If signal is present already, TIMEOUT 0 does not give a warning. |
|||
# |
|||
SET DEBUG_SYNC= 'now SIGNAL nothing'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0'; |
|||
|
|||
# |
|||
# EXECUTE 0 is effectively a no-op. |
|||
# |
|||
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0'; |
|||
|
|||
# |
|||
# Run into HIT_LIMIT. This gives an error. |
|||
# |
|||
--error ER_DEBUG_SYNC_HIT_LIMIT |
|||
SET DEBUG_SYNC= 'now HIT_LIMIT 1'; |
|||
|
|||
# |
|||
# Many actions. Watch the array growing and shrinking in the debug trace: |
|||
# egrep 'query:|debug_sync_action:' mysql-test/var/log/master.trace |
|||
# |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p4a SIGNAL s4 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p5abcde SIGNAL s5 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p6ab SIGNAL s6 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p7 SIGNAL s7 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p8abcdef SIGNAL s8 EXECUTE 2'; |
|||
SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2'; |
|||
# |
|||
# Execute some actions to show they exist. Each sets a distinct signal. |
|||
# |
|||
SET DEBUG_SYNC= 'p4a TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p1abcd TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p7 TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p9abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p3abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
# |
|||
# Clear the actions. |
|||
# |
|||
SET DEBUG_SYNC= 'p1abcd CLEAR'; |
|||
SET DEBUG_SYNC= 'p2abc CLEAR'; |
|||
SET DEBUG_SYNC= 'p5abcde CLEAR'; |
|||
SET DEBUG_SYNC= 'p6ab CLEAR'; |
|||
SET DEBUG_SYNC= 'p8abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p9abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p3abcdef CLEAR'; |
|||
SET DEBUG_SYNC= 'p4a CLEAR'; |
|||
SET DEBUG_SYNC= 'p7 CLEAR'; |
|||
# |
|||
# Execute some actions to show they have gone. |
|||
# |
|||
SET DEBUG_SYNC= 'p1abcd TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p7 TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
SET DEBUG_SYNC= 'p9abcdef TEST'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
# |
|||
# Now cleanup. Actions are clear already, but signal needs to be cleared. |
|||
# |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
SHOW VARIABLES LIKE 'DEBUG_SYNC'; |
|||
|
|||
# |
|||
# Facility requires SUPER privilege. |
|||
# |
|||
CREATE USER mysqltest_1@localhost; |
|||
GRANT SUPER ON *.* TO mysqltest_1@localhost; |
|||
--echo connection con1, mysqltest_1 |
|||
connect (con1,localhost,mysqltest_1,,); |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
disconnect con1; |
|||
--echo connection default |
|||
connection default; |
|||
DROP USER mysqltest_1@localhost; |
|||
# |
|||
CREATE USER mysqltest_2@localhost; |
|||
GRANT ALL ON *.* TO mysqltest_2@localhost; |
|||
REVOKE SUPER ON *.* FROM mysqltest_2@localhost; |
|||
--echo connection con1, mysqltest_2 |
|||
connect (con1,localhost,mysqltest_2,,); |
|||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
disconnect con1; |
|||
--echo connection default |
|||
connection default; |
|||
DROP USER mysqltest_2@localhost; |
|||
|
|||
# |
|||
# Example 1. |
|||
# |
|||
# Preparative cleanup. |
|||
--disable_warnings |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
--enable_warnings |
|||
# |
|||
# Test. |
|||
CREATE TABLE t1 (c1 INT); |
|||
--echo connection con1 |
|||
connect (con1,localhost,root,,); |
|||
SET DEBUG_SYNC= 'before_lock_tables_takes_lock |
|||
SIGNAL opened WAIT_FOR flushed'; |
|||
send INSERT INTO t1 VALUES(1); |
|||
--echo connection default |
|||
connection default; |
|||
SET DEBUG_SYNC= 'now WAIT_FOR opened'; |
|||
SET DEBUG_SYNC= 'after_flush_unlock SIGNAL flushed'; |
|||
FLUSH TABLE t1; |
|||
--echo connection con1 |
|||
connection con1; |
|||
reap; |
|||
disconnect con1; |
|||
--echo connection default |
|||
connection default; |
|||
DROP TABLE t1; |
|||
|
|||
# |
|||
# Example 2. |
|||
# |
|||
# Preparative cleanup. |
|||
--disable_warnings |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
DROP TABLE IF EXISTS t1; |
|||
--enable_warnings |
|||
# |
|||
# Test. |
|||
CREATE TABLE t1 (c1 INT); |
|||
LOCK TABLE t1 WRITE; |
|||
--echo connection con1 |
|||
connect (con1,localhost,root,,); |
|||
# Retain action after use. First used by general_log. |
|||
SET DEBUG_SYNC= 'wait_for_lock SIGNAL locked EXECUTE 2'; |
|||
send INSERT INTO t1 VALUES (1); |
|||
--echo connection default |
|||
connection default; |
|||
# Wait until INSERT waits for lock. |
|||
SET DEBUG_SYNC= 'now WAIT_FOR locked'; |
|||
# let INSERT continue. |
|||
UNLOCK TABLES; |
|||
--echo connection con1 |
|||
connection con1; |
|||
--echo retrieve INSERT result. |
|||
reap; |
|||
disconnect con1; |
|||
--echo connection default |
|||
connection default; |
|||
DROP TABLE t1; |
|||
|
|||
# |
|||
# Cleanup after test case. |
|||
# Otherwise signal would contain 'flushed' here, |
|||
# which could confuse the next test. |
|||
# |
|||
SET DEBUG_SYNC= 'RESET'; |
|||
|
1906
sql/debug_sync.cc
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,60 @@ |
|||
#ifndef DEBUG_SYNC_INCLUDED |
|||
#define DEBUG_SYNC_INCLUDED |
|||
|
|||
/* Copyright (C) 2008 Sun Microsystems, Inc. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ |
|||
|
|||
/** |
|||
@file |
|||
|
|||
Declarations for the Debug Sync Facility. See debug_sync.cc for details. |
|||
*/ |
|||
|
|||
#ifdef USE_PRAGMA_INTERFACE |
|||
#pragma interface /* gcc class implementation */ |
|||
#endif |
|||
|
|||
#include <my_global.h> |
|||
|
|||
class THD; |
|||
|
|||
#if defined(ENABLED_DEBUG_SYNC) |
|||
|
|||
/* Macro to be put in the code at synchronization points. */ |
|||
#define DEBUG_SYNC(_thd_, _sync_point_name_) \ |
|||
do { if (unlikely(opt_debug_sync_timeout)) \ |
|||
debug_sync(_thd_, STRING_WITH_LEN(_sync_point_name_)); \ |
|||
} while (0) |
|||
|
|||
/* Command line option --debug-sync-timeout. See mysqld.cc. */ |
|||
extern uint opt_debug_sync_timeout; |
|||
|
|||
/* Default WAIT_FOR timeout if command line option is given without argument. */ |
|||
#define DEBUG_SYNC_DEFAULT_WAIT_TIMEOUT 300 |
|||
|
|||
/* Debug Sync prototypes. See debug_sync.cc. */ |
|||
extern int debug_sync_init(void); |
|||
extern void debug_sync_end(void); |
|||
extern void debug_sync_init_thread(THD *thd); |
|||
extern void debug_sync_end_thread(THD *thd); |
|||
extern void debug_sync(THD *thd, const char *sync_point_name, size_t name_len); |
|||
|
|||
#else /* defined(ENABLED_DEBUG_SYNC) */ |
|||
|
|||
#define DEBUG_SYNC(_thd_, _sync_point_name_) /* disabled DEBUG_SYNC */ |
|||
|
|||
#endif /* defined(ENABLED_DEBUG_SYNC) */ |
|||
|
|||
#endif /* DEBUG_SYNC_INCLUDED */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue