List:Falcon Storage Engine« Previous MessageNext Message »
From:Christopher Powers Date:January 16 2009 4:15pm
Subject:Re: Bug#36631, "Assertion in SerialLogControl::nextRecord"
View as plain text  
Olav Sandstaa wrote:
> Hi Chris,
> 
> Just in case this is of interest: I filed a bug report for the same 
> assert yesterday since it happens frequently when running the 
> falcon_backlog test (see Bug #42131 "falcon_backlog test crashes in 
> Record::getEncodedValue"). The stack trace is different but the last 
> messages written to the log file before the assert happens is usually 
> related to chill/thaw. One example:

Thanks, Olav. This is probably the same issue.

> 
> 755: Record thaw (fetch): table 24, 2 records, 2240 bytes
> 757: Record thaw (fetch): table 24, 2 records, 1640 bytes
> 760: Record thaw (fetch): table 24, 2 records, 1391 bytes
> 826: Record thaw (fetch): table 24, 2 records, 1911 bytes
> 828: Record thaw (fetch): table 24, 1 records, 1295 bytes
> [Falcon] Error: assertion (vector[index] < size) failed at line 668 in 
> file Record.cpp
> 
> 090115 17:20:58 - mysqld got signal 6 ;
> 
> 
> Olav
> 
> 
> Christopher Powers wrote:
>> Kevin,
>>
>> This is the reopened chill/thaw stress test bug.
>>
>> I can easily reproduce an assert in Record::getEncodedValue() that 
>> always occurs during a scavenge/record pruning (stack attached.)
>>
>> At the time of the assert, the record state is 'recChilled', so that 
>> explains why getEncodedValue() fails. It appears that the record 
>> 'oldie' in Index::duplicateKey() gets chilled while it's being accessed.
>>
>> Note that hasRecord() should have thawed the record. I added a second 
>> thaw to verify this, but the breakpoint never hit, so I think the 
>> record is being chilled during makeKey().
>>
>>
>> bool Index::duplicateKey(IndexKey *key, Record * record)
>> {
>>   for (Record *oldie = record; oldie; oldie = oldie->getPriorVersion())
>>     if (oldie->hasRecord())  <<<< will thaw record
>>       {
>>       IndexKey oldKey(this);
>>                  if (oldie->state == recChilled)
>>         oldie->thaw();     <<<< breakpoint never hit
>>                      makeKey (oldie, &oldKey); <<<< assertion 
>> here--chill< during makeKey??
>>
>>       if (oldKey.isEqual(key))
>>         return true;
>>       }
>>   return false;
>> }
>>
> 
Thread
Bug#36631, "Assertion in SerialLogControl::nextRecord"Christopher Powers16 Jan
  • Re: Bug#36631, "Assertion in SerialLogControl::nextRecord"Christopher Powers16 Jan
  • Re: Bug#36631, "Assertion in SerialLogControl::nextRecord"Olav Sandstaa16 Jan
    • Re: Bug#36631, "Assertion in SerialLogControl::nextRecord"Christopher Powers16 Jan