| Bug #34990 | Falcon: falcon_bug_34351_A & falcon_bug_34251_C fail periodically | ||
|---|---|---|---|
| Submitted: | 3 Mar 2:41 | Modified: | 22 Aug 19:30 |
| Reporter: | Kevin Lewis | ||
| Status: | Documenting | ||
| Category: | Server: Falcon | Severity: | S2 (Serious) |
| Version: | 6.0.4 | OS: | Any |
| Assigned to: | Kevin Lewis | Target Version: | 6.0.5 |
| Triage: | D2 (Serious) / R3 (Medium) / E3 (Medium) | ||
[3 Mar 2:41]
Kevin Lewis
[5 Mar 20:42]
Kevin Lewis
set to verified since I have consistently hit ASSERT(ret); at table.cpp, line 2917.
[5 Mar 21:17]
Kevin Lewis
I reproduced the assert in Table::insert many times and found that the call to Section::insertStub() was returning the same record Number to two different threads that did an insert of a new record. The second one looses. Section::insertStub() uses Table::syncInsert to protect a couple bitmaps it uses to decide which record slot is available. But it would release this SyncObject during the search of the section page. I made it hold the synObject for the whole function and the assert did not happen anymore. In addition, I also could no longer reproduce the other assert in table.cpp. line 2455 ASSERT(IS_CONSISTENT_READ(transaction->isolationLevel));
[5 Mar 21:27]
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/43486 ChangeSet@1.2588, 2008-03-05 14:25:44-06:00, klewis@klewis-mysql. +12 -0 Bug#34990 - Fixed the condition in which two different threads could get the same record number for an insert.
[13 Mar 0:02]
Bugs System
Pushed into 6.0.4-alpha
[13 Mar 17:01]
Hakan Kuecuekyilmaz
Fix is in 6.0.5-alpha.
