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;
>> }
>>
>