[Checkins] SVN: gocept.zeoraid/trunk/src/gocept/zeoraid/ Fixed boken windows: Shutting down ZEO servers correctly now and joining

Christian Theune ct at gocept.com
Wed Jan 30 07:58:16 EST 2008


Log message for revision 83313:
  Fixed boken windows: Shutting down ZEO servers correctly now and joining
  RAID storage threads to avoid annoyances in the tests.
  

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-30 12:23:46 UTC (rev 83312)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-30 12:58:16 UTC (rev 83313)
@@ -111,6 +111,7 @@
         self.__name__ = name
         self.read_only = read_only
         self.storages = {}
+        self._threads = set()
 
         if blob_dir is not None:
             self.blob_fshelper = ZODB.blob.FilesystemHelper(blob_dir)
@@ -172,11 +173,19 @@
             # of tests.
             return
         try:
-            self._apply_all_storages('close', expect_connected=False)
+            try:
+                self._apply_all_storages('close', expect_connected=False)
+            except gocept.zeoraid.interfaces.RAIDError:
+                pass
         finally:
             self.closed = True
             del self.storages_optimal[:]
 
+        for thread in self._threads:
+            # We give all the threads a chance to get done within one second.
+            # This is mostly a convenience for the tests to not annoy.
+            thread.join(1)
+
     def getName(self):
         """The name of the storage."""
         return self.__name__
@@ -487,6 +496,8 @@
         self.storages_degraded.remove(name)
         self.storages_recovering.append(name)
         t = threading.Thread(target=self._recover_impl, args=(name,))
+        self._threads.add(t)
+        t.setDaemon(True)
         t.start()
         return 'recovering %r' % (name,)
 
@@ -505,6 +516,8 @@
         self.storages_degraded.append(name)
         storage = self.storages[name]
         t = threading.Thread(target=storage.close)
+        self._threads.add(t)
+        t.setDaemon(True)
         t.start()
         del self.storages[name]
         if not self.storages_optimal and fail:

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-30 12:23:46 UTC (rev 83312)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-30 12:58:16 UTC (rev 83313)
@@ -55,12 +55,14 @@
         gocept.zeoraid.compatibility.setup()
         self._server_storage_files = []
         self._servers = []
+        self._pids = []
         self._storages = []
         for i in xrange(5):
             port = get_port()
             zconf = forker.ZEOConfig(('', port))
             zport, adminaddr, pid, path = forker.start_zeo_server(self.getConfig(),
                                                                   zconf, port)
+            self._pids.append(pid)
             self._servers.append(adminaddr)
             self._storages.append(ZEOOpener(zport, storage='1',
                                             min_disconnect_poll=0.5, wait=1,
@@ -80,7 +82,8 @@
         self._storage.close()
         for server in self._servers:
             forker.shutdown_zeo_server(server)
-        # XXX wait for servers to come down
+        for pid in self._pids:
+            os.waitpid(pid, 0)
         # XXX delete filestorage files
 
 class ReplicationStorageTests(BasicStorage.BasicStorage,
@@ -128,6 +131,7 @@
         self._blob_dirs = []
         self._servers = []
         self._storages = []
+        self._pids = []
         for i in xrange(self.backend_count):
             port = get_port()
             zconf = forker.ZEOConfig(('', port))
@@ -136,6 +140,7 @@
                 <failingstorage 1>
                 </failingstorage>""",
                 zconf, port)
+            self._pids.append(pid)
             blob_dir = tempfile.mkdtemp()
             self._blob_dirs.append(blob_dir)
             self._servers.append(adminaddr)
@@ -148,13 +153,11 @@
                                                            self._storages)
 
     def tearDown(self):
-        try:
-            self._storage.close()
-        except:
-            pass
+        self._storage.close()
         for server in self._servers:
             forker.shutdown_zeo_server(server)
-        # XXX wait for servers to come down
+        for pid in self._pids:
+            os.waitpid(pid, 0)
 
 
 class FailingStorageTests2Backends(FailingStorageTestsBase):



More information about the Checkins mailing list