[Checkins] SVN: zc.zodbdgc/branches/jim-dev/src/zc/zodbdgc/__init__.py Tweaked to try to avoid writing new records to the "bad" file when

Jim Fulton jim at zope.com
Tue Aug 18 18:06:04 EDT 2009


Log message for revision 102921:
  Tweaked to try to avoid writing new records to the "bad" file when
  reference info hasn't changed.
  

Changed:
  U   zc.zodbdgc/branches/jim-dev/src/zc/zodbdgc/__init__.py

-=-
Modified: zc.zodbdgc/branches/jim-dev/src/zc/zodbdgc/__init__.py
===================================================================
--- zc.zodbdgc/branches/jim-dev/src/zc/zodbdgc/__init__.py	2009-08-18 21:05:02 UTC (rev 102920)
+++ zc.zodbdgc/branches/jim-dev/src/zc/zodbdgc/__init__.py	2009-08-18 22:06:04 UTC (rev 102921)
@@ -356,21 +356,29 @@
             f = self._file
             for oid, pos in self._dbs[name].iteritems():
                 f.seek(pos)
-                yield oid, marshal.load(f)[0]
+                yield oid, f.read(8)
 
     def insert(self, name, oid, tid, refs):
+        assert len(tid) == 8
         f = self._file
         db = self._dbs[name]
         pos = db.get(oid)
         if pos is not None:
             f.seek(pos)
-            oldtid, oldrefs = marshal.load(f)
-            refs = set(oldrefs).union(refs)
+            tid = f.read(8)
+            oldrefs = set(marshal.load(f))
+            refs = oldrefs.union(refs)
             tid = max(tid, oldtid)
+            if refs == oldrefs:
+                if tid != oldtid:
+                    f.seek(pos)
+                    f.write(tid)
+                return
 
         db[oid] = pos = self._pos
         f.seek(pos)
-        marshal.dump((tid, list(refs)), f)
+        f.write(tid)
+        marshal.dump(list(refs), f)
         self._pos = f.tell()
 
     def pop(self, name, oid):
@@ -380,8 +388,8 @@
             return ()
         del db[oid]
         f = self._file
-        f.seek(pos)
-        return marshal.load(f)[1]
+        f.seek(pos+8)
+        return marshal.load(f)
 
 
 def check(config, refdb=None):



More information about the Checkins mailing list