[Zope] ZCatalog len problem (resolved)
Jonathan
dev101 at magma.ca
Mon Mar 26 09:34:14 EDT 2007
> ----- Original Message -----
> From: "Andreas Jung" <lists at zopyx.com>
> To: "Jonathan" <dev101 at magma.ca>; <zope at zope.org>
> Sent: Saturday, March 24, 2007 10:43 AM
> Subject: Re: [Zope] ZCatalog len problem
>
> --On 24. März 2007 10:16:46 -0400 Jonathan <dev101 at magma.ca> wrote:
>
>>> I have a ZCatalog and in the ZMI 'Catalog' tab it reports:
>>>
>>> Returns:
>>>
>>> len(sRes)= 1820
>>> cnt= 1842
>>>
>>
>> The result remains the same after reindexing the whole catalog?
>
> Yes. I have an application that has 5 different ZCatalogs. The same
> problem occurs in 3 of them. It seems that a ZCatalog with less than ~500
> records is ok, but the len problem increases with the number of records in
> the ZCatalog:
>
> actual len diff
>
> 108 108 0
> 322 322 0
> 613 607 6
> 1842 1820 22
> 3628 3590 38
>
>
>
>>> It looks like the __len__ method in Catalog.py is not returning the
>>> correct value - it returns self._length() which is set by the following
>>> method (also in Catalog.py):
>>>
>>> def migrate__len__(self):
>>> """ migration of old __len__ magic for Zope 2.8 """
>>> if not hasattr(self, '_length'):
>>> n = self.__dict__['__len__']()
>>> del self.__dict__['__len__']
>>> self._length = BTrees.Length.Length(n)
>>>
>>
>> Is this migration code for pre-2.8 catalogs. This change was necessary
>> because the new ExtensionClass implementation did not longer work
>> with the scary implementation of the __len__ functionality of the Catalog
>> class.
>>
>> If the result remains the same after reindexing the catalog there might
>> be
>> an issue with the increment/decrement calls of the _length counter
>> with catalogObject/uncatalogObject...however no idea why...
>
> Clearing the catalog and then running 'Find Objects' returns the same
> incorrect number every time (at least the error is consistent!). I have
> also loaded records into the ZCatalogs via a python script/external method
> and the record counts are exactly the same as with the 'Find Objects'.
I wrote a bunch of unittests and could not recreate the problem, so i
reinstalled zope and rebuilt the application infrastructure (ZCatalogs, etc)
and reloaded all the data from scratch and the problem went away!
Good idea of using the unittests to track down the problem, thanks Andreas.
Jonathan
More information about the Zope
mailing list