[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