[Zope-DB] DA's violating transactional assertions

M.-A. Lemburg mal@lemburg.com
Tue, 28 Jan 2003 11:32:55 +0100


Dieter Maurer wrote:
> Federico Di Gregorio wrote at 2003-1-24 10:27 +0100:
>  > Il ven, 2003-01-24 alle 04:12, Robert Kellock ha scritto:
>  > > Which ones?
>  > 
>  > ZpsycopgDA for sure (right Dieter? :) and probably ZOracleDA (from which
>  > ZPsycopgDA was derived), ZPoPyDA and maybe even the mysql adapter (but i
>  > can be wrong here.)
>  > 
>  > i completely agree with Dieter's analisys and i'll try to fix the
>  > problem in the 1.1 series. the problem is: does zope provides such a
>  > "special exception"?
> The "retry" logic is implemented in "Zope/__init__.py:zpublisher_exception_hook".
> As it is, it retries on any subclass of "ZODB.POSException.ConflictError".
> 
> Of course, when it really were necessary, it could be extended.
> But, the current case would not make this necessary.
> The DA could simply derive an appropriate exception
> from "ZODB.POSException.ConflictError" and use that
> for its transient errors.
> 
> We may get cleaner code across DA's when we define a standard
> DATransientError. It should clearly state, which DA instance (path)
> got the problem and what was the original exception (which
> we converted into a "DATransientError").
> 
> On alternative to such an information rich exception would
> be to log the original exception (not a bad idea anyway).

Then let's do both: log the event and raise a ConflictError
subclass.

Does Zope have means to prevent an endless loop here ? E.g.
in case the OperationalError raised by the database was not
really caused by a lost connection.

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
_______________________________________________________________________
eGenix.com -- Makers of the Python mx Extensions: mxDateTime,mxODBC,...
Python Consulting:                               http://www.egenix.com/
Python Software:                    http://www.egenix.com/files/python/