[Zodb-checkins] SVN: ZODB/trunk/src/ZODB/collaborations.txt Added a
collaboration for a new savepoint model.
Jim Fulton
jim at zope.com
Tue Jun 29 14:54:09 EDT 2004
Log message for revision 26002:
Added a collaboration for a new savepoint model.
Updated an old collaboration to reflect the change.
-=-
Modified: ZODB/trunk/src/ZODB/collaborations.txt
===================================================================
--- ZODB/trunk/src/ZODB/collaborations.txt 2004-06-29 18:34:03 UTC (rev 26001)
+++ ZODB/trunk/src/ZODB/collaborations.txt 2004-06-29 18:54:09 UTC (rev 26002)
@@ -28,7 +28,7 @@
# in the changed state.
T.commit()
C.beforeCompletion(T)
- C.tpc_begin(T, False)
+ C.tpc_begin(T)
S.tpc_begin(T)
C.commit(T)
S.store(1, ..., T)
@@ -89,3 +89,84 @@
C._flush_invalidations()
# Processes invalidations that may have come in from other
# transactions.
+
+
+Participants:
+ T: ITransaction
+ o1, o2, o3: some persistent objects
+ C1, C2, C3: resource managers
+ S1, S2: Transaction savepoint objects
+ s11, s21, s22: resource-manager savepoints
+
+Scenario
+ """Rollback of a savepoint"""
+
+ create T
+ o1.modify()
+ C1.regisiter(o1)
+ T.join(C1)
+ T.savepoint()
+ C1.savepoint()
+ return s11
+ return S1 = Savepoint(T, [r11])
+ o1.modify()
+ C1.regisiter(o1)
+ o2.modify()
+ C2.regisiter(o2)
+ T.join(C2)
+ T.savepoint()
+ C1.savepoint()
+ return s21
+ C2.savepoint()
+ return s22
+ return S2 = Savepoint(T, [r21, r22])
+ o3.modify()
+ C3.regisiter(o3)
+ T.join(C3)
+ S1.rollback()
+ S2.rollback()
+ T.discard()
+ C1.discard()
+ C2.discard()
+ C3.discard()
+ o3.invalidate()
+ S2.discard()
+ s21.discard() # roll back changes since previous, which is r11
+ C1.discard(s21)
+ o1.invalidate()
+ # truncates temporary storage to s21's position
+ s22.discard() # roll back changes since previous, which is r11
+ C1.discard(s22)
+ o2.invalidate()
+ # truncates temporary storage to beginning, because
+ # s22 was the first savepoint. (Perhaps conection
+ # savepoints record the log position before the
+ # data were written, which is 0 in this case.
+ T.commit()
+ C1.beforeCompletion(T)
+ C2.beforeCompletion(T)
+ C3.beforeCompletion(T)
+ C1.tpc_begin(T)
+ S1.tpc_begin(T)
+ C2.tpc_begin(T)
+ C3.tpc_begin(T)
+ C1.commit(T)
+ S1.store(1, ..., T)
+ C2.commit(T)
+ C3.commit(T)
+ C1.tpc_vote(T)
+ S1.tpc_vote(T)
+ C2.tpc_vote(T)
+ C3.tpc_vote(T)
+ C1.tpc_finish(T)
+ S1.tpc_finish(T, f) # f is a callback function, which arranges
+ c# to call DB.invalidate (next)
+ DB.invalidate(tid, {1: 1}, C)
+ TM.free(T)
+ C1.afterCompletion(T)
+ C1._flush_invalidations()
+ C2.afterCompletion(T)
+ C2._flush_invalidations()
+ C3.afterCompletion(T)
+ C3._flush_invalidations()
+
More information about the Zodb-checkins
mailing list