Skip to content

Commit 21586df

Browse files
author
Ingo Struewing
committed
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.
1 parent 8b98434 commit 21586df

25 files changed

+2846
-2
lines changed

.bzrignore

+1
Original file line numberDiff line numberDiff line change
@@ -3064,3 +3064,4 @@ sql/share/spanish
30643064
sql/share/swedish
30653065
sql/share/ukrainian
30663066
libmysqld/examples/mysqltest.cc
3067+
libmysqld/debug_sync.cc

CMakeLists.txt

+6
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ IF(EXTRA_DEBUG)
6666
ADD_DEFINITIONS(-D EXTRA_DEBUG)
6767
ENDIF(EXTRA_DEBUG)
6868

69+
IF(ENABLED_DEBUG_SYNC)
70+
ADD_DEFINITIONS(-D ENABLED_DEBUG_SYNC)
71+
ENDIF(ENABLED_DEBUG_SYNC)
72+
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
73+
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DENABLED_DEBUG_SYNC")
74+
6975
# in some places we use DBUG_OFF
7076
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDBUG_OFF")
7177
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")

configure.in

+17
Original file line numberDiff line numberDiff line change
@@ -1708,6 +1708,23 @@ else
17081708
CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
17091709
fi
17101710

1711+
# Debug Sync Facility. NOTE: depends on 'with_debug'. Must be behind it.
1712+
AC_MSG_CHECKING(if Debug Sync Facility should be enabled.)
1713+
AC_ARG_ENABLE(debug_sync,
1714+
AS_HELP_STRING([--enable-debug-sync],
1715+
[Build a version with Debug Sync Facility]),
1716+
[ enable_debug_sync=$enableval ],
1717+
[ enable_debug_sync=$with_debug ])
1718+
1719+
if test "$enable_debug_sync" != "no"
1720+
then
1721+
AC_DEFINE([ENABLED_DEBUG_SYNC], [1],
1722+
[If Debug Sync Facility should be enabled])
1723+
AC_MSG_RESULT([yes])
1724+
else
1725+
AC_MSG_RESULT([no])
1726+
fi
1727+
17111728
# If we should allow error injection tests
17121729
AC_ARG_WITH(error-inject,
17131730
AC_HELP_STRING([--with-error-inject],[Enable error injection in MySQL Server]),

include/my_sys.h

+10
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,16 @@ extern char *my_strndup(const char *from, size_t length,
172172
#define TRASH(A,B) /* nothing */
173173
#endif
174174

175+
#if defined(ENABLED_DEBUG_SYNC)
176+
extern void (*debug_sync_C_callback_ptr)(const char *, size_t);
177+
#define DEBUG_SYNC_C(_sync_point_name_) do { \
178+
if (debug_sync_C_callback_ptr != NULL) \
179+
(*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \
180+
while(0)
181+
#else
182+
#define DEBUG_SYNC_C(_sync_point_name_)
183+
#endif /* defined(ENABLED_DEBUG_SYNC) */
184+
175185
#ifdef HAVE_LARGE_PAGES
176186
extern uint my_get_large_page_size(void);
177187
extern uchar * my_large_malloc(size_t size, myf my_flags);

libmysqld/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ SET(LIBMYSQLD_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
129129
../sql/sql_list.cc ../sql/sql_load.cc ../sql/sql_locale.cc
130130
../sql/sql_binlog.cc ../sql/sql_manager.cc ../sql/sql_map.cc
131131
../sql/sql_parse.cc ../sql/sql_partition.cc ../sql/sql_plugin.cc
132+
../sql/debug_sync.cc
132133
../sql/sql_prepare.cc ../sql/sql_rename.cc ../sql/sql_repl.cc
133134
../sql/sql_select.cc ../sql/sql_servers.cc
134135
../sql/sql_show.cc ../sql/sql_state.c ../sql/sql_string.cc

libmysqld/Makefile.am

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
7474
sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc sp_rcontext.cc \
7575
parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
7676
rpl_filter.cc sql_partition.cc sql_builtin.cc sql_plugin.cc \
77+
debug_sync.cc \
7778
sql_tablespace.cc \
7879
rpl_injector.cc my_user.c partition_info.cc \
7980
sql_servers.cc event_parse_data.cc
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
--require r/have_debug_sync.require
2+
disable_query_log;
3+
let $value= query_get_value(SHOW VARIABLES LIKE 'debug_sync', Value, 1);
4+
eval SELECT ('$value' LIKE 'ON %') AS debug_sync;
5+
enable_query_log;

mysql-test/mysql-test-run.pl

+9
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ END
226226
my @valgrind_args;
227227
my $opt_valgrind_path;
228228
my $opt_callgrind;
229+
my $opt_debug_sync_timeout= 300; # Default timeout for WAIT_FOR actions.
229230

230231
our $opt_warnings= 1;
231232

@@ -867,6 +868,7 @@ sub command_line_setup {
867868
'valgrind-option=s' => \@valgrind_args,
868869
'valgrind-path=s' => \$opt_valgrind_path,
869870
'callgrind' => \$opt_callgrind,
871+
'debug-sync-timeout=i' => \$opt_debug_sync_timeout,
870872

871873
# Directories
872874
'tmpdir=s' => \$opt_tmpdir,
@@ -4170,6 +4172,11 @@ ($$$)
41704172
mtr_add_arg($args, "%s", "--core-file");
41714173
}
41724174

4175+
# Enable the debug sync facility, set default wait timeout.
4176+
# Facility stays disabled if timeout value is zero.
4177+
mtr_add_arg($args, "--loose-debug-sync-timeout=%s",
4178+
$opt_debug_sync_timeout);
4179+
41734180
return $args;
41744181
}
41754182

@@ -5280,6 +5287,8 @@ ($)
52805287
to turn off.
52815288
52825289
sleep=SECONDS Passed to mysqltest, will be used as fixed sleep time
5290+
debug-sync-timeout=NUM Set default timeout for WAIT_FOR debug sync
5291+
actions. Disable facility with NUM=0.
52835292
gcov Collect coverage information after the test.
52845293
The result is a gcov file per source and header file.
52855294
experimental=<file> Refer to list of tests considered experimental;

mysql-test/r/debug_sync.result

+277
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
SET DEBUG_SYNC= 'RESET';
2+
DROP TABLE IF EXISTS t1;
3+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
4+
Variable_name Value
5+
debug_sync ON - current signal: ''
6+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
7+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
8+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3';
9+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6';
10+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3';
11+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 EXECUTE 2';
12+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 HIT_LIMIT 3';
13+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2';
14+
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2 HIT_LIMIT 3';
15+
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE 2';
16+
SET DEBUG_SYNC='p0 SIGNAL s1 HIT_LIMIT 3';
17+
SET DEBUG_SYNC='p0 SIGNAL s1';
18+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
19+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
20+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3';
21+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6';
22+
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2 HIT_LIMIT 3';
23+
SET DEBUG_SYNC='p0 WAIT_FOR s2 EXECUTE 2';
24+
SET DEBUG_SYNC='p0 WAIT_FOR s2 HIT_LIMIT 3';
25+
SET DEBUG_SYNC='p0 WAIT_FOR s2';
26+
SET DEBUG_SYNC='p0 HIT_LIMIT 3';
27+
SET DEBUG_SYNC='p0 CLEAR';
28+
SET DEBUG_SYNC='p0 TEST';
29+
SET DEBUG_SYNC='RESET';
30+
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2 hit_limit 3';
31+
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2';
32+
set debug_sync='p0 signal s1 wait_for s2 timeout 6 hit_limit 3';
33+
set debug_sync='p0 signal s1 wait_for s2 timeout 6';
34+
set debug_sync='p0 signal s1 wait_for s2 execute 2 hit_limit 3';
35+
set debug_sync='p0 signal s1 wait_for s2 execute 2';
36+
set debug_sync='p0 signal s1 wait_for s2 hit_limit 3';
37+
set debug_sync='p0 signal s1 wait_for s2';
38+
set debug_sync='p0 signal s1 execute 2 hit_limit 3';
39+
set debug_sync='p0 signal s1 execute 2';
40+
set debug_sync='p0 signal s1 hit_limit 3';
41+
set debug_sync='p0 signal s1';
42+
set debug_sync='p0 wait_for s2 timeout 6 execute 2 hit_limit 3';
43+
set debug_sync='p0 wait_for s2 timeout 6 execute 2';
44+
set debug_sync='p0 wait_for s2 timeout 6 hit_limit 3';
45+
set debug_sync='p0 wait_for s2 timeout 6';
46+
set debug_sync='p0 wait_for s2 execute 2 hit_limit 3';
47+
set debug_sync='p0 wait_for s2 execute 2';
48+
set debug_sync='p0 wait_for s2 hit_limit 3';
49+
set debug_sync='p0 wait_for s2';
50+
set debug_sync='p0 hit_limit 3';
51+
set debug_sync='p0 clear';
52+
set debug_sync='p0 test';
53+
set debug_sync='reset';
54+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6
55+
EXECUTE 2 HIT_LIMIT 3';
56+
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2';
57+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2';
58+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 ';
59+
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 ';
60+
SET DEBUG_SYNC=' p0 SIGNAL s1 WAIT_FOR s2 ';
61+
SET DEBUG_SYNC='';
62+
ERROR 42000: Missing synchronization point name
63+
SET DEBUG_SYNC=' ';
64+
ERROR 42000: Missing synchronization point name
65+
SET DEBUG_SYNC='p0';
66+
ERROR 42000: Missing action after synchronization point name 'p0'
67+
SET DEBUG_SYNC='p0 EXECUTE 2';
68+
ERROR 42000: Missing action before EXECUTE
69+
SET DEBUG_SYNC='p0 TIMEOUT 6 EXECUTE 2';
70+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
71+
SET DEBUG_SYNC='p0 TIMEOUT 6';
72+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
73+
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1';
74+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
75+
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 EXECUTE 2';
76+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
77+
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6 EXECUTE 2';
78+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
79+
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6';
80+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
81+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1 EXECUTE 2';
82+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
83+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1';
84+
ERROR 42000: Illegal or out of order stuff: 'SIGNAL'
85+
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2 EXECUTE 2';
86+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
87+
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2';
88+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
89+
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6 EXECUTE 2';
90+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
91+
SET DEBUG_SYNC='p0 SIGNAL s1 TIMEOUT 6';
92+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
93+
SET DEBUG_SYNC='p0 EXECUTE 2 SIGNAL s1 TIMEOUT 6';
94+
ERROR 42000: Missing action before EXECUTE
95+
SET DEBUG_SYNC='p0 TIMEOUT 6 SIGNAL s1';
96+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUT'
97+
SET DEBUG_SYNC='p0 EXECUTE 2 TIMEOUT 6 SIGNAL s1';
98+
ERROR 42000: Missing action before EXECUTE
99+
SET DEBUG_SYNC='p0 CLEAR HIT_LIMIT 3';
100+
ERROR 42000: Nothing must follow action CLEAR
101+
SET DEBUG_SYNC='CLEAR';
102+
ERROR 42000: Missing action after synchronization point name 'CLEAR'
103+
SET DEBUG_SYNC='p0 CLEAR p0';
104+
ERROR 42000: Nothing must follow action CLEAR
105+
SET DEBUG_SYNC='TEST';
106+
ERROR 42000: Missing action after synchronization point name 'TEST'
107+
SET DEBUG_SYNC='p0 TEST p0';
108+
ERROR 42000: Nothing must follow action TEST
109+
SET DEBUG_SYNC='p0 RESET';
110+
ERROR 42000: Illegal or out of order stuff: 'RESET'
111+
SET DEBUG_SYNC='RESET p0';
112+
ERROR 42000: Illegal or out of order stuff: 'p0'
113+
SET DEBUG_SYNC='p0 RESET p0';
114+
ERROR 42000: Illegal or out of order stuff: 'RESET'
115+
SET DEBUG_SYNC='p0 SIGNAL ';
116+
ERROR 42000: Missing signal name after action SIGNAL
117+
SET DEBUG_SYNC='p0 WAIT_FOR ';
118+
ERROR 42000: Missing signal name after action WAIT_FOR
119+
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE ';
120+
ERROR 42000: Missing valid number after EXECUTE
121+
SET DEBUG_SYNCx='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
122+
ERROR HY000: Unknown system variable 'DEBUG_SYNCx'
123+
SET DEBUG_SYNC='p0 SIGNAx s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
124+
ERROR 42000: Illegal or out of order stuff: 'SIGNAx'
125+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOx s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
126+
ERROR 42000: Illegal or out of order stuff: 'WAIT_FOx'
127+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUx 0 EXECUTE 2 HIT_LIMIT 3';
128+
ERROR 42000: Illegal or out of order stuff: 'TIMEOUx'
129+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTx 2 HIT_LIMIT 3';
130+
ERROR 42000: Illegal or out of order stuff: 'EXECUTx'
131+
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIx 3';
132+
ERROR 42000: Illegal or out of order stuff: 'HIT_LIMIx'
133+
SET DEBUG_SYNC='p0 CLEARx';
134+
ERROR 42000: Illegal or out of order stuff: 'CLEARx'
135+
SET DEBUG_SYNC='p0 TESTx';
136+
ERROR 42000: Illegal or out of order stuff: 'TESTx'
137+
SET DEBUG_SYNC='RESETx';
138+
ERROR 42000: Missing action after synchronization point name 'RESETx'
139+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 0x6 EXECUTE 2 HIT_LIMIT 3';
140+
ERROR 42000: Missing valid number after TIMEOUT
141+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 0x2 HIT_LIMIT 3';
142+
ERROR 42000: Missing valid number after EXECUTE
143+
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 7 EXECUTE 2 HIT_LIMIT 0x3';
144+
ERROR 42000: Missing valid number after HIT_LIMIT
145+
SET DEBUG_SYNC= 7;
146+
ERROR 42000: Incorrect argument type to variable 'debug_sync'
147+
SET GLOBAL DEBUG_SYNC= 'p0 CLEAR';
148+
ERROR HY000: Variable 'debug_sync' is a SESSION variable and can't be used with SET GLOBAL
149+
SET @myvar= 'now SIGNAL from_myvar';
150+
SET DEBUG_SYNC= @myvar;
151+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
152+
Variable_name Value
153+
debug_sync ON - current signal: 'from_myvar'
154+
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
155+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
156+
Variable_name Value
157+
debug_sync ON - current signal: 'from_function'
158+
SET DEBUG_SYNC= 'now SIGNAL something';
159+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
160+
Variable_name Value
161+
debug_sync ON - current signal: 'something'
162+
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
163+
Warnings:
164+
Warning #### debug sync point wait timed out
165+
SET DEBUG_SYNC= 'now SIGNAL nothing';
166+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
167+
Variable_name Value
168+
debug_sync ON - current signal: 'nothing'
169+
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
170+
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
171+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
172+
Variable_name Value
173+
debug_sync ON - current signal: 'nothing'
174+
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
175+
SET DEBUG_SYNC= 'now HIT_LIMIT 1';
176+
ERROR HY000: debug sync point hit limit reached
177+
SET DEBUG_SYNC= 'RESET';
178+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
179+
Variable_name Value
180+
debug_sync ON - current signal: ''
181+
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2';
182+
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2';
183+
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
184+
SET DEBUG_SYNC= 'p4a SIGNAL s4 EXECUTE 2';
185+
SET DEBUG_SYNC= 'p5abcde SIGNAL s5 EXECUTE 2';
186+
SET DEBUG_SYNC= 'p6ab SIGNAL s6 EXECUTE 2';
187+
SET DEBUG_SYNC= 'p7 SIGNAL s7 EXECUTE 2';
188+
SET DEBUG_SYNC= 'p8abcdef SIGNAL s8 EXECUTE 2';
189+
SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2';
190+
SET DEBUG_SYNC= 'p4a TEST';
191+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
192+
Variable_name Value
193+
debug_sync ON - current signal: 's4'
194+
SET DEBUG_SYNC= 'p1abcd TEST';
195+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
196+
Variable_name Value
197+
debug_sync ON - current signal: 's1'
198+
SET DEBUG_SYNC= 'p7 TEST';
199+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
200+
Variable_name Value
201+
debug_sync ON - current signal: 's7'
202+
SET DEBUG_SYNC= 'p9abcdef TEST';
203+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
204+
Variable_name Value
205+
debug_sync ON - current signal: 's9'
206+
SET DEBUG_SYNC= 'p3abcdef TEST';
207+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
208+
Variable_name Value
209+
debug_sync ON - current signal: 's3'
210+
SET DEBUG_SYNC= 'p1abcd CLEAR';
211+
SET DEBUG_SYNC= 'p2abc CLEAR';
212+
SET DEBUG_SYNC= 'p5abcde CLEAR';
213+
SET DEBUG_SYNC= 'p6ab CLEAR';
214+
SET DEBUG_SYNC= 'p8abcdef CLEAR';
215+
SET DEBUG_SYNC= 'p9abcdef CLEAR';
216+
SET DEBUG_SYNC= 'p3abcdef CLEAR';
217+
SET DEBUG_SYNC= 'p4a CLEAR';
218+
SET DEBUG_SYNC= 'p7 CLEAR';
219+
SET DEBUG_SYNC= 'p1abcd TEST';
220+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
221+
Variable_name Value
222+
debug_sync ON - current signal: 's3'
223+
SET DEBUG_SYNC= 'p7 TEST';
224+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
225+
Variable_name Value
226+
debug_sync ON - current signal: 's3'
227+
SET DEBUG_SYNC= 'p9abcdef TEST';
228+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
229+
Variable_name Value
230+
debug_sync ON - current signal: 's3'
231+
SET DEBUG_SYNC= 'RESET';
232+
SHOW VARIABLES LIKE 'DEBUG_SYNC';
233+
Variable_name Value
234+
debug_sync ON - current signal: ''
235+
CREATE USER mysqltest_1@localhost;
236+
GRANT SUPER ON *.* TO mysqltest_1@localhost;
237+
connection con1, mysqltest_1
238+
SET DEBUG_SYNC= 'RESET';
239+
connection default
240+
DROP USER mysqltest_1@localhost;
241+
CREATE USER mysqltest_2@localhost;
242+
GRANT ALL ON *.* TO mysqltest_2@localhost;
243+
REVOKE SUPER ON *.* FROM mysqltest_2@localhost;
244+
connection con1, mysqltest_2
245+
SET DEBUG_SYNC= 'RESET';
246+
ERROR 42000: Access denied; you need the SUPER privilege for this operation
247+
connection default
248+
DROP USER mysqltest_2@localhost;
249+
SET DEBUG_SYNC= 'RESET';
250+
DROP TABLE IF EXISTS t1;
251+
CREATE TABLE t1 (c1 INT);
252+
connection con1
253+
SET DEBUG_SYNC= 'before_lock_tables_takes_lock
254+
SIGNAL opened WAIT_FOR flushed';
255+
INSERT INTO t1 VALUES(1);
256+
connection default
257+
SET DEBUG_SYNC= 'now WAIT_FOR opened';
258+
SET DEBUG_SYNC= 'after_flush_unlock SIGNAL flushed';
259+
FLUSH TABLE t1;
260+
connection con1
261+
connection default
262+
DROP TABLE t1;
263+
SET DEBUG_SYNC= 'RESET';
264+
DROP TABLE IF EXISTS t1;
265+
CREATE TABLE t1 (c1 INT);
266+
LOCK TABLE t1 WRITE;
267+
connection con1
268+
SET DEBUG_SYNC= 'wait_for_lock SIGNAL locked EXECUTE 2';
269+
INSERT INTO t1 VALUES (1);
270+
connection default
271+
SET DEBUG_SYNC= 'now WAIT_FOR locked';
272+
UNLOCK TABLES;
273+
connection con1
274+
retrieve INSERT result.
275+
connection default
276+
DROP TABLE t1;
277+
SET DEBUG_SYNC= 'RESET';

mysql-test/r/have_debug_sync.require

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
debug_sync
2+
1

0 commit comments

Comments
 (0)