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