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