[Zope-Checkins] CVS: Zope/lib/python/transaction -
_transaction.py:1.6
Tim Peters
tim.one at comcast.net
Thu Apr 15 21:08:43 EDT 2004
Update of /cvs-repository/Zope/lib/python/transaction
In directory cvs.zope.org:/tmp/cvs-serv10213/lib/python/transaction
Modified Files:
_transaction.py
Log Message:
Finally changed Connection to use the new transaction join API. This
essentially means a connection keep track of which objects from
the connection are modified, instead of transactions keeping track of that.
A good consequence hasn't yet been implemented: if a connection is
closed with modifications still pending, we can detect that efficiently
now, and complain.
=== Zope/lib/python/transaction/_transaction.py 1.5 => 1.6 ===
--- Zope/lib/python/transaction/_transaction.py:1.5 Wed Apr 14 16:45:38 2004
+++ Zope/lib/python/transaction/_transaction.py Thu Apr 15 21:08:13 2004
@@ -80,10 +80,10 @@
tpc_begin() on each resource manager before calling commit() on any of
them.
- 1. tpc_begin()
- 2. commit()
- 3. tpc_vote()
- 4. tpc_finish()
+ 1. tpc_begin(txn, subtransaction=False)
+ 2. commit(txn)
+ 3. tpc_vote(txn)
+ 4. tpc_finish(txn)
Subtransaction commit
---------------------
@@ -91,11 +91,11 @@
When a subtransaction commits, the protocol is different.
1. tpc_begin() is passed a second argument, which indicates that a
- subtransaction is begin committed.
+ subtransaction is being committed.
2. tpc_vote() is not called.
Once a subtransaction has been committed, the top-level transaction
-commit will start with a commit_sub() called instead of a tpc_begin()
+commit will start with a commit_sub() call instead of a tpc_begin()
call.
Error handling
@@ -321,7 +321,11 @@
# Called when an exception occurs during tpc_vote or tpc_finish.
for rm in L:
if id(rm) not in self._voted:
- rm.cleanup(self)
+ try:
+ rm.abort(self)
+ except Exception:
+ self.log.error("Error in abort() on manager %s",
+ rm, exc_info=sys.exc_info())
for rm in L:
if id(rm) in self._sub:
try:
@@ -465,15 +469,9 @@
def tpc_vote(self, txn):
self.manager.tpc_vote(txn)
- def cleanup(self, txn):
- self._abort(self.objects[self.ncommitted:], txn)
-
def abort(self, txn):
- self._abort(self.objects, txn)
-
- def _abort(self, objects, txn):
tb = None
- for o in objects:
+ for o in self.objects:
try:
self.manager.abort(o, txn)
except:
More information about the Zope-Checkins
mailing list