SVN: ZODB/trunk/src/ Fixed a serious bug that caused cache failures when run

Jim Fulton <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <20100421205525.77FB59418C__41056.6202285283$1271883338$gmane$org@cvs.zope.org>
Log message for revision 111229:
  Fixed a serious bug that caused cache failures when run
  with Python optimization turned on.
  
  https://bugs.launchpad.net/zodb/+bug/544305
  

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

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-04-21 19:32:30 UTC (rev 111228)
+++ ZODB/trunk/src/CHANGES.txt	2010-04-21 20:55:25 UTC (rev 111229)
@@ -20,6 +20,11 @@
 Bugs Fixed
 ----------
 
+- Fixed a serious bug that caused cache failures when run
+  with Python optimization turned on.
+
+  https://bugs.launchpad.net/zodb/+bug/544305
+
 - Fixed bug in cPickleCache's byte size estimation logic.
   (https://bugs.launchpad.net/zodb/+bug/533015)
 

Modified: ZODB/trunk/src/ZEO/cache.py
===================================================================
--- ZODB/trunk/src/ZEO/cache.py	2010-04-21 19:32:30 UTC (rev 111228)
+++ ZODB/trunk/src/ZEO/cache.py	2010-04-21 20:55:25 UTC (rev 111229)
@@ -473,7 +473,8 @@
             return None
         self.f.seek(ofs)
         read = self.f.read
-        assert read(1) == 'a', (ofs, self.f.tell(), oid)
+        status = read(1)
+        assert status == 'a', (ofs, self.f.tell(), oid)
         size, saved_oid, tid, end_tid, lver, ldata = unpack(
             ">I8s8s8sHI", read(34))
         assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
@@ -481,6 +482,9 @@
 
         data = read(ldata)
         assert len(data) == ldata, (ofs, self.f.tell(), oid, len(data), ldata)
+
+        # WARNING: The following assert changes the file position.
+        # We must not depend on this below or we'll fail in optimized mode.
         assert read(8) == oid, (ofs, self.f.tell(), oid)
 
         self._n_accesses += 1
@@ -509,7 +513,8 @@
 
         self.f.seek(ofs)
         read = self.f.read
-        assert read(1) == 'a', (ofs, self.f.tell(), oid, before_tid)
+        status = read(1)
+        assert status == 'a', (ofs, self.f.tell(), oid, before_tid)
         size, saved_oid, saved_tid, end_tid, lver, ldata = unpack(
             ">I8s8s8sHI", read(34))
         assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
@@ -518,6 +523,9 @@
         assert lver == 0, "Versions aren't supported"
         data = read(ldata)
         assert len(data) == ldata, (ofs, self.f.tell())
+
+        # WARNING: The following assert changes the file position.
+        # We must not depend on this below or we'll fail in optimized mode.
         assert read(8) == oid, (ofs, self.f.tell(), oid)
 
         if end_tid < before_tid:
@@ -545,7 +553,8 @@
             if ofs:
                 seek(ofs)
                 read = self.f.read
-                assert read(1) == 'a', (ofs, self.f.tell(), oid)
+                status = read(1)
+                assert status == 'a', (ofs, self.f.tell(), oid)
                 size, saved_oid, saved_tid, end_tid = unpack(
                     ">I8s8s8s", read(28))
                 assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
@@ -657,7 +666,8 @@
 
         self.f.seek(ofs)
         read = self.f.read
-        assert read(1) == 'a', (ofs, self.f.tell(), oid)
+        status = read(1)
+        assert status == 'a', (ofs, self.f.tell(), oid)
         size, saved_oid, saved_tid, end_tid = unpack(">I8s8s8s", read(28))
         assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
         assert end_tid == z64, (ofs, self.f.tell(), oid)
@@ -687,7 +697,8 @@
             self._lock.acquire()
             try:
                 seek(ofs)
-                assert read(1) == 'a', (ofs, self.f.tell(), oid)
+                status = read(1)
+                assert status == 'a', (ofs, self.f.tell(), oid)
                 size, saved_oid, tid, end_tid = unpack(">I8s8s8s", read(28))
                 assert saved_oid == oid, (ofs, self.f.tell(), oid, saved_oid)
                 assert end_tid == z64, (ofs, self.f.tell(), oid)
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.