Bug #41391 | falcon.falcon_bug_22211 fails due to seeing duplicate entry | ||
---|---|---|---|
Submitted: | 11 Dec 2008 10:57 | Modified: | 15 May 2009 13:39 |
Reporter: | Olav Sandstå | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Falcon storage engine | Severity: | S2 (Serious) |
Version: | 6.0.9-alpha,6.0.10-alpha | OS: | Any |
Assigned to: | Olav Sandstå | CPU Architecture: | Any |
Tags: | F_ISOLATION |
[11 Dec 2008 10:57]
Olav Sandstå
[1 Mar 2009 18:04]
Olav Sandstå
While re-running the test in order to try to reproduce the failure, after about 35000 runs, the test failed with the same symptom but on a different place in the test. Output from test failure: falcon.falcon_bug_22211 [ fail ] Test ended at 2009-02-27 11:11:19 CURRENT_TEST: falcon.falcon_bug_22211 mysqltest: At line 102: query 'reap' failed: 1062: Duplicate entry '100' for key 'PRIMARY' The result from queries just before the failure was: < snip > SELECT * FROM t1; a 100 # Switch to connection 1 (REPEATABLE READ) START TRANSACTION; SELECT * FROM t1; a 0 # send INSERT (100) - This should SUCCEED after 100 is rolled back. INSERT INTO t1 VALUES(100);; # Switch to connection default (REPEATABLE READ) # Rollback the value 100 ROLLBACK TO SAVEPOINT sp1; # Commit the value 10 COMMIT; SELECT * FROM t1; a 10 # Switch to connection 1 (REPEATABLE READ) # reap - INSERT (100)
[14 Mar 2009 11:43]
Kevin Lewis
Possibly related to Bug#42189. We need to look closely at the waitForTransaction cycle to see if there are any holes.
[17 Mar 2009 10:40]
Olav Sandstå
In an attempt to reproduce this bug a different error on the same place in the test occured: CURRENT_TEST: falcon.falcon_bug_22211 mysqltest: At line 67: query 'reap' succeeded - should have failed with sqlstate 23000... The result from queries just before the failure was: < snip > SELECT * FROM t1; a 100 # Switch to connection 1 (REPEATABLE READ) START TRANSACTION; SELECT * FROM t1; a 0 # send INSERT (10) - This should block unitl 10 is committed. INSERT INTO t1 VALUES(10);; # Switch to connection default (REPEATABLE READ) # Rollback the value 100 ROLLBACK TO SAVEPOINT sp1; # Commit the value 10 COMMIT; SELECT * FROM t1; a 10 # Switch to connection 1 (REPEATABLE READ) # reap INSERT (10) - This should get an update conflict. This time it seems like we are actually able to successfully insert "a duplicate value into a primary key".
[28 Mar 2009 10:44]
Philip Stoev
Not reproducible on 6.0-falcon-team after 6900 runs on a Xeon 2.5 Ghz Linux 64bit.
[30 Mar 2009 21:37]
Kevin Lewis
Philip reported that this problem cannot be repeated after the changes to create a TransactionState object and the addition of the CycleManager to protect doomed records until after all temporary stack pointers to them have gone away.
[15 Apr 2009 17:18]
Olav Sandstå
The new transaction state object and the cycle manager are both pushed into mysql-6.0-falcon-team some weeks ago.
[15 Apr 2009 17:20]
Olav Sandstå
Fix merged into mysql-6.0 today.
[15 Apr 2009 17:43]
Hakan Küçükyılmaz
Fix is in 6.0.11
[15 May 2009 13:39]
MC Brown
A note have been added to the 6.0.11 changelog: The Falcon CycleManager has been updated, which addresses a number of issues when examining records in various transaction states and their visisbility/isolation in relation to other threads.