[Zope] Re: Error unpickling when packing Data.fs (WAS packing with
zeo error)
Felix Ulrich-Oltean
felix at chaptereight.com
Wed May 26 05:29:24 EDT 2004
Dieter Maurer <dieter at 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â¼ââ%@
-------------- next part --------------
─IOB┤デ
-------------- next part --------------
-------------- next part --------------
ダ┐デ
-------------- next part --------------
-------------- next part --------------
ダ├─├─N├.((J
-------------- next part --------------
ý
-------------- next part --------------
┴
-------------- next part --------------
ýUOý ýýZýý ýý?ýýZýýý ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýýýBýýCýýý
-------------- next part --------------
▒
-------------- next part --------------
-------------- next part --------------
─J
-------------- next part --------------
ý
-------------- next part --------------
┴
-------------- next part --------------
ýUOý!ýýZýý!ýý?ýýZýýý!ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýBýýCýýý
-------------- next part --------------
▒
-------------- next part --------------
-------------- next part --------------
─J
-------------- next part --------------
ý
-------------- next part --------------
┴
-------------- next part --------------
ýUOý$ýýZýý$ýý?ýýZýýý$ýýý\ý"ýVý%Gâ¼%@ýý@ýýý#ý%Gâ¼%@Zý\ýVýýýAýýýýýBýýCýýý
-------------- next part --------------
▒
-------------- next part --------------
-------------- next part --------------
─J
-------------- next part --------------
ý
-------------- next part --------------
┴
-------------- next part --------------
ý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.
More information about the Zope
mailing list