[ZODB-Dev] transaction timeouts raise no exceptions and cause strange errors on clients

Chris Withers chris at simplistix.co.uk
Thu Nov 4 07:49:09 EDT 2010


Hi All,

I have a ZODB 3.9.6 ZEO storage server configured with a transaction 
time of 20 seconds.

On one zeo client I saw the following:

------
2010-11-04T10:40:50 INFO ZEO.ClientStorage unpackedstorage Disconnected 
from storage: "('xx', 6000)"
------
2010-11-04T10:40:50 INFO ZEO.ClientStorage unpackedstorage Testing 
connection <ManagedClientConnection ('xx', 6000)>
------
2010-11-04T10:40:50 INFO ZEO.zrpc.Connection(C) (xx:6000) received 
handshake 'Z309'
------
2010-11-04T10:40:50 ERROR ZODB.Connection Couldn't load state for 0x15ef67
Traceback (most recent call last):
   File "ZODB3-3.9.6-py2.6-linux-i686.egg/ZODB/Connection.py", line 847, 
in setstate
     self._setstate(obj)
   File "ZODB3-3.9.6-py2.6-linux-i686.egg/ZODB/Connection.py", line 897, 
in _setstate
     p, serial = self._storage.load(obj._p_oid, '')
   File "ZODB3-3.9.6-py2.6-linux-i686.egg/ZODB/Connection.py", line 
1282, in load
     return self._storage.load(oid, '')
   File "ZODB3-3.9.6-py2.6-linux-i686.egg/ZEO/ClientStorage.py", line 
813, in load
     data, tid = self._server.loadEx(oid)
   File "ZODB3-3.9.6-py2.6-linux-i686.egg/ZEO/ClientStorage.py", line 
88, in __getattr__
     raise ClientDisconnected()
ClientDisconnected
------
2010-11-04T10:40:51 INFO ZEO.ClientStorage unpackedstorage Server 
authentication protocol None
------
2010-11-04T10:40:51 INFO ZEO.ClientStorage unpackedstorage Connected to 
storage: ('xx', 6000)
------
2010-11-04T10:40:51 INFO ZEO.ClientStorage unpackedstorage No 
verification necessary (last_inval_tid up-to-date)
------
2010-11-04T10:40:51 ERROR Zope.SiteErrorLog 1288867251.890.173783627248 
https://xx
Traceback (innermost last):
...
   Module ZODB.Connection, line 847, in setstate
   Module ZODB.Connection, line 897, in _setstate
   Module ZODB.Connection, line 1282, in load
   Module ZEO.ClientStorage, line 813, in load
   Module ZEO.ClientStorage, line 88, in __getattr__
ClientDisconnected
------
2010-11-04T10:40:54 CRITICAL txn.-1271567456 A storage error occurred 
during the second phase of the two-phase commit.  Resources may be in an 
inconsistent state.
------
2010-11-04T10:40:55 ERROR Zope.SiteErrorLog 1288867255.090.422928174987 
https://xx
Traceback (innermost last):
   Module ZPublisher.Publish, line 135, in publish
   Module Zope2.App.startup, line 291, in commit
   Module transaction._manager, line 89, in commit
   Module transaction._transaction, line 329, in commit
   Module transaction._transaction, line 431, in _commitResources
   Module ZODB.Connection, line 794, in tpc_finish
   Module ZEO.ClientStorage, line 1148, in tpc_finish
ClientDisconnected: Calling tpc_finish() on a disconnected transaction

This was all pretty alarming, especially as I could see no errors logged 
anywhere else.

Eevntually, in the storage server logs, I found:

2010-11-04T10:40:50 INFO ZEO.StorageServer (7008/xx) Transaction timeout 
after 20 seconds
------
2010-11-04T10:40:50 INFO ZEO.StorageServer (7008/xx) disconnected during 
transaction <transaction._transaction.Transaction object at 0x9b4106c>
------
2010-11-04T10:40:50 INFO ZEO.StorageServer (7008) new connection ('xx', 
34996): <ManagedServerConnection ('xx', 34996)>
------
2010-11-04T10:40:50 INFO ZEO.zrpc.Connection(S) (xx) received handshake 
'Z309'
------
2010-11-04T10:40:55 WARNING ZEO.StorageServer (7008/xx) no current 
transaction: tpc_abort()
------

I'm curious:

- Why is the timeout not logged at ERROR or even CRITICAL?

- Is the "inconsistent state" warning genuine here? I restarted the
   client to be on the safe side, but it'd be good to know for sure.

- If that warning is genuine, is there any way the timeout could not
   leave the client in an inconsistent state?

cheers,

Chris

-- 
Simplistix - Content Management, Batch Processing & Python Consulting
            - http://www.simplistix.co.uk


More information about the ZODB-Dev mailing list