Bug #50846 BACKPORT: Locking tests failing in pushbuild tree
Submitted: 2 Feb 2010 18:44 Modified: 10 Feb 2010 20:23
Reporter: Chuck Bell Email Updates:
Status: Patch queued Impact on me:
None 
Category:MySQL Server: Backup Severity:S3 (Non-critical)
Version:5.4.4 OS:Any
Assigned to: Assigned Account CPU Architecture:Any

[2 Feb 2010 18:44] Chuck Bell
Description:
There are two tests failing in the pushbuild tree. These tests did not fail before we merged in the new MDL locking code. Both are timeouts on the debug sync points. 

The tests are backup_myisam_sync and backup_restore_locking. Fails consistently on Ubuntu, Mac, Windows local builds but not in all PB machines.

Sample failure results:

backup.backup_myisam_sync                [ fail ]
        Test ended at 2010-02-02 02:37:54

CURRENT_TEST: backup.backup_myisam_sync
'diff' is not recognized as an internal or external command,
operable program or batch file.
--- H:/pb2/test/sb_2-1278083-1265068782.34/mysql-5.6.0-beta-win-x86-test/mysql-test/suite/backup/r/backup_myisam_sync.result	2010-02-02 02:15:45.000000000 +0300
+++ H:\pb2\test\sb_2-1278083-1265068782.34\mysql-5.6.0-beta-win-x86-test\mysql-test\suite\backup\r\backup_myisam_sync.reject	2010-02-02 04:37:54.431206600 +0300
@@ -120,6 +120,7 @@
 backup_id
 ###
 Warnings:
+###	1639	debug sync point wait timed out
 ###	1036	Table 't1' is read only
 ###	1213	Deadlock found when trying to get lock; try restarting transaction
 #

mysqltest: Result length mismatch

backup.backup_restore_locking            [ fail ]  timeout after 900 seconds
        Test ended at 2010-02-02 01:58:51

Test case timeout after 900 seconds

== H:/pb2/test/sb_2-1278083-1265068782.34/mysql-5.6.0-beta-win-x86-test/mysql-test/var-n_mix/log/backup_restore_locking.log == 
                 SIGNAL waiting WAIT_FOR continue';
RESTORE FROM 'bup_reslock_db1.bak';
#
# connection con1
SET DEBUG_SYNC= 'now WAIT_FOR waiting';
SET DEBUG_SYNC= 'wait_for_lock SIGNAL lock_wait';
INSERT INTO bup_reslock_db1.t1 VALUES(1,"after_lock_tables");
#
# connection con2
SET DEBUG_SYNC= 'now WAIT_FOR lock_wait';
Warnings:
Warning	1639	debug sync point wait timed out
SET DEBUG_SYNC= 'now SIGNAL continue WAIT_FOR waiting';
SET DEBUG_SYNC= 'wait_for_lock SIGNAL lock_wait';
INSERT INTO bup_reslock_db1.t1 VALUES(2,"after_truncate_tables");
#
# connection con3
SET DEBUG_SYNC= 'now WAIT_FOR lock_wait';
Warnings:
Warning	1639	debug sync point wait timed out

 == H:/pb2/test/sb_2-1278083-1265068782.34/mysql-5.6.0-beta-win-x86-test/mysql-test/var-n_mix/tmp/analyze-timeout-mysqld.1.err ==
SHOW PROCESSLIST;
Id	User	Host	db	Command	Time	State	Info
66	root	localhost:55159	test	Query	299	debug sync point: now	SET DEBUG_SYNC= 'now SIGNAL continue WAIT_FOR waiting'
67	root	localhost:55234	NULL	Query	0	NULL	SHOW PROCESSLIST

 == H:/pb2/test/sb_2-1278083-1265068782.34/mysql-5.6.0-beta-win-x86-test/mysql-test/var-n_mix/tmp/analyze-timeout-mysqld.2.err ==
SHOW PROCESSLIST;
Id	User	Host	db	Command	Time	State	Info
24	root	localhost:55235	NULL	Query	0	NULL	SHOW PROCESSLIST

How to repeat:
./mysql-test-run.pl backup_myisam_sync backup_restore_locking

Suggested fix:
Unknown.
[5 Feb 2010 14:54] Chuck Bell
Chuck assumes the bug since Rafal is sick -- get well soon, Rafal!
[5 Feb 2010 15:31] Chuck Bell
These tests share a common sync point which is not being reached: wait_for_lock. I will ask the runtime team to confirm that this sequence is no longer reached and ask for a equivalent wait point.
[5 Feb 2010 15:47] Chuck Bell
It has been confirmed the wait_for_lock() code is no longer called when locking tables for write. Thus, we must remove this sync point from the tests.
[5 Feb 2010 16:36] Chuck Bell
Removing the wait_for_lock sync point works, but results in non-deterministic values for the IS.PROCESSLIST since the lock is not in a separate thread.
[9 Feb 2010 16:20] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/99751

3086 Chuck Bell	2010-02-09
      BUG#50846 : BACKPORT: Locking tests failing in pushbuild tree
      
      The locking tests that use the wait_for_lock sync point in the old
      server locking code fail because the method wait_for_lock() has been
      replaced with the new MDL code.
      
      This patch introduces a new sync point in the new MDL code for
      synchronizing the locking tests. 
     @ mysql-test/suite/backup/r/backup_myisam_sync.result
        Corrected result file.
     @ mysql-test/suite/backup/r/backup_restore_locking.result
        Corrected result file.
     @ mysql-test/suite/backup/t/backup_myisam_sync.test
        Changed test to use new sync point in mdl code.
     @ mysql-test/suite/backup/t/backup_restore_locking.test
        Changed test to use new sync point in mdl code.
        Commented out non-deterministic show processlist call -- this
        was due to change in how locking is done in the server with the
        new MDL locking code.
     @ sql/mdl.cc
        Added sync point for restore locking tests.
[10 Feb 2010 13:22] Thava Alagu
Good to push.
[10 Feb 2010 17:09] Ritheesh Vedire
Patch Approved
[10 Feb 2010 20:18] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/99874

3087 Chuck Bell	2010-02-10
      BUG#50846 : BACKPORT: Locking tests failing in pushbuild tree
        
      The locking tests that use the wait_for_lock sync point in the old
      server locking code fail because the method wait_for_lock() has been
      replaced with the new MDL code.
        
      This patch introduces a new sync point in the new MDL code for
      synchronizing the locking tests. 
     @ mysql-test/suite/backup/r/backup_myisam_sync.result
        Corrected result file.
     @ mysql-test/suite/backup/r/backup_restore_locking.result
        Corrected result file.
     @ mysql-test/suite/backup/t/backup_myisam_sync.test
        Changed test to use new sync point in mdl code.
     @ mysql-test/suite/backup/t/backup_restore_locking.test
        Changed test to use new sync point in mdl code.
        Commented out non-deterministic show processlist call -- this
        was due to change in how locking is done in the server with the
        new MDL locking code.
     @ sql/mdl.cc
        Added sync point for restore locking tests.
[10 Feb 2010 20:23] Chuck Bell
Patch queued to mysql-next-mr-backup and mysql-backup-backport.