On Sunday 02 February 2003 3:40 pm, Dieter Maurer wrote:
Zope's current transaction behaviour is essentially:
1 ## request starts 2 transaction.begin() 3 try: 4 object= REQUEST.traverse(...) 5 mapply(object,...) 6 transaction.commit() 7 except: 8 transaction.abort() 9 handle_error() 10 ## request ends
This is flawed as error handling is done outside of a transaction.
Potential changes during the error handling spill over uncontrolled into another request and are there either committed or aborted as part of this request.
A visit to the dentist has given me some time to think about this, and I think there is a flaw in this explanation. Surely any changes that leak out from one request will will be be aborted before they can do any damage, during the call to transaction.begin() on line 2. The doc string from transaction.begin is: '''Begin a new transaction. This aborts any transaction in progres. ''' (I should have a chance to experiment with this tomorrow) -- Toby Dickenson http://www.geminidataloggers.com/people/tdickenson