On 24 February 2011 10:17, Chris Withers <ch...@simplistix.co.uk> wrote: > Hi Jim, > > The current __exit__ for transaction managers looks like this: > > def __exit__(self, t, v, tb): > if v is None: > self.commit() > else: > self.abort() > > ..which means that if you're using the transaction package as a context > manager and, say, a relational database integrity constraint is > violated, then you're left with a hosed transaction that still needs > aborting. > > How would you feel about the above changing to: > > def __exit__(self, t, v, tb): > if v is None: > try: > self.commit() > except: > self.abort() > raise > else: > self.abort() > > If this is okay, I'll be happy to write the tests and make the changes > provided someone does a release when I have...
Looking at the way ZPublisher handles this, I think you're right. I think you might also need to modify the __exit__ in Attempt, which additionally handles retrying transactions that fail. Laurence _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org https://mail.zope.org/mailman/listinfo/zodb-dev