Log message for revision 92792: Add check for doomed transactions in default transaction manager, abort silently if the tm tries to commit a doomed transaction
Changed: U Zope/trunk/lib/python/Zope2/App/startup.py A Zope/trunk/lib/python/Zope2/App/tests/testDoomedTransaction.py -=- Modified: Zope/trunk/lib/python/Zope2/App/startup.py =================================================================== --- Zope/trunk/lib/python/Zope2/App/startup.py 2008-11-05 11:07:33 UTC (rev 92791) +++ Zope/trunk/lib/python/Zope2/App/startup.py 2008-11-05 12:41:21 UTC (rev 92792) @@ -281,7 +281,10 @@ transaction.begin() def commit(self): - transaction.commit() + if hasattr(transaction, 'isDoomed') and transaction.isDoomed(): + transaction.abort() + else: + transaction.commit() def abort(self): transaction.abort() Added: Zope/trunk/lib/python/Zope2/App/tests/testDoomedTransaction.py =================================================================== --- Zope/trunk/lib/python/Zope2/App/tests/testDoomedTransaction.py (rev 0) +++ Zope/trunk/lib/python/Zope2/App/tests/testDoomedTransaction.py 2008-11-05 12:41:21 UTC (rev 92792) @@ -0,0 +1,43 @@ +############################################################################## +# +# Copyright (c) 2007 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## + +import sys +import unittest +import logging +import transaction + +class DoomedTransactionInManagerTest(unittest.TestCase): + + def testDoomedFails(self): + transaction.begin() + trans = transaction.get() + trans.doom() + from transaction.interfaces import DoomedTransaction + self.assertRaises(DoomedTransaction, trans.commit) + + def testDoomedSilentInTM(self): + from Zope2.App.startup import TransactionsManager + tm = TransactionsManager() + transaction.begin() + trans = transaction.get() + trans.doom() + tm.commit() + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(DoomedTransactionInManagerTest)) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins