List:Falcon Storage Engine« Previous MessageNext Message »
From:Kevin Lewis Date:November 17 2008 7:59pm
Subject:Re: Question on Scavenging
View as plain text  
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.

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:
> Jim,
> 
> 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 
> records?
> 
> 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.
> 
> Kevin
> 
Thread
Question on ScavengingKevin Lewis13 Nov
  • Re: Question on ScavengingKevin Lewis17 Nov
    • Re: Question on ScavengingChristopher Powers17 Nov
      • Re: Question on ScavengingKevin Lewis17 Nov
        • Re: Question on ScavengingHakan Kuecuekyilmaz18 Nov