Commit 1d61dc56 authored by Jim Fulton's avatar Jim Fulton

Complain if server invalidations are applied out of order.

parent d649173c
......@@ -607,15 +607,30 @@ class ClientCache(object):
# 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 version name of version to invalidate.
# @param tid the id of the transaction that wrote a new revision of oid,
#
# Paramters:
#
# - oid object id
# - version name of version to invalidate.
# - tid the id of the transaction that wrote a new revision of oid,
# or None to forget all cached info about oid (version, current
# revision, and non-current revisions)
# - 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, version, tid):
if tid > self.tid and tid is not None:
def invalidate(self, oid, version, 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:
......
......@@ -44,7 +44,6 @@ class CacheTests(unittest.TestCase):
self.assertEqual(self.cache.getLastTid(), None)
self.cache.setLastTid(n2)
self.assertEqual(self.cache.getLastTid(), n2)
self.cache.invalidate(n1, "", n1)
self.assertEqual(self.cache.getLastTid(), n2)
self.cache.invalidate(n1, "", n3)
self.assertEqual(self.cache.getLastTid(), n3)
......@@ -64,8 +63,8 @@ class CacheTests(unittest.TestCase):
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))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment