List:Commits« Previous MessageNext Message »
From:Davi Arnaut Date:May 30 2011 3:17pm
Subject:bzr commit into mysql-5.5 branch (davi:3413) Bug#11766349
View as plain text  
# At a local mysql-5.5 repository of davi

 3413 Davi Arnaut	2011-05-30
      Bug#11766349 - 59443: query_cache_debug.test is occasionally very slow
      
      The test case problem stemmed from the fact that a debug sync
      signal is a global variable that persists until overwritten
      by a new signal. This means that if two different signals
      are raised in sequence, a thread waiting for the first signal
      might miss it if the second signal sets the global variable
      before the thread wakes up.
      
      The solution is to deliver a subsequent signal only after the
      waiting thread has received it.
     @ mysql-test/t/query_cache_debug.test
        Wait for signal to be delivered.

    modified:
      mysql-test/r/query_cache_debug.result
      mysql-test/t/query_cache_debug.test
=== modified file 'mysql-test/r/query_cache_debug.result'
--- a/mysql-test/r/query_cache_debug.result	2010-10-08 12:16:20 +0000
+++ b/mysql-test/r/query_cache_debug.result	2011-05-30 15:17:22 +0000
@@ -153,7 +153,9 @@ SET DEBUG_SYNC="now WAIT_FOR parked1_2";
 ** until a broadcast signal reaches them causing both threads to 
 ** come alive and check the condition.
 SET DEBUG_SYNC="now SIGNAL go2";
+** Wait for thd2 to receive the signal
 SET DEBUG_SYNC="now SIGNAL go3";
+** Wait for thd3 to receive the signal
 **
 ** Finally signal the DELETE statement on THD1 one last time.
 ** The stmt will complete the query cache invalidation and return 

=== modified file 'mysql-test/t/query_cache_debug.test'
--- a/mysql-test/t/query_cache_debug.test	2010-10-08 12:16:20 +0000
+++ b/mysql-test/t/query_cache_debug.test	2011-05-30 15:17:22 +0000
@@ -208,7 +208,17 @@ SET DEBUG_SYNC="now WAIT_FOR parked1_2";
 --echo ** until a broadcast signal reaches them causing both threads to 
 --echo ** come alive and check the condition.
 SET DEBUG_SYNC="now SIGNAL go2";
+--echo ** Wait for thd2 to receive the signal
+let $wait_condition=
+  SELECT COUNT(*) = 1 FROM information_schema.processlist
+  WHERE state = "Waiting for query cache lock";
+--source include/wait_condition.inc
 SET DEBUG_SYNC="now SIGNAL go3";
+--echo ** Wait for thd3 to receive the signal
+let $wait_condition=
+  SELECT COUNT(*) = 2 FROM information_schema.processlist
+  WHERE state = "Waiting for query cache lock";
+--source include/wait_condition.inc
 
 --echo **
 --echo ** Finally signal the DELETE statement on THD1 one last time.


Attachment: [text/bzr-bundle] bzr/davi.arnaut@oracle.com-20110530151722-pi46y40nm27nrmv5.bundle
Thread
bzr commit into mysql-5.5 branch (davi:3413) Bug#11766349Davi Arnaut31 May