[ZODB-Dev] Weird ConflictErrors with Zope 2.8.4 - It's been a while
; -)
Chris Withers
chris at simplistix.co.uk
Tue Jan 24 08:41:21 EST 2006
Okay, now that we have 2.8.4 in place, we get proper reporting of
ConflictErrors and today we started seeing one happening over and over
again which looked roughly as follows:
Traceback (most recent call last):
File "lib/python/Products/Transience/Transience.py", line 844, in
new_or_existing
item = self.get(key, _marker)
File "lib/python/Products/Transience/Transience.py", line 491, in get
item = self._move_item(k, current_ts, default)
File "lib/python/Products/Transience/Transience.py", line 346, in
_move_item
if getattr(self._data[current_ts][k], 'setLastAccessed', None):
File "lib/python/ZODB/Connection.py", line 704, in setstate
self._setstate(obj)
File "lib/python/ZODB/Connection.py", line 760, in _setstate
self._reader.setGhostState(obj, p)
File "lib/python/ZODB/serialize.py", line 495, in setGhostState
state = self.getState(pickle)
File "lib/python/ZODB/serialize.py", line 488, in getState
return unpickler.load()
File "lib/python/ZODB/serialize.py", line 436, in _persistent_load
return self._conn.get(oid)
File "lib/python/ZODB/Connection.py", line 207, in get
p, serial = self._storage.load(oid, self._version)
File "lib/python/ZEO/ClientStorage.py", line 746, in load
return self.loadEx(oid, version)[:2]
File "lib/python/ZEO/ClientStorage.py", line 769, in loadEx
data, tid, ver = self._server.loadEx(oid, version)
File "lib/python/ZEO/ServerStub.py", line 192, in loadEx
return self.rpc.call("loadEx", oid, version)
File "lib/python/ZEO/zrpc/connection.py", line 536, in call
raise inst # error raised by server
ConflictError: database conflict error (oid 0x010f0d)
The things which got me worried is that it was always the same oid that
was conflicting, and that's not usually something we see. We were also
getting it very frequently, and on both reads and writes. That in itself
is enough to get me to mail here. I had a dig on the ZEO server and
found the matching traceback for one of them there:
------
2006-01-24T12:42:57 INFO ZEO.zrpc.Connection(S) (x.x.x.x:y)
loadEx() raised exception: database conflict error (oid 0x010f0d)
Traceback (most recent call last):
File "lib/python/ZEO/zrpc/connection.py",line 421, in handle_request
ret = meth(*args)
File "lib/python/ZEO/StorageServer.py",line 248, in loadEx
return self.storage.loadEx(oid, version)
File"lib/python/tempstorage/TemporaryStorage.py", line 132, in loadEx
data = self.load(oid, version)
File"lib/python/tempstorage/TemporaryStorage.py", line 117, in load
raise POSException.ConflictError(oid=oid)
ConflictError: database conflict error (oid 0x010f0d)
Now, I wanted to find out what the troublesome object behind 0x010f0d
was, so I fired up and debug zope client, and was distrubed by the result:
>>> app.temp_folder._p_jar[p64(0x010f0d)]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "lib/python/ZODB/Connection.py", line 207, in get
p, serial = self._storage.load(oid, self._version)
File "lib/python/ZEO/ClientStorage.py", line 746, in load
return self.loadEx(oid, version)[:2]
File "lib/python/ZEO/ClientStorage.py", line 769, in loadEx
data, tid, ver = self._server.loadEx(oid, version)
File "lib/python/ZEO/ServerStub.py", line 192, in loadEx
return self.rpc.call("loadEx", oid, version)
File "lib/python/ZEO/zrpc/connection.py", line 536, in call
raise inst # error raised by server
ZODB.POSException.ConflictError: database conflict error (oid 0x010f0d)
We managed to stop the problem causing furthe conflict errors by
fiddling with the timeout resolution on the Transient Object Container
at /temp_folder/session_data through the web. I guess this re-created
the data structures used by the temp_folder or session_data objects and
so took the object with the dodgy oid out of the equation.
However, even now, an hour or so later, if I fire up a debug client and
try and look up that oid, I get a ConflictError. Any idea what's going on?
cheers,
Chris
More information about the ZODB-Dev
mailing list