[Zope] Re: packing with zeo error

Dieter Maurer dieter at handshake.de
Fri May 14 14:12:01 EDT 2004


Felix Ulrich-Oltean wrote at 2004-5-13 17:23 +0100:
> ...
>I've tried to use fsrefs.py, as well as
>checkbtrees.py (from the ZODB tools), but both scripts fail.
>
>When trying checkbtrees.py, I get:
> ...
>  File "/web/zope-2.7.0/lib/python/ZODB/DB.py", line 127, in _classFactory
>    return getattr(__import__(location, _globals, _globals, _silly),
>ImportError: No module named CMFPlone.Portal

I expect your "CMFPlone" resides in an "INSTANCE_HOME" products
folder?

Zope uses Python magic to "extend" the "Products" package by
this (or these) new folders.

Plain ZODB code does not know about this magic and therefore
may fail to load products outside the main "Products" package.

For simple cases (just "INSTANCE_HOME", no further sources),
you can (e.g. in a wrapper script) use "from App import FindHomes".
This will activate the magic (based on environment variables).

> ...
>When I try fsrefs.py, I get:
>
>python fsrefs.py Data.fs.bak-20040513 
>Traceback (most recent call last):
>  File "fsrefs.py", line 107, in ?
>    main(path)
>  File "fsrefs.py", line 81, in main
>    refs = get_refs(data)
>  File "fsrefs.py", line 42, in get_refs
>    u.noload()
>EOFError

This looks like a serious corruption (or a bug in "fsrefs").

> ...
>$ ./packstorage.py
>Traceback (most recent call last):
>  File "./packstorage.py", line 9, in ?
>    cs.pack(wait=1, days=2.0)
>  File "/web/zope-2.7.0/lib/python/ZEO/ClientStorage.py", line 815, in pack
>    return self._server.pack(t, wait)
>  File "/web/zope-2.7.0/lib/python/ZEO/ServerStub.py", line 79, in pack
>    self.rpc.call('pack', t, wait)
>  File "/web/zope-2.7.0/lib/python/ZEO/zrpc/connection.py", line 372, in call
>    raise inst # error raised by server
>ValueError: Error unpickling, (( GOBBLEDEEHOOK SPAT OUT HERE ))

Thus, this exception occured in the ZEO server.

Copy your "Data.fs" and pack the copy directly (open it
as a "FileStorage" and call "DB.pack(...)") in an interactive
interpreter. Use "pdb.pm()" ("postmortem") to analyse the state
that laid to this error. You will learn at least the class
and the oid of the broken object.

Probably, you will also see the parent. This is your handle
to delete the broken object.

-- 
Dieter



More information about the Zope mailing list