SVN: ZODB/trunk/src/ Bugs fixed

Jim Fulton <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <[email protected]>
Log message for revision 116044:
  Bugs fixed
  ----------
  
  - Shutting down a process while committing a transaction could cause
    ZEO client caches to have invalid data.  This, in turn caused stale
    data to remain in the cache until it was updated.
  

Changed:
  U   ZODB/trunk/src/CHANGES.txt
  U   ZODB/trunk/src/ZEO/ClientStorage.py
  U   ZODB/trunk/src/ZEO/cache.py

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-08-30 21:04:22 UTC (rev 116043)
+++ ZODB/trunk/src/CHANGES.txt	2010-08-30 22:04:20 UTC (rev 116044)
@@ -2,6 +2,16 @@
  Change History
 ================
 
+3.10.0b5 (2010-09-??)
+=====================
+
+Bugs fixed
+----------
+
+- Shutting down a process while committing a transaction could cause
+  ZEO client caches to have invalid data.  This, in turn caused stale
+  data to remain in the cache until it was updated.
+
 3.10.0b4 (2010-07-19)
 =====================
 

Modified: ZODB/trunk/src/ZEO/ClientStorage.py
===================================================================
--- ZODB/trunk/src/ZEO/ClientStorage.py	2010-08-30 21:04:22 UTC (rev 116043)
+++ ZODB/trunk/src/ZEO/ClientStorage.py	2010-08-30 22:04:20 UTC (rev 116044)
@@ -1237,6 +1237,7 @@
             if had_blobs:
                 self._check_blob_size(self._blob_data_bytes_loaded)
 
+        self._cache.setLastTid(tid)
         self._tbuf.clear()
 
     def undo(self, trans_id, txn):
@@ -1362,6 +1363,11 @@
                 self.finish_verification(pair)
                 return "quick verification"
         elif ltid and ltid != utils.z64:
+
+            # XXX Hm, to have gotten here, the cache is non-empty, but
+            # it has no last tid. This doesn't seem like good situation.
+            # We shouldn't treat it so lightly.
+
             self._cache.setLastTid(ltid)
 
         zope.event.notify(ZEO.interfaces.StaleCache(self))

Modified: ZODB/trunk/src/ZEO/cache.py
===================================================================
--- ZODB/trunk/src/ZEO/cache.py	2010-08-30 21:04:22 UTC (rev 116043)
+++ ZODB/trunk/src/ZEO/cache.py	2010-08-30 22:04:20 UTC (rev 116044)
@@ -676,7 +676,9 @@
         if ofs is None:
             # 0x10 == invalidate (miss)
             self._trace(0x10, oid, tid)
-            return self.setLastTid(tid)
+            if server_invalidation:
+                self.setLastTid(tid)
+            return
 
         self.f.seek(ofs)
         read = self.f.read
@@ -702,7 +704,8 @@
             # 0x1C = invalidate (hit, saving non-current)
             self._trace(0x1C, oid, tid)
 
-        return self.setLastTid(tid)
+        if server_invalidation:
+            self.setLastTid(tid)
 
     ##
     # Generates (oid, serial) oairs for all objects in the
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.