On Jan 30, 2014, at 10:14, Jim Fulton <j...@zope.com> wrote:

> On Thu, Jan 30, 2014 at 9:58 AM,  <jason.mad...@nextthought.com> wrote:

>> I was curious if anyone else had seen this
> I haven't. I'm the author of zodbdgc and I use it regularly, including on
> large (for some definition) databases.

Hi Jim,

I really appreciate your input on this. Thanks for taking the time to respond.

>> Details:
>> I'm working under Python 2.7.6 and 2.7.3 with ZODB 4.0.0, zc.zodbdgc 0.6.1 
>> and eventually zodbpickle 0.5.2. Most of my results were repeated on both 
>> Mac OS X and Linux.
> Why are you using zodbpickle?  Perhaps that is behaving differently
> from cPickle in some fashion?

I didn't start out with zodbpickle, I just tried it as an alternative to 
cPickle after cPickle was failing. The hope was that they would actually behave 
differently in some fashion, but the observed behaviour is identical.

> I'd try using ZODB 3.10.  I suspect a ZODB 4 incompatibility of some sort.
> Unfortunately, I don't have time to dig into this now.
> This weekend, I'll at least see if I can make zodbdgc tests pass with ZODB 4.
> Perhaps that will shed light.

That's a very good point. I'm not sure what it will take to repeat the test 
with ZODB 3.10, but I can try (although, since the pickles are already written 
at this point, I probably wouldn't expect to see a difference? Nothing mutates 
the actual pickle data loaded from a storage, excluding transformers like 

Along those lines, I tried just downloading zc.zodbdgc and running its tests 
against ZODB 3.10 (under both Python 2.7.6/OS X and 2.7.3/Linux), and 
unfortunately, they immediately fail with the exact same IndexError I see when 
trying to GC our database:

    $ mkvirtualenv ZODB3
    $ workon ZODB3
    $ pip install ZODB3==3.10.5
    $ wget 
    $ tar -xf zc.zodbdgc-0.6.1.tar.gz && cd zc.zodbdgc-0.6.1
    $ python ./setup.py test
    FAIL: zc.zodbdgc-0.6.1/src/zc/zodbdgc/README.test
    Doctest: README.test
    Traceback (most recent call last):
 line 2201, in runTest
        raise self.failureException(self.format_failure(new.getvalue()))
    AssertionError: Failed doctest test for README.test
      File "tmp/zc.zodbdgc-0.6.1/src/zc/zodbdgc/README.test", line 0

    File "zc.zodbdgc-0.6.1/src/zc/zodbdgc/README.test", line 194, in README.test
    Failed example:
        bad = zc.zodbdgc.gc('config', days=2)
    Exception raised:
    Traceback (most recent call last):
 line 1289, in __run
        compileflags, 1) in test.globs
      File "<doctest README.test[86]>", line 1, in <module>
        bad = zc.zodbdgc.gc('config', days=2)
      File "zc.zodbdgc-0.6.1/src/zc/zodbdgc/__init__.py", line 105, in gc
        return gc_(close, conf, days, ignore, conf2, fs, untransform, ptid)
      File "zc.zodbdgc-0.6.1/src/zc/zodbdgc/__init__.py", line 209, in gc_
        for ref in getrefs(data, name, ignore):
      File "zc.zodbdgc-0.6.1/src/zc/zodbdgc/__init__.py", line 287, in getrefs
        ref = ref[1]
    IndexError: list index out of range

The tests failed the same way under ZODB 4.0.0 and ZODB3 3.9.0 (the minimum 
requirement listed in setup.py).

However, when I tried Python 2.6.8, the tests pass with ZODB 3.10.5 (they don't 
pass with ZODB 4, but it looks to be unrelated). So it seems that the behaviour 
of `noload` might have changed between 2.6.x and 2.7.x? Is it possible you're 
running on Python < 2.7?



For more information about ZODB, see http://zodb.org/

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

Reply via email to