[Zodb-checkins] SVN: ZODB/branches/3.9/src/ZEO/cache.py Don't update the cache lastTid until we've invalidated a value (rather
Jim Fulton
jim at zope.com
Mon Sep 20 13:53:49 EDT 2010
Log message for revision 116673:
Don't update the cache lastTid until we've invalidated a value (rather
than before). It's possible that process shutdown after updating
lastTid but before invalidating the current record could explain some
problems we've seen on restarts.
(This change is made irrelevent by later changes.)
Changed:
U ZODB/branches/3.9/src/ZEO/cache.py
-=-
Modified: ZODB/branches/3.9/src/ZEO/cache.py
===================================================================
--- ZODB/branches/3.9/src/ZEO/cache.py 2010-09-20 17:34:09 UTC (rev 116672)
+++ ZODB/branches/3.9/src/ZEO/cache.py 2010-09-20 17:53:49 UTC (rev 116673)
@@ -435,10 +435,14 @@
# recent tid.
@locked
def setLastTid(self, tid):
+ if (not tid) or (tid == z64):
+ return
if (self.tid is not None) and (tid <= self.tid) and self:
+ if tid == self.tid:
+ return # Be a little forgiving
raise ValueError("new last tid (%s) must be greater than "
- "previous one (%s)" % (u64(tid),
- u64(self.tid)))
+ "previous one (%s)"
+ % (u64(tid), u64(self.tid)))
assert isinstance(tid, str) and len(tid) == 8, tid
self.tid = tid
self.f.seek(len(magic))
@@ -647,20 +651,11 @@
@locked
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:
# 0x10 == invalidate (miss)
self._trace(0x10, oid, tid)
- return
+ return self.setLastTid(tid)
self.f.seek(ofs)
read = self.f.read
@@ -683,6 +678,8 @@
# 0x1C = invalidate (hit, saving non-current)
self._trace(0x1C, oid, tid)
+ return self.setLastTid(tid)
+
##
# Generates (oid, serial) oairs for all objects in the
# cache. This generator is used by cache verification.
More information about the Zodb-checkins
mailing list