[Zodb-checkins] CVS: Zope2/lib/python/ZODB - TransactionalUndoStorage.py:1.2
Jim Fulton
jim@digicool.com
Tue, 10 Apr 2001 19:09:22 -0400 (EDT)
Update of /cvs-repository/Zope2/lib/python/ZODB/tests
In directory korak:/tmp/cvs-serv10152
Modified Files:
TransactionalUndoStorage.py
Log Message:
Changed to use undoInfo.
--- Updated File TransactionalUndoStorage.py in package Zope2/lib/python/ZODB --
--- TransactionalUndoStorage.py 2001/04/10 20:45:58 1.1
+++ TransactionalUndoStorage.py 2001/04/10 23:09:21 1.2
@@ -1,17 +1,22 @@
import BasicStorage, pickle
from ZODB import POSException
+ZERO = '\0'*8
-class UndoStorage(BasicStorage.BasicStorage):
+class TransactionalUndoStorage(BasicStorage.BasicStorage):
def checkSimpleTransactionalUndo(self):
oid = self._storage.new_oid()
revid = self._dostore(oid, data=23)
revid = self._dostore(oid, revid=revid, data=24)
revid = self._dostore(oid, revid=revid, data=25)
+
+ info =self._storage.undoInfo()
+ tid = info[0]['id']
# Now start an undo transaction
+ self._transaction.note('undo1')
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 1
@@ -19,8 +24,11 @@
data, revid = self._storage.load(oid, '')
assert pickle.loads(data) == 24
# Do another one
+ info =self._storage.undoInfo()
+ tid = info[2]['id']
+ self._transaction.note('undo2')
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 1
@@ -28,26 +36,24 @@
data, revid = self._storage.load(oid, '')
assert pickle.loads(data) == 23
# Try to undo the first record
+ info =self._storage.undoInfo()
+ tid = info[4]['id']
+ self._transaction.note('undo3')
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
+
assert len(oids) == 1
assert oids[0] == oid
# This should fail since we've undone the object's creation
self.assertRaises(KeyError,
self._storage.load, oid, '')
- # But it's really a more specific type of error
- import Full
- self.assertRaises(Full.ObjectDoesNotExist,
- self._storage.load, oid, '')
# And now let's try to redo the object's creation
- try:
- self._storage.load(oid, '')
- except Full.ObjectDoesNotExist, e:
- revid = e.revid
+ info =self._storage.undoInfo()
+ tid = info[0]['id']
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 1
@@ -83,8 +89,10 @@
data, revid2 = self._storage.load(oid2, '')
assert pickle.loads(data) == 52
# Now attempt to undo the transaction containing two objects
+ info =self._storage.undoInfo()
+ tid = info[0]['id']
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid1, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 2
@@ -94,7 +102,7 @@
data, revid2 = self._storage.load(oid2, '')
assert pickle.loads(data) == 51
- def checkTwoObjectUndoAgain(self):
+ def _checkTwoObjectUndoAgain(self):
p32, p33, p52, p53 = map(pickle.dumps, (32, 33, 52, 53))
# Like the above, but the first revision of the objects are stored in
# different transactions.
@@ -111,8 +119,10 @@
self._storage.tpc_finish(self._transaction)
assert revid1 == revid2
# Now attempt to undo the transaction containing two objects
+ info =self._storage.undoInfo()
+ tid = info[0]['id']
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid1, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 2
@@ -134,8 +144,10 @@
revid1 = self._dostore(oid1, revid=revid1, data=34)
revid2 = self._dostore(oid2, revid=revid2, data=54)
# Now attempt to undo the transaction containing two objects
+ info =self._storage.undoInfo()
+ tid = info[1]['id']
self._storage.tpc_begin(self._transaction)
- oids = self._storage.transactionalUndo(revid1, self._transaction)
+ oids = self._storage.transactionalUndo(tid, self._transaction)
self._storage.tpc_vote(self._transaction)
self._storage.tpc_finish(self._transaction)
assert len(oids) == 1
@@ -152,10 +164,12 @@
revid_b = self._dostore(oid, revid=revid_a, data=52)
revid_c = self._dostore(oid, revid=revid_b, data=53)
# Start the undo
+ info =self._storage.undoInfo()
+ tid = info[1]['id']
self._storage.tpc_begin(self._transaction)
self.assertRaises(POSException.UndoError,
self._storage.transactionalUndo,
- revid_b, self._transaction)
+ tid, self._transaction)
self._storage.tpc_abort(self._transaction)
# Now have more fun: object1 and object2 are in the same transaction,
# which we'll try to undo to, but one of them has since modified in
@@ -165,6 +179,7 @@
oid2 = self._storage.new_oid()
revid2 = ZERO
p81, p82, p91, p92 = map(pickle.dumps, (81, 82, 91, 92))
+
self._storage.tpc_begin(self._transaction)
revid1 = self._storage.store(oid1, revid1, p81, '', self._transaction)
revid2 = self._storage.store(oid2, revid2, p91, '', self._transaction)
@@ -180,11 +195,10 @@
# Now modify oid2
revid2 = self._dostore(oid2, revid=revid2, data=p92)
assert revid1 <> revid2 and revid2 <> revid_22
+ info =self._storage.undoInfo()
+ tid = info[1]['id']
self._storage.tpc_begin(self._transaction)
self.assertRaises(POSException.UndoError,
- self._storage.transactionalUndo,
- revid1, self._transaction)
- self.assertRaises(POSException.UndoError,
self._storage.transactionalUndo,
- revid_22, self._transaction)
+ tid, self._transaction)
self._storage.tpc_abort(self._transaction)