BIND 10 trac640, updated. f45a95082d8db85dff8d7b0bf0e0817e7175103e [640] rename stop()

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Feb 2 13:45:41 UTC 2012


The branch, trac640 has been updated
       via  f45a95082d8db85dff8d7b0bf0e0817e7175103e (commit)
      from  2c40ed8bbbab2e095be163a6f144eb45be465f80 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit f45a95082d8db85dff8d7b0bf0e0817e7175103e
Author: Jelte Jansen <jelte at isc.org>
Date:   Thu Feb 2 14:45:31 2012 +0100

    [640] rename stop()

-----------------------------------------------------------------------

Summary of changes:
 src/bin/bind10/bind10_src.py.in                   |    2 +-
 src/bin/cmdctl/cmdctl.py.in                       |    2 +-
 src/bin/ddns/ddns.py.in                           |    2 +-
 src/bin/ddns/tests/ddns_test.py                   |    2 +-
 src/bin/stats/stats.py.in                         |    2 +-
 src/bin/stats/stats_httpd.py.in                   |    2 +-
 src/bin/xfrin/tests/xfrin_test.py                 |   13 ++-----
 src/bin/xfrin/xfrin.py.in                         |    2 +-
 src/bin/xfrout/xfrout.py.in                       |    2 +-
 src/bin/zonemgr/tests/zonemgr_test.py             |   10 +++++-
 src/bin/zonemgr/zonemgr.py.in                     |    7 +++-
 src/lib/python/isc/config/ccsession.py            |   35 ++++++++------------
 src/lib/python/isc/config/tests/ccsession_test.py |    2 +-
 src/lib/python/isc/testutils/ccsession_mock.py    |    2 +-
 14 files changed, 42 insertions(+), 43 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/bin/bind10/bind10_src.py.in b/src/bin/bind10/bind10_src.py.in
index 5c7dc93..805275a 100755
--- a/src/bin/bind10/bind10_src.py.in
+++ b/src/bin/bind10/bind10_src.py.in
@@ -684,7 +684,7 @@ class BoB:
         # really necessary, but this is done to reflect that boss is also
         # 'just' a module.
         if self.ccs is not None:
-            self.ccs.stop()
+            self.ccs.send_stopping()
 
         # try using the BIND 10 request to stop
         try:
diff --git a/src/bin/cmdctl/cmdctl.py.in b/src/bin/cmdctl/cmdctl.py.in
index ca3e1ea..0628f1f 100755
--- a/src/bin/cmdctl/cmdctl.py.in
+++ b/src/bin/cmdctl/cmdctl.py.in
@@ -319,7 +319,7 @@ class CommandControl():
         elif command == ccsession.COMMAND_SHUTDOWN:
             #When cmdctl get 'shutdown' command from boss,
             #shutdown the outer httpserver.
-            self._module_cc.stop()
+            self._module_cc.send_stopping()
             self._httpserver.shutdown()
             self._serving = False
 
diff --git a/src/bin/ddns/ddns.py.in b/src/bin/ddns/ddns.py.in
index f13c1bb..22e4e9c 100755
--- a/src/bin/ddns/ddns.py.in
+++ b/src/bin/ddns/ddns.py.in
@@ -153,7 +153,7 @@ class DDNSServer:
         Currently, it only causes the ModuleCCSession to send a message that
         this module is stopping.
         '''
-        self._cc.stop()
+        self._cc.send_stopping()
 
     def accept(self):
         """
diff --git a/src/bin/ddns/tests/ddns_test.py b/src/bin/ddns/tests/ddns_test.py
index e63ef34..395aacc 100755
--- a/src/bin/ddns/tests/ddns_test.py
+++ b/src/bin/ddns/tests/ddns_test.py
@@ -64,7 +64,7 @@ class MyCCSession(isc.config.ConfigData):
         '''Called by DDNSServer initialization, but not used in tests'''
         self._started = True
 
-    def stop(self):
+    def send_stopping(self):
         '''Called by shutdown code'''
         self._stopped = True
 
diff --git a/src/bin/stats/stats.py.in b/src/bin/stats/stats.py.in
index a3612a2..537cf49 100755
--- a/src/bin/stats/stats.py.in
+++ b/src/bin/stats/stats.py.in
@@ -188,7 +188,7 @@ class Stats:
             while self.running:
                 self.mccs.check_command(False)
         finally:
-            self.mccs.stop()
+            self.mccs.send_stopping()
 
     def config_handler(self, new_config):
         """
diff --git a/src/bin/stats/stats_httpd.py.in b/src/bin/stats/stats_httpd.py.in
index 5afb4fb..c9bd0f5 100644
--- a/src/bin/stats/stats_httpd.py.in
+++ b/src/bin/stats/stats_httpd.py.in
@@ -203,7 +203,7 @@ class StatsHttpd:
         """Closes a ModuleCCSession object"""
         if self.mccs is None:
             return
-        self.mccs.stop()
+        self.mccs.send_stopping()
 
         logger.debug(DBG_STATHTTPD_INIT, STATHTTPD_CLOSING_CC_SESSION)
         self.mccs.close()
diff --git a/src/bin/xfrin/tests/xfrin_test.py b/src/bin/xfrin/tests/xfrin_test.py
index 99e0522..89e4d96 100644
--- a/src/bin/xfrin/tests/xfrin_test.py
+++ b/src/bin/xfrin/tests/xfrin_test.py
@@ -20,6 +20,7 @@ import socket
 import sys
 import io
 from isc.testutils.tsigctx_mock import MockTSIGContext
+from isc.testutils.ccsession_mock import MockModuleCCSession
 from isc.testutils.rrset_utils import *
 from xfrin import *
 import xfrin
@@ -105,10 +106,7 @@ class XfrinTestException(Exception):
 class XfrinTestTimeoutException(Exception):
     pass
 
-class MockCC():
-    def __init__(self):
-        self.stop_called = False
-
+class MockCC(MockModuleCCSession):
     def get_default_value(self, identifier):
         # The returned values should be identical to the spec file
         # XXX: these should be retrieved from the spec file
@@ -120,9 +118,6 @@ class MockCC():
         if identifier == "zones/use_ixfr":
             return False
 
-    def stop(self):
-        self.stop_called = True
-
 class MockDataSourceClient():
     '''A simple mock data source client.
 
@@ -2058,9 +2053,9 @@ class TestXfrin(unittest.TestCase):
         self.args['tsig_key'] = ''
 
     def tearDown(self):
-        self.assertFalse(self.xfr._module_cc.stop_called);
+        self.assertFalse(self.xfr._module_cc.stopped);
         self.xfr.shutdown()
-        self.assertTrue(self.xfr._module_cc.stop_called);
+        self.assertTrue(self.xfr._module_cc.stopped);
         sys.stderr= self.stderr_backup
 
     def _do_parse_zone_name_class(self):
diff --git a/src/bin/xfrin/xfrin.py.in b/src/bin/xfrin/xfrin.py.in
index 0cd63c0..b59c2b6 100755
--- a/src/bin/xfrin/xfrin.py.in
+++ b/src/bin/xfrin/xfrin.py.in
@@ -1224,7 +1224,7 @@ class Xfrin:
         ''' shutdown the xfrin process. the thread which is doing xfrin should be
         terminated.
         '''
-        self._module_cc.stop()
+        self._module_cc.send_stopping()
         self._shutdown_event.set()
         main_thread = threading.currentThread()
         for th in threading.enumerate():
diff --git a/src/bin/xfrout/xfrout.py.in b/src/bin/xfrout/xfrout.py.in
index eb124c9..1540e6b 100755
--- a/src/bin/xfrout/xfrout.py.in
+++ b/src/bin/xfrout/xfrout.py.in
@@ -969,7 +969,7 @@ class XfroutServer:
 
         global xfrout_server
         xfrout_server = None #Avoid shutdown is called twice
-        self._cc.stop()
+        self._cc.send_stopping()
         self._shutdown_event.set()
         self._notifier.shutdown()
         if self._unix_socket_server:
diff --git a/src/bin/zonemgr/tests/zonemgr_test.py b/src/bin/zonemgr/tests/zonemgr_test.py
index 600453d..29924c8 100644
--- a/src/bin/zonemgr/tests/zonemgr_test.py
+++ b/src/bin/zonemgr/tests/zonemgr_test.py
@@ -20,6 +20,7 @@ import unittest
 import os
 import tempfile
 from zonemgr import *
+from isc.testutils.ccsession_mock import MockModuleCCSession
 
 ZONE_NAME_CLASS1_IN = ("example.net.", "IN")
 ZONE_NAME_CLASS1_CH = ("example.net.", "CH")
@@ -48,10 +49,11 @@ class MySession():
     def group_recvmsg(self, nonblock, seq):
         return None, None
 
-class FakeCCSession(isc.config.ConfigData):
+class FakeCCSession(isc.config.ConfigData, MockModuleCCSession):
     def __init__(self):
         module_spec = isc.config.module_spec_from_file(SPECFILE_LOCATION)
         ConfigData.__init__(self, module_spec)
+        MockModuleCCSession.__init__(self)
 
     def get_remote_config_value(self, module_name, identifier):
         if module_name == "Auth" and identifier == "database_file":
@@ -683,6 +685,12 @@ class TestZonemgr(unittest.TestCase):
         self.zonemgr._config_data_check(config_data3)
         self.assertEqual(0.5, config_data3.get("refresh_jitter"))
 
+    def test_shutdown(self):
+        self.assertFalse(self.zonemgr._module_cc.stopped)
+        self.zonemgr._shutdown_event.set()
+        self.zonemgr.run()
+        self.assertTrue(self.zonemgr._module_cc.stopped)
+
     def tearDown(self):
         pass
 
diff --git a/src/bin/zonemgr/zonemgr.py.in b/src/bin/zonemgr/zonemgr.py.in
index 4060bb5..7b16f1b 100755
--- a/src/bin/zonemgr/zonemgr.py.in
+++ b/src/bin/zonemgr/zonemgr.py.in
@@ -658,8 +658,11 @@ class Zonemgr:
 
     def run(self):
         self.running = True
-        while not self._shutdown_event.is_set():
-            self._module_cc.check_command(False)
+        try:
+            while not self._shutdown_event.is_set():
+                self._module_cc.check_command(False)
+        finally:
+            self._module_cc.send_stopping()
 
 zonemgrd = None
 
diff --git a/src/lib/python/isc/config/ccsession.py b/src/lib/python/isc/config/ccsession.py
index 10ebc1c..476ba1e 100644
--- a/src/lib/python/isc/config/ccsession.py
+++ b/src/lib/python/isc/config/ccsession.py
@@ -211,12 +211,20 @@ class ModuleCCSession(ConfigData):
         self.__send_spec()
         self.__request_config()
 
-    def stop(self):
-        """Inform the system that the module using this ModuleCCSession
-           is stopping. This call will only cause a 'stopping'
-           message to be sent to the ConfigManager, it does not clear or
-           free any resources."""
-        self.__send_stopping()
+    def send_stopping(self):
+        """Sends a 'stopping' message to the configuration manager. This
+           message is just an FYI, and no response is expected. Any errors
+           when sending this message (for instance if the msgq session has
+           previously been closed) are logged, but ignored."""
+        msg = create_command(COMMAND_MODULE_STOPPING,
+                             self.get_module_spec().get_full_spec())
+        try:
+            self._session.group_sendmsg(msg, "ConfigManager")
+        except isc.cc.session.SessionError as se:
+            # If the session was previously closed, obvously trying to send
+            # a message fails. (TODO: check if session is open so we can
+            # error on real problems?)
+            logger.error(CONFIG_SESSION_STOPPING_FAILED, str(se))
 
     def get_socket(self):
         """Returns the socket from the command channel session. This
@@ -380,21 +388,6 @@ class ModuleCCSession(ConfigData):
             # TODO: log an error?
             pass
 
-    def __send_stopping(self):
-        """Sends a 'stopping' message to the configuration manager. This
-           message is just an FYI, and no response is expected. Any errors
-           when sending this message (for instance if the msgq session has
-           previously been closed) are logged, but ignored."""
-        msg = create_command(COMMAND_MODULE_STOPPING,
-                             self.get_module_spec().get_full_spec())
-        try:
-            self._session.group_sendmsg(msg, "ConfigManager")
-        except isc.cc.session.SessionError as se:
-            # If the session was previously closed, obvously trying to send
-            # a message fails. (TODO: check if session is open so we can
-            # error on real problems?)
-            logger.error(CONFIG_SESSION_STOPPING_FAILED, str(se))
-
     def __request_config(self):
         """Asks the configuration manager for the current configuration, and call the config handler if set.
            Raises a ModuleCCSessionError if there is no answer from the configuration manager"""
diff --git a/src/lib/python/isc/config/tests/ccsession_test.py b/src/lib/python/isc/config/tests/ccsession_test.py
index 081d3e9..df39550 100644
--- a/src/lib/python/isc/config/tests/ccsession_test.py
+++ b/src/lib/python/isc/config/tests/ccsession_test.py
@@ -257,7 +257,7 @@ class TestModuleCCSession(unittest.TestCase):
         self.assertTrue("Spec1" in fake_session.subscriptions)
 
         self.assertEqual(len(fake_session.message_queue), 0)
-        mccs.stop()
+        mccs.send_stopping()
         self.assertEqual(len(fake_session.message_queue), 1)
         self.assertEqual({'command': ['stopping', {'module_name': 'Spec1'}]},
                          fake_session.get_message('ConfigManager', None))
diff --git a/src/lib/python/isc/testutils/ccsession_mock.py b/src/lib/python/isc/testutils/ccsession_mock.py
index c974be9..cc6020b 100644
--- a/src/lib/python/isc/testutils/ccsession_mock.py
+++ b/src/lib/python/isc/testutils/ccsession_mock.py
@@ -19,7 +19,7 @@ class MockModuleCCSession():
         self.stopped = False
         self.closed = False
 
-    def stop(self):
+    def send_stopping(self):
         self.stopped = True
 
     def close(self):




More information about the bind10-changes mailing list