mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix sporadic test failure in main.processlist
The test runs a query in one thread, then in another queries the processlist and expects to find the first thread in the COM_SLEEP state. The problem is that the thread signals completion to the client before changing to COM_SLEEP state, so there is a window where the other thread can see the wrong state. A previous attempt to fix this was ineffective. It set a DEBUG_SYNC to handle proper waiting, but unfortunately that DEBUG_SYNC point ended up triggering already at the end of SET DEBUG_SYNC=xxx, so the wait was ineffective. Fix it properly now (hopefully) by ensuring that we wait for the DEBUG_SYNC point to trigger at the end of the SELECT SLEEP(), not just at the end of SET DEBUG_SYNC=xxx.
This commit is contained in:
@ -7,7 +7,9 @@ SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID
|
||||
SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed';
|
||||
ID TIME TIME_MS
|
||||
TID 0 0.000
|
||||
SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done';
|
||||
SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2';
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR query_done';
|
||||
SET DEBUG_SYNC= 'now SIGNAL nosignal';
|
||||
select sleep(5);
|
||||
sleep(5)
|
||||
0
|
||||
|
@ -28,7 +28,15 @@ connection default;
|
||||
#
|
||||
|
||||
connection con1;
|
||||
SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done';
|
||||
# Trigger a signal once the thread has gone from "Query" to "Sleep" command
|
||||
# state. Note we need to execute this twice: Once at the end of SET DEBUG_SYNC,
|
||||
# and once for the intended time, at the end of SELECT SLEEP().
|
||||
SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2';
|
||||
connection default;
|
||||
# Wait for and clear the first signal set during SET DEBUG_SYNC.
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR query_done';
|
||||
SET DEBUG_SYNC= 'now SIGNAL nosignal';
|
||||
connection con1;
|
||||
select sleep(5); #run a query that will take some time
|
||||
connection default;
|
||||
|
||||
|
Reference in New Issue
Block a user