Kevin Lewis wrote:
> Just to follow up on this thread, there IS a problem in
> Table::expungeRecordVersions(). But not what I thought below. Jim was
> able to explain to me on Saturday how garbage collection is supposed
> to work. Today, I saw that it was not working correctly and invented
> a testcase that would show the problem.
> I just documented it in Bug#40801.
Kevin, I wonder if such bugs should be tagged "design doc" or something
so we can pull the text for use in the Falcon documentation.
> Note that since the scavenger only starts pruning and garbage
> collecting old record versions when the record cache threshold is
> reached, we would rarely ever see this in testing. But it would be
> seen in the real world...
> Kevin Lewis wrote:
>> I see what appears to be a possible problem in
>> Table::expungeRecordVersions(). It seems like this is supposed to
>> release a long string of old invisible record versions. The oldest
>> visible record is sent into it and the priorRecord chain from there
>> down is scavenged. It does this by detaching the priorRecord from
>> the one sent in, doing garbage collection on that prior, and
>> releasing its useCount. The useCount is always 1 due to the
>> priorRecord pointer. So the release at the end of
>> Table::expungeRecordVersions() causes it to be deleted. Its
>> destructor will release all the priorRecords from there to the end of
>> the chain.
>> But where is the garbage collection done on each of these other prior
>> If I am right that the garbage collection is never done, then index
>> pages and blob records are left in the pages, filling up the tablespace.