[Zope3-Users] recovering from a lost db connection
roymathew at bellsouth.net
Thu Jan 11 21:55:28 EST 2007
Brian Sutherland writes:
> On Wed, Jan 10, 2007 at 08:13:27PM -0500, Roy Mathew wrote:
> > What is the recommended way to recover from a db connection that is
> > held by a Psycopgda adapter instance? If for some reason postgres
> > goes down, I get the following error:
> > File "/var/lib/zope3/instances/instance.barry2007/lib/python/sqlos/adapter.py", line 83, in _runWithConnection
> > val = meth(conn, *args)
> > File "/usr/lib/python2.4/site-packages/SQLObject-0.8dev_r1814-py2.4.egg/sqlobject/dbconnection.p ", line 351, in _queryOne
> > self._executeRetry(conn, c, s)
> > File "/var/lib/zope3/instances/instance.barry2007/lib/python/sqlos/adapter.py", line 77, in _executeRetry
> > raise DatabaseException(str(exc.args))
> > DatabaseException: ('no connection to the server\n',).
> > I then have no recourse but to restart the zope server. In the Java
> > world one would put a try/catch around the the SQL operation and
> > attempt a reconnect, but I am wondering if there is a better way
> > (read: automatic recovery) in a z3 world.
> The way ZPsycopgDA does it is exactly that. But it can be a little
> complex when you look at the detail.
> In the Z3 case, I would:
> * If the error is a "concurrent update" error, raise a Retry
> exception. The same request gets tried again.
> * If the error is an OperationalError, close the connection and
> re-raise the error (perhaps as a Retry error, though I can think
> of cases where this is a bad idea). On the next request, the
> connection is re-opened.
Brian, Thanks for your response.
I am confused - that means that if this is being done *currently* in
Psycopgda, I should simply be able to repeat my client request and
succeed in the operation. Or is ZPsycopgda something other than plain
I am essentially stuck once I get this error. The stacktrace above
shows that a retry was attempted but did not succeed. Sorry that I am
missing your point, but I don't get it!
> * On other errors, let the error propagate.
> All this stuff should probably be done at the zope.rdb level.
More information about the Zope3-users