[ZODB-Dev] Automating retry management
Nitro
nitro at dr-code.org
Tue May 11 11:08:56 EDT 2010
Am 11.05.2010, 16:01 Uhr, schrieb Jim Fulton <jim at zope.com>:
> This wouldn't work. You would need to re-execute the suite
> for each retry. It's not enough to just keep committing the same
> transaction. (There are other details wrong with the code above,
> but they are fixable.) Python doesn't provide a way to keep
> executing the suite.
You are right.
The only thing I could come up with was something like below, using a
decorator instead of a context.
-Matthias
@doTransaction(count = 5)
def storeData():
... store data here ...
def doTransaction(transaction = None, count = 3):
def decorator(func):
def do():
for i in range(1+count):
try:
func()
except:
transaction.abort()
raise
try:
transaction.commit()
except ConflictError:
if i == count:
raise
else:
return
return do
return decorator
More information about the ZODB-Dev
mailing list