Dieter Maurer <dieter@handshake.de> writes:
Felix Ulrich-Oltean wrote at 2004-5-13 17:23 +0100:
$ ./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 Thanks very much for your pointers. I have copied the Data.fs, and packed it in an interactive python session, with: fs = FileStorage('Data.fs.bak-20040512') db = ZODB.DB(fs) db.pack(days = 14.0) The stack trace I get has unreadable stuff towards the end:
db.pack(days = 14.0) Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/local/zope/lib/python/ZODB/DB.py", line 528, in pack try: self._storage.pack(t,referencesf) File "/usr/local/zope/lib/python/ZODB/FileStorage.py", line 1557, in pack opos = p.pack() File "/usr/local/zope/lib/python/ZODB/fspack.py", line 698, in pack self.gc.findReachable() File "/usr/local/zope/lib/python/ZODB/fspack.py", line 454, in findReachable self.findReachableAtPacktime([z64]) File "/usr/local/zope/lib/python/ZODB/fspack.py", line 529, in findReachableAtPacktime todo.extend(self.findrefs(pos)) File "/usr/local/zope/lib/python/ZODB/fspack.py", line 602, in findrefs return referencesf(self._file.read(dh.plen)) File "/usr/local/zope/lib/python/ZODB/referencesf.py", line 38, in referencesf raise ValueError, 'Error unpickling, %s' % p ValueError: Error unpickling, ((UBT%Gâ¼âââ½%@.IOBT%Gâ¼ââ%@
─IOB┤デ ダ┐デ ダ├─├─N├.((J ý ┴ ýUOý ýýZýý ýý?ýýZýýý ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýýýBýýCýýý ▒ ─J ý ┴ ýUOý!ýýZýý!ýý?ýýZýýý!ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýBýýCýýý ▒ ─J ý ┴ ýUOý$ýýZýý$ýý?ýýZýýý$ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýýýBýýCýýý ▒ ─J ý ┴ ýU*ýýýýý·ý I've then run pdb.pm() as you suggested, but I'm not sure how to proceed from here. I've got the stack trace again, this time with the w(here) command in pdb, and I get different nonsense at the end: (Pdb) w <stdin>(1)?() /usr/local/zope/lib/python/ZODB/DB.py(531)pack() -> raise /usr/local/zope/lib/python/ZODB/FileStorage.py(1587)pack() -> self._lock_release() /usr/local/zope/lib/python/ZODB/fspack.py(698)pack() -> self.gc.findReachable() /usr/local/zope/lib/python/ZODB/fspack.py(454)findReachable() -> self.findReachableAtPacktime([z64]) /usr/local/zope/lib/python/ZODB/fspack.py(529)findReachableAtPacktime() -> todo.extend(self.findrefs(pos)) /usr/local/zope/lib/python/ZODB/fspack.py(602)findrefs() -> return referencesf(self._file.read(dh.plen))
/usr/local/zope/lib/python/ZODB/referencesf.py(38)referencesf() -> raise ValueError, 'Error unpickling, %s' % p
I tried printing the value of p and got: (Pdb) p p '((U\x0eBTrees.IOBTreeq\x01U\x08IOBucketq\x02tq\x03Nt.((J\xb7v\x15\xecUO\xc1 \xaa\x8eZ\x85\xc1 \xaa\x95?\x85\x8eZ\x85\xaf\xc1 \x84\x85\x8a\\\x95"\x93V\x81r\x89\x95@\x8a\xb7\x81#\x81r\xc4\x8cZ\x8a\\\x93V\x89\xa7\x95A\x82\x8f\x84\x85\x82\xc4\x95B\x82\x95C\x8a\x8b\x83a\x95D\x8a\x93\x94\x8a~\x95E\xd3\x8a\x8d+\xcc\x84\x85q\x04J\xb9v\x15\xecUO\xc1!\xaa\x8eZ\x85\xc1!\xaa\x95?\x85\x8eZ\x85\xaf\xc1!\x84\x85\x8a\\\x95"\x93V\x81r\x89\x95@\x8a\xb7\x81#\x81r\xc4\x8cZ\x8a\\\x93V\x89\xa7\x95A\x82\x8f\x84\x85\x82\xc4\x95B\x82\x95C\x8a\x8b\x83a\x95D\x8a\x93\x94\x8a~\x95E\xd3\x8a\x8d+\xcc\x84\x85q\x05J\xbbv\x15\xecUO\xc1$\xaa\x8eZ\x85\xc1$\xaa\x95?\x85\x8eZ\x85\xaf\xc1$\x84\x85\x8a\\\x95"\x93V\x81r\x89\x95@\x8a\xb7\x81#\x81r\xc4\x8cZ\x8a\\\x93V\x89\xa7\x95A\x82\x8f\x84\x85\x82\xc4\x95B\x82\x95C\x8a\x8b\x83a\x95D\x8a\x93\x94\x8a~\x95E\xd3\x8a\x8d+\xcc\x84\x85q\x06J\xbcv\x15\xecU*\x86\x13\x84\xff\x86\x8a~\x83' What is this stuff? How can I get the offending object and parent from this? Thanks, Felix.