[Zodb-checkins] SVN: ZODB/trunk/src/ZEO/ Complain if server invalidations are applied out of order.
Jim Fulton
jim at zope.com
Fri Aug 29 10:12:49 EDT 2008
Log message for revision 90596:
Complain if server invalidations are applied out of order.
Changed:
U ZODB/trunk/src/ZEO/cache.py
U ZODB/trunk/src/ZEO/tests/test_cache.py
-=-
Modified: ZODB/trunk/src/ZEO/cache.py
===================================================================
--- ZODB/trunk/src/ZEO/cache.py 2008-08-29 13:59:29 UTC (rev 90595)
+++ ZODB/trunk/src/ZEO/cache.py 2008-08-29 14:12:49 UTC (rev 90596)
@@ -555,13 +555,28 @@
# data for `oid`, stop believing we have current data, and mark the
# data we had as being valid only up to `tid`. In all other cases, do
# nothing.
- # @param oid object id
- # @param tid the id of the transaction that wrote a new revision of oid,
+ #
+ # Paramters:
+ #
+ # - oid object id
+ # - tid the id of the transaction that wrote a new revision of oid,
# or None to forget all cached info about oid.
+ # - server_invalidation, a flag indicating whether the
+ # invalidation has come from the server. It's possible, due
+ # to threading issues, that when applying a local
+ # invalidation after a store, that later invalidations from
+ # the server may already have arrived.
+
@locked
- def invalidate(self, oid, tid):
- if tid > self.tid and tid is not None:
- self.setLastTid(tid)
+ def invalidate(self, oid, tid, server_invalidation=True):
+ if tid is not None:
+ if tid > self.tid:
+ self.setLastTid(tid)
+ elif tid < self.tid:
+ if server_invalidation:
+ raise ValueError("invalidation tid (%s) must not be less"
+ " than previous one (%s)" %
+ (u64(tid), u64(self.tid)))
ofs = self.current.get(oid)
if ofs is None:
Modified: ZODB/trunk/src/ZEO/tests/test_cache.py
===================================================================
--- ZODB/trunk/src/ZEO/tests/test_cache.py 2008-08-29 13:59:29 UTC (rev 90595)
+++ ZODB/trunk/src/ZEO/tests/test_cache.py 2008-08-29 14:12:49 UTC (rev 90596)
@@ -76,8 +76,6 @@
self.assertEqual(self.cache.getLastTid(), None)
self.cache.setLastTid(n2)
self.assertEqual(self.cache.getLastTid(), n2)
- self.cache.invalidate(n1, n1)
- self.cache.invalidate(n1, n1)
self.assertEqual(self.cache.getLastTid(), n2)
self.cache.invalidate(n1, n3)
self.assertEqual(self.cache.getLastTid(), n3)
@@ -92,10 +90,11 @@
def testInvalidate(self):
data1 = "data for n1"
self.cache.store(n1, n3, None, data1)
- self.cache.invalidate(n1, n4)
self.cache.invalidate(n2, n2)
+ self.cache.invalidate(n1, n4)
self.assertEqual(self.cache.load(n1), None)
- self.assertEqual(self.cache.loadBefore(n1, n4), (data1, n3, n4))
+ self.assertEqual(self.cache.loadBefore(n1, n4),
+ (data1, n3, n4))
def testNonCurrent(self):
data1 = "data for n1"
More information about the Zodb-checkins
mailing list