[Zope-Checkins] CVS: ZODB3/ZODB - FileStorage.py:1.105.2.13

Barry Warsaw barry@wooz.org
Mon, 20 Jan 2003 14:18:44 -0500


Update of /cvs-repository/ZODB3/ZODB
In directory cvs.zope.org:/tmp/cvs-serv2484

Modified Files:
      Tag: ZODB3-3_1-branch
	FileStorage.py 
Log Message:
Backported from trunk:

FileIterator.next(): Break out of the while-loop by raising IndexError
earlier in the loop.  Basically, once we've got a tid from the
transaction record, we check it against our stop tid, and we check the
status looking for a 'c' flag.


=== ZODB3/ZODB/FileStorage.py 1.105.2.12 => 1.105.2.13 ===
--- ZODB3/ZODB/FileStorage.py:1.105.2.12	Tue Jan  7 12:43:32 2003
+++ ZODB3/ZODB/FileStorage.py	Mon Jan 20 14:18:42 2003
@@ -2396,9 +2396,16 @@
                 warn("%s time-stamp reduction at %s", self._file.name, pos)
             self._ltid=tid
 
+            if self._stop is not None and tid > self._stop:
+                raise IndexError, index
+
+            if status == 'c':
+                # Assume we've hit the last, in-progress transaction
+                raise IndexError, index
+
             tl=U64(stl)
 
-            if pos+(tl+8) > self._file_size or status=='c':
+            if pos+(tl+8) > self._file_size:
                 # Hm, the data were truncated or the checkpoint flag wasn't
                 # cleared.  They may also be corrupted,
                 # in which case, we don't want to totally lose the data.
@@ -2432,9 +2439,6 @@
                     warn('%s has invalid transaction header at %s',
                          self._file.name, pos)
                     break
-
-            if self._stop is not None and tid > self._stop:
-                raise IndexError, index
 
             tpos=pos
             tend=tpos+tl