[Checkins] SVN: gocept.zeoraid/trunk/src/gocept/zeoraid/ Added preliminary tests for __len__, need to force ClientStorage to sync.

Christian Theune ct at gocept.com
Mon Jan 14 11:39:56 EST 2008


Log message for revision 82872:
  Added preliminary tests for __len__, need to force ClientStorage to sync.
  
  Fixed issue with OID generation when storages went offline: we always need to
  ask all storages for a max oid.
  

Changed:
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py

-=-
Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-14 15:19:42 UTC (rev 82871)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-14 16:39:55 UTC (rev 82872)
@@ -198,12 +198,11 @@
 
     # XXX
     def new_oid(self):
-        # XXX This is not exactly a read operation, but we only need an answer from one storage
         if self.isReadOnly():
             raise ZODB.POSException.ReadOnlyError()
         self._lock_acquire()
         try:
-            return self._apply_single_storage('new_oid')
+            return self._apply_all_storages('new_oid')
         finally:
             self._lock_release()
 
@@ -442,6 +441,7 @@
     # XXX
     @ensure_open_storage
     def raid_recover(self, name):
+        # XXX: Need to sync `max oid` after recovery
         if name not in self.storages_degraded:
             return
         self.storages_degraded.remove(name)

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-14 15:19:42 UTC (rev 82871)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-14 16:39:55 UTC (rev 82872)
@@ -233,7 +233,30 @@
         self.assertRaises(gocept.zeoraid.interfaces.RAIDError,
                           self._storage.lastTransaction)
 
+    def test_len_degrading(self):
+        # Brrrr. ClientStorage doesn't seem to implement __len__ correctly.
+        self.assertEquals(0, len(self._storage))
+        self.assertEquals(0, len(self._backend(0)))
+        self.assertEquals(0, len(self._backend(1)))
+        self.assertEquals
+        self._dostore()
+        self._dostore()
+        # See above. This shouldn't be 0 if ClientStorage worked correctly.
+        self.assertEquals(0, len(self._storage))
+        self.assertEquals(0, len(self._backend(0)))
+        self.assertEquals(0, len(self._backend(1)))
 
+        self._storage.raid_disable(self._storage.storages_optimal[0])
+        self._dostore()
+        # See above. This shouldn't be 0 if ClientStorage worked correctly.
+        self.assertEquals(0, len(self._storage))
+        self.assertEquals(0, len(self._backend(0)))
+
+        self._storage.raid_disable(self._storage.storages_optimal[0])
+        self.assertRaises(gocept.zeoraid.interfaces.RAIDError,
+                          self._storage.__len__)
+
+
 class ZEOReplicationStorageTests(ZEOStorageBackendTests,
                                  ReplicationStorageTests,
                                  ThreadTests.ThreadTests):



More information about the Checkins mailing list