Help interpreting traceback? ZODB Couldn't load state
Hi all A couple of objects in our one ZODB are acting up. This is what I see when I try to browse to a page which lists Query instances: Unauthorized: The container has no security assertions. Access to 'id' of (Query instance at 40596140) denied. Some of them are OK, three of them aren't. When I see the above in the browser, I see the following in the log: 2005-03-15T09:56:19 ERROR(200) ZODB Couldn't load state for 0x03ad7e Traceback (most recent call last): File "/home/upfront/Zope-2.7.3-0/lib/python/ZODB/Connection.py", line 600, in setstate self._set_ghost_state(obj, p) File "/home/upfront/Zope-2.7.3-0/lib/python/ZODB/Connection.py", line 639, in _set_ghost_state state = unpickler.load() AttributeError: 'bool' object has no attribute '__dict__' That's repeated 18 times, for 3 different ids. The following test script finds 3 paths, but there's something wrong with the returned objects. For example, they don't have ids! obj.getId() acquires the container's id. for p in context.Catalog(meta_type='Query'): try: obj = p.getObject() x = obj.id except: r.append( p.getObject() ) -- Jean Jordaan http://www.upfrontsystems.co.za
Jean Jordaan wrote at 2005-3-15 11:39 +0200:
... Unauthorized: The container has no security assertions. Access to 'id' of (Query instance at 40596140) denied. ... When I see the above in the browser, I see the following in the log:
2005-03-15T09:56:19 ERROR(200) ZODB Couldn't load state for 0x03ad7e Traceback (most recent call last): File "/home/upfront/Zope-2.7.3-0/lib/python/ZODB/Connection.py", line 600, in setstate self._set_ghost_state(obj, p) File "/home/upfront/Zope-2.7.3-0/lib/python/ZODB/Connection.py", line 639, in _set_ghost_state state = unpickler.load() AttributeError: 'bool' object has no attribute '__dict__'
Nevertheless, the "Unauthorized" and the traceback do not go together but describe different problems -- unless you use "try ... except" and hide primary exceptions... It is very strange that the unpickling is looking for a "__dict__". It almost looks like a too older Python version (though this is not very likely). Python 2.3 comes with pickletools. You can use them to "disassemble" pickles for easier inspection. This may provide some hints for the problem.
... The following test script finds 3 paths, but there's something wrong with the returned objects. For example, they don't have ids! obj.getId() acquires the container's id.
for p in context.Catalog(meta_type='Query'): try: obj = p.getObject() x = obj.id except: r.append( p.getObject() )
Analyse such an object in detail (in an interactive interpreter). -- Dieter
participants (2)
-
Dieter Maurer -
Jean Jordaan