Browse Source

[640] rename stop()

Jelte Jansen 13 years ago
parent
commit
f45a95082d

+ 1 - 1
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
         # really necessary, but this is done to reflect that boss is also
         # 'just' a module.
         # 'just' a module.
         if self.ccs is not None:
         if self.ccs is not None:
-            self.ccs.stop()
+            self.ccs.send_stopping()
 
 
         # try using the BIND 10 request to stop
         # try using the BIND 10 request to stop
         try:
         try:

+ 1 - 1
src/bin/cmdctl/cmdctl.py.in

@@ -319,7 +319,7 @@ class CommandControl():
         elif command == ccsession.COMMAND_SHUTDOWN:
         elif command == ccsession.COMMAND_SHUTDOWN:
             #When cmdctl get 'shutdown' command from boss,
             #When cmdctl get 'shutdown' command from boss,
             #shutdown the outer httpserver.
             #shutdown the outer httpserver.
-            self._module_cc.stop()
+            self._module_cc.send_stopping()
             self._httpserver.shutdown()
             self._httpserver.shutdown()
             self._serving = False
             self._serving = False
 
 

+ 1 - 1
src/bin/ddns/ddns.py.in

@@ -153,7 +153,7 @@ class DDNSServer:
         Currently, it only causes the ModuleCCSession to send a message that
         Currently, it only causes the ModuleCCSession to send a message that
         this module is stopping.
         this module is stopping.
         '''
         '''
-        self._cc.stop()
+        self._cc.send_stopping()
 
 
     def accept(self):
     def accept(self):
         """
         """

+ 1 - 1
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'''
         '''Called by DDNSServer initialization, but not used in tests'''
         self._started = True
         self._started = True
 
 
-    def stop(self):
+    def send_stopping(self):
         '''Called by shutdown code'''
         '''Called by shutdown code'''
         self._stopped = True
         self._stopped = True
 
 

+ 1 - 1
src/bin/stats/stats.py.in

@@ -188,7 +188,7 @@ class Stats:
             while self.running:
             while self.running:
                 self.mccs.check_command(False)
                 self.mccs.check_command(False)
         finally:
         finally:
-            self.mccs.stop()
+            self.mccs.send_stopping()
 
 
     def config_handler(self, new_config):
     def config_handler(self, new_config):
         """
         """

+ 1 - 1
src/bin/stats/stats_httpd.py.in

@@ -203,7 +203,7 @@ class StatsHttpd:
         """Closes a ModuleCCSession object"""
         """Closes a ModuleCCSession object"""
         if self.mccs is None:
         if self.mccs is None:
             return
             return
-        self.mccs.stop()
+        self.mccs.send_stopping()
 
 
         logger.debug(DBG_STATHTTPD_INIT, STATHTTPD_CLOSING_CC_SESSION)
         logger.debug(DBG_STATHTTPD_INIT, STATHTTPD_CLOSING_CC_SESSION)
         self.mccs.close()
         self.mccs.close()

+ 4 - 9
src/bin/xfrin/tests/xfrin_test.py

@@ -20,6 +20,7 @@ import socket
 import sys
 import sys
 import io
 import io
 from isc.testutils.tsigctx_mock import MockTSIGContext
 from isc.testutils.tsigctx_mock import MockTSIGContext
+from isc.testutils.ccsession_mock import MockModuleCCSession
 from isc.testutils.rrset_utils import *
 from isc.testutils.rrset_utils import *
 from xfrin import *
 from xfrin import *
 import xfrin
 import xfrin
@@ -105,10 +106,7 @@ class XfrinTestException(Exception):
 class XfrinTestTimeoutException(Exception):
 class XfrinTestTimeoutException(Exception):
     pass
     pass
 
 
-class MockCC():
+class MockCC(MockModuleCCSession):
-    def __init__(self):
-        self.stop_called = False
-
     def get_default_value(self, identifier):
     def get_default_value(self, identifier):
         # The returned values should be identical to the spec file
         # The returned values should be identical to the spec file
         # XXX: these should be retrieved from the spec file
         # XXX: these should be retrieved from the spec file
@@ -120,9 +118,6 @@ class MockCC():
         if identifier == "zones/use_ixfr":
         if identifier == "zones/use_ixfr":
             return False
             return False
 
 
-    def stop(self):
-        self.stop_called = True
-
 class MockDataSourceClient():
 class MockDataSourceClient():
     '''A simple mock data source client.
     '''A simple mock data source client.
 
 
@@ -2058,9 +2053,9 @@ class TestXfrin(unittest.TestCase):
         self.args['tsig_key'] = ''
         self.args['tsig_key'] = ''
 
 
     def tearDown(self):
     def tearDown(self):
-        self.assertFalse(self.xfr._module_cc.stop_called);
+        self.assertFalse(self.xfr._module_cc.stopped);
         self.xfr.shutdown()
         self.xfr.shutdown()
-        self.assertTrue(self.xfr._module_cc.stop_called);
+        self.assertTrue(self.xfr._module_cc.stopped);
         sys.stderr= self.stderr_backup
         sys.stderr= self.stderr_backup
 
 
     def _do_parse_zone_name_class(self):
     def _do_parse_zone_name_class(self):

+ 1 - 1
src/bin/xfrin/xfrin.py.in

@@ -1224,7 +1224,7 @@ class Xfrin:
         ''' shutdown the xfrin process. the thread which is doing xfrin should be
         ''' shutdown the xfrin process. the thread which is doing xfrin should be
         terminated.
         terminated.
         '''
         '''
-        self._module_cc.stop()
+        self._module_cc.send_stopping()
         self._shutdown_event.set()
         self._shutdown_event.set()
         main_thread = threading.currentThread()
         main_thread = threading.currentThread()
         for th in threading.enumerate():
         for th in threading.enumerate():

+ 1 - 1
src/bin/xfrout/xfrout.py.in

@@ -969,7 +969,7 @@ class XfroutServer:
 
 
         global xfrout_server
         global xfrout_server
         xfrout_server = None #Avoid shutdown is called twice
         xfrout_server = None #Avoid shutdown is called twice
-        self._cc.stop()
+        self._cc.send_stopping()
         self._shutdown_event.set()
         self._shutdown_event.set()
         self._notifier.shutdown()
         self._notifier.shutdown()
         if self._unix_socket_server:
         if self._unix_socket_server:

+ 9 - 1
src/bin/zonemgr/tests/zonemgr_test.py

@@ -20,6 +20,7 @@ import unittest
 import os
 import os
 import tempfile
 import tempfile
 from zonemgr import *
 from zonemgr import *
+from isc.testutils.ccsession_mock import MockModuleCCSession
 
 
 ZONE_NAME_CLASS1_IN = ("example.net.", "IN")
 ZONE_NAME_CLASS1_IN = ("example.net.", "IN")
 ZONE_NAME_CLASS1_CH = ("example.net.", "CH")
 ZONE_NAME_CLASS1_CH = ("example.net.", "CH")
@@ -48,10 +49,11 @@ class MySession():
     def group_recvmsg(self, nonblock, seq):
     def group_recvmsg(self, nonblock, seq):
         return None, None
         return None, None
 
 
-class FakeCCSession(isc.config.ConfigData):
+class FakeCCSession(isc.config.ConfigData, MockModuleCCSession):
     def __init__(self):
     def __init__(self):
         module_spec = isc.config.module_spec_from_file(SPECFILE_LOCATION)
         module_spec = isc.config.module_spec_from_file(SPECFILE_LOCATION)
         ConfigData.__init__(self, module_spec)
         ConfigData.__init__(self, module_spec)
+        MockModuleCCSession.__init__(self)
 
 
     def get_remote_config_value(self, module_name, identifier):
     def get_remote_config_value(self, module_name, identifier):
         if module_name == "Auth" and identifier == "database_file":
         if module_name == "Auth" and identifier == "database_file":
@@ -683,6 +685,12 @@ class TestZonemgr(unittest.TestCase):
         self.zonemgr._config_data_check(config_data3)
         self.zonemgr._config_data_check(config_data3)
         self.assertEqual(0.5, config_data3.get("refresh_jitter"))
         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):
     def tearDown(self):
         pass
         pass
 
 

+ 5 - 2
src/bin/zonemgr/zonemgr.py.in

@@ -658,8 +658,11 @@ class Zonemgr:
 
 
     def run(self):
     def run(self):
         self.running = True
         self.running = True
-        while not self._shutdown_event.is_set():
+        try:
-            self._module_cc.check_command(False)
+            while not self._shutdown_event.is_set():
+                self._module_cc.check_command(False)
+        finally:
+            self._module_cc.send_stopping()
 
 
 zonemgrd = None
 zonemgrd = None
 
 

+ 14 - 21
src/lib/python/isc/config/ccsession.py

@@ -211,12 +211,20 @@ class ModuleCCSession(ConfigData):
         self.__send_spec()
         self.__send_spec()
         self.__request_config()
         self.__request_config()
 
 
-    def stop(self):
+    def send_stopping(self):
-        """Inform the system that the module using this ModuleCCSession
+        """Sends a 'stopping' message to the configuration manager. This
-           is stopping. This call will only cause a 'stopping'
+           message is just an FYI, and no response is expected. Any errors
-           message to be sent to the ConfigManager, it does not clear or
+           when sending this message (for instance if the msgq session has
-           free any resources."""
+           previously been closed) are logged, but ignored."""
-        self.__send_stopping()
+        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):
     def get_socket(self):
         """Returns the socket from the command channel session. This
         """Returns the socket from the command channel session. This
@@ -380,21 +388,6 @@ class ModuleCCSession(ConfigData):
             # TODO: log an error?
             # TODO: log an error?
             pass
             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):
     def __request_config(self):
         """Asks the configuration manager for the current configuration, and call the config handler if set.
         """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"""
            Raises a ModuleCCSessionError if there is no answer from the configuration manager"""

+ 1 - 1
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.assertTrue("Spec1" in fake_session.subscriptions)
 
 
         self.assertEqual(len(fake_session.message_queue), 0)
         self.assertEqual(len(fake_session.message_queue), 0)
-        mccs.stop()
+        mccs.send_stopping()
         self.assertEqual(len(fake_session.message_queue), 1)
         self.assertEqual(len(fake_session.message_queue), 1)
         self.assertEqual({'command': ['stopping', {'module_name': 'Spec1'}]},
         self.assertEqual({'command': ['stopping', {'module_name': 'Spec1'}]},
                          fake_session.get_message('ConfigManager', None))
                          fake_session.get_message('ConfigManager', None))

+ 1 - 1
src/lib/python/isc/testutils/ccsession_mock.py

@@ -19,7 +19,7 @@ class MockModuleCCSession():
         self.stopped = False
         self.stopped = False
         self.closed = False
         self.closed = False
 
 
-    def stop(self):
+    def send_stopping(self):
         self.stopped = True
         self.stopped = True
 
 
     def close(self):
     def close(self):