Bug #46400 | RQG falcon_recovery fails due to fake deadlock | ||
---|---|---|---|
Submitted: | 27 Jul 2009 12:16 | Modified: | 26 May 2010 17:48 |
Reporter: | Olav Sandstå | Email Updates: | |
Status: | Unsupported | Impact on me: | |
Category: | MySQL Server: Falcon storage engine | Severity: | S3 (Non-critical) |
Version: | 6.0.12-alpha | OS: | Any |
Assigned to: | John Embretsen | CPU Architecture: | Any |
Tags: | F_TEST |
[27 Jul 2009 12:16]
Olav Sandstå
[30 Jul 2009 12:14]
John Embretsen
A patch has been committed for this bug, to the mysql-test-extra-6.0 branch on 2009-07-30: ------------------------------------------------------------ revno: 979.1.3 revision-id: jembretsen@nehalem-1-20090730105608-s9fyxcddlu0tnx03 parent: victor.kirkebo@sun.com-20090730104141-8a7kduhbgw9tk92t committer: John Embretsen <jembretsen@nehalem-1> branch nick: mysql-test-extra-6.0 timestamp: Thu 2009-07-30 12:56:08 +0200 message: Fix for Bug#46400 - RQG falcon_recovery fails due to fake deadlock: - Replaces reference to regular tables (_table) in INSERT SELECT statement with simply _digit, to avoid locking of tables leading to hangs or "fake deadlocks" - With this fix "deadlock" is still seen on some host (nehalem-1) with current falcon-team branch, but it is not seen on other hosts. Will see how it develops in PB2. === modified file 'mysql-test/gentest/conf/falcon_recovery.yy' --- mysql-test/gentest/conf/falcon_recovery.yy 2008-10-29 13:36:18 +0000 +++ mysql-test/gentest/conf/falcon_recovery.yy 2009-07-30 10:47:50 +0000 @@ -11,7 +11,7 @@ # stall_serial_log_rotation: - START TRANSACTION ; CREATE TEMPORARY TABLE IF NOT EXISTS stall ( `f1` INTEGER , `connection_id` INTEGER ) ENGINE = Falcon ; INSERT IGNORE INTO stall SELECT `int`, CONNECTION_ID() FROM _table LIMIT _digit ; UPDATE stall SET f1 = f1 + 1 WHERE connection_id = CONNECTION_ID() ; SELECT IF( CONNECTION_ID() = 10 , SLEEP(1800) , 1 ) ; + START TRANSACTION ; CREATE TEMPORARY TABLE IF NOT EXISTS stall ( `f1` INTEGER , `connection_id` INTEGER ) ENGINE = Falcon ; INSERT INTO stall VALUES (_digit, CONNECTION_ID()) ; UPDATE stall SET f1 = f1 + 1 WHERE connection_id = CONNECTION_ID() ; SELECT IF( CONNECTION_ID() = 10 , SLEEP(1800) , 1 ) ; serial_log_event: blob_delete | --------------------------------------------- In more clear text: With this change we avoid referencing tables used by other transactions (that are not designed to stall serial log rotation) by replacing INSERT IGNORE INTO stall SELECT `int`, CONNECTION_ID() FROM _table LIMIT _digit ; with INSERT INTO stall VALUES (_digit, CONNECTION_ID()) ; (i.e. insert a random digit instead of the contents of another table) Thanks to Olav to trying out the patch and giving OK to push. Thanks to Philip for adding workaround for Bug#46433 to the RQG deadlock detector.
[30 Jul 2009 12:22]
John Embretsen
Patch pushed to mysql-test-extra-6.0 repository with revision jembretsen@nehalem-1-20090730105608-s9fyxcddlu0tnx03, 2009-07-30. Visible in Pushbuild 2, mysql-6.0-falcon-team branch, as of push of revision john.embretsen@sun.com-20090730080940-6h0gpy6b31ctiq20 (pushed 2009-07-30 13:56 CEST).
[30 Jul 2009 12:27]
Olav Sandstå
Verified that with this fix the test runs without failing due to a "false deadlocks". I have also verified that recovery is processing a large amount of log records from the serial log (about 250.000 - 400.000 log records) so the new "serial log stall" transactions seems to have its intended effect on the test.