[Checkins] SVN: zodbupdate/branches/sylvain-persistent-load/src/zodbupdate/update.py Rewrite a record_iternext which ignore record which triggers a POSKeyError.
Sylvain Viollon
sylvain at infrae.com
Tue Jan 5 08:46:17 EST 2010
Log message for revision 107700:
Rewrite a record_iternext which ignore record which triggers a POSKeyError.
Changed:
U zodbupdate/branches/sylvain-persistent-load/src/zodbupdate/update.py
-=-
Modified: zodbupdate/branches/sylvain-persistent-load/src/zodbupdate/update.py
===================================================================
--- zodbupdate/branches/sylvain-persistent-load/src/zodbupdate/update.py 2010-01-05 13:46:17 UTC (rev 107699)
+++ zodbupdate/branches/sylvain-persistent-load/src/zodbupdate/update.py 2010-01-05 13:46:17 UTC (rev 107700)
@@ -13,9 +13,11 @@
##############################################################################
from ZODB.DB import DB
-import cStringIO
+from struct import pack, unpack
+import ZODB.POSException
import ZODB.broken
import ZODB.utils
+import cStringIO
import logging
import pickle
import pickletools
@@ -74,10 +76,26 @@
@property
def records(self):
- next = None
+ index = self.storage._index
+ next_oid = None
+
while True:
- oid, tid, data, next = self.storage.record_iternext(next)
- yield oid, tid, cStringIO.StringIO(data)
- if next is None:
+ oid = index.minKey(next_oid)
+ try:
+ data, tid = self.storage.load(oid, "")
+ except ZODB.POSException.POSKeyError, e:
+ logger.error(
+ u'Error: Jumping record %s, '
+ u'referencing missing key in database: %s' %
+ (ZODB.utils.oid_repr(oid), str(e)))
+ else:
+ yield oid, tid, cStringIO.StringIO(data)
+
+ oid_as_long, = unpack(">Q", oid)
+ next_oid = pack(">Q", oid_as_long + 1)
+ try:
+ next_oid = index.minKey(next_oid)
+ except ValueError:
+ # No more records
break
More information about the checkins
mailing list