Re: [ZODB-Dev] transaction as context manager, exception during commit

Laurence Rowe <[email protected]>
Newsgroups gmane.comp.web.zope.devel,gmane.comp.web.zope.zodb
Message-ID <[email protected]>
On 24 February 2011 10:17, Chris Withers <[email protected]> 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
_______________________________________________
Zope-Dev maillist  -  [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.