[Checkins] SVN: gocept.zeoraid/trunk/src/gocept/zeoraid/ fixed blob detection of recovery and recovery tests

Thomas Lotze tl at gocept.com
Wed Jan 7 06:50:59 EST 2009


Log message for revision 94569:
  fixed blob detection of recovery and recovery tests

Changed:
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/recovery.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_recovery.py

-=-
Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/recovery.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/recovery.py	2009-01-07 11:48:59 UTC (rev 94568)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/recovery.py	2009-01-07 11:50:58 UTC (rev 94569)
@@ -53,7 +53,15 @@
         self.source = source
         self.target = target
         self.finalize = finalize
-        self.recover_blobs = hasattr(source, 'loadBlob') and recover_blobs
+        if recover_blobs:
+            if hasattr(source, 'loadBlob'):
+                try:
+                    source.loadBlob(ZODB.utils.z64, ZODB.utils.z64)
+                except ZODB.POSException.POSKeyError:
+                    pass
+                except TypeError, e:
+                    recover_blobs = False
+        self.recover_blobs = recover_blobs
 
     def __call__(self):
         """Performs recovery."""

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_recovery.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_recovery.py	2009-01-07 11:48:59 UTC (rev 94568)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_recovery.py	2009-01-07 11:50:58 UTC (rev 94569)
@@ -13,6 +13,7 @@
 ##############################################################################
 """Test harness for online recovery."""
 
+import itertools
 import os
 import unittest
 import tempfile
@@ -36,8 +37,8 @@
         source, target, lambda target: None)
     protocol = list(recovery())
     test.assertEquals([('verified',), ('recovered',)], protocol[-2:])
-    for source_txn, target_txn in zip(source.iterator(),
-                                      target.iterator()):
+    for source_txn, target_txn in itertools.izip(source.iterator(),
+                                                 target.iterator()):
         # We need not compare the transaction metadata because that has
         # already been done by the recovery's verification run.
         source_records = list(source_txn)
@@ -58,6 +59,10 @@
                 test.assertRaises(
                     ZODB.POSException.POSKeyError,
                     target.loadBlob, target_record.oid, target_record.tid)
+            except TypeError:
+                test.assertRaises(
+                    TypeError,
+                    target.loadBlob, target_record.oid, target_record.tid)
             else:
                 target_file_name = target.loadBlob(
                     target_record.oid, target_record.tid)



More information about the Checkins mailing list