From: Olav Sandstaa Date: January 16 2009 10:27am Subject: Re: Bug#36631, "Assertion in SerialLogControl::nextRecord" List-Archive: http://lists.mysql.com/falcon/385 Message-Id: <4970611B.1070000@sun.com> MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=ISO-8859-1 Content-Transfer-Encoding: 7BIT 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; > } >