Toby Dickenson wrote at 2003-2-3 17:04 +0000:
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. ...
and I think there is a flaw in this explanation. Surely any changes that leak out fro m 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) Then, we must find another explanation for Andrews observation:
He observed heavily inconsistent (Zope) session data when he accessed the session during error handling. The problem went away when he did not do that. @Andrew: Can you check your log files whether the events would be consistent with rollbacks at the start of the next request. Dieter