On 01/28/2011 05:34 AM, Chris Withers wrote:
> bin/generate --zap --folder_depth 3
> Leave it running for a minute or two, and then in another do:
> bin/zodbpack pack.conf

Thanks to this test, I found a serious flaw in the history-free variant 
of packing.  Currently, the history-free and history-preserving variants 
share the fill_object_refs() method, which assumes that it's possible to 
enumerate the references from all objects in a specific transaction. 
However, that assumption is only correct in the history-preserving 
variant.  In history-free storages, object states disappear every time 
they are replaced by a newer version, causing fill_object_refs() to 
think the replaced objects have no references.  That mistake leads to 
garbage collection of too many objects.

I'm surprised that existing tests did not reveal this.  Until I release 
a fix, I recommend not packing history-free databases.

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to