mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	The test case tried to trigger a DEBUG_SYNC point at the end of a SELECT SLEEP(5) statement. It did this by using EXECUTE 2, intending to trigger first at the end of SET DEBUG_SYNC, and second at the end of the SELECT SLEEP(5). However, in --ps-protocol mode, this does not work, because the SELECT is executed in two steps (Prepare followed by Execute). Thus, the DEBUG_SYNC got triggered too early, during the Prepare stage rather than Execute, and the test case could race and information_schema.processlist see the thread in the wrong state. This patch fixes by changing the way the DEBUG_SYNC point is triggered. Now we add a DBUG injection inside the code for SLEEP(5). This ensures that the DEBUG_SYNC point is not activated until the SLEEP(5) is running, ensuring that the following wait for completion will be effective.
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # MDEV-4578 information_schema.processlist reports incorrect value for Time (2147483647)
 | |
| #
 | |
| 
 | |
| source include/have_debug.inc;
 | |
| source include/have_debug_sync.inc;
 | |
| 
 | |
| let $tid= `SELECT CONNECTION_ID()`;
 | |
| SET DEBUG_SYNC = 'dispatch_command_before_set_time WAIT_FOR do_set_time';
 | |
| send SELECT 1;
 | |
| 
 | |
| connect (con1,localhost,root,,);
 | |
| 
 | |
| SET DEBUG_SYNC = 'fill_schema_processlist_after_unow SIGNAL do_set_time WAIT_FOR fill_schema_proceed';
 | |
| --replace_result $tid TID
 | |
| send_eval SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID, ":") = ":$tid:";
 | |
| 
 | |
| connection default;
 | |
| reap;
 | |
| SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed';
 | |
| 
 | |
| connection con1;
 | |
| --replace_result $tid TID
 | |
| reap;
 | |
| set debug_sync='reset';
 | |
| connection default;
 | |
| 
 | |
| #
 | |
| # MDEV-4683 query start_time not reset when going to sleep
 | |
| #
 | |
| 
 | |
| connection con1;
 | |
| # This DBUG insertion triggers a DEBUG_SYNC signal "query_done" once
 | |
| # the below SELECT SLEEP(5) has gone from "Query" to "Sleep" command
 | |
| # state. (We cannot just set the DEBUG_SYNC directly here, because
 | |
| # then it can trigger at the end of the SET DEBUG_SYNC statement (or
 | |
| # at the end of the Prepare step of the SELECT, if --ps-protocol),
 | |
| # thus occuring too early).
 | |
| SET debug_dbug="+d,sleep_inject_query_done_debug_sync";
 | |
| select sleep(5); #run a query that will take some time
 | |
| connection default;
 | |
| 
 | |
| # Need to ensure that the previous query has really completed. Otherwise,
 | |
| # the select could see the previous query still in "Query" stage in the
 | |
| # processlist.
 | |
| SET DEBUG_SYNC = 'now WAIT_FOR query_done';
 | |
| 
 | |
| # verify that the time in COM_SLEEP doesn't include the query run time
 | |
| select command, time < 5 from information_schema.processlist where id != connection_id();
 | |
| 
 | |
| disconnect con1;
 | |
| set debug_sync='reset';
 |