From: Jelte Jansen Date: Thu, 2 Feb 2012 13:45:31 +0000 (+0100) Subject: [640] rename stop() X-Git-Tag: trac2351_base~261^2~1^2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f45a95082d8db85dff8d7b0bf0e0817e7175103e;p=thirdparty%2Fkea.git [640] rename stop() --- diff --git a/src/bin/bind10/bind10_src.py.in b/src/bin/bind10/bind10_src.py.in index 5c7dc9380c..805275a060 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 ca3e1ea9eb..0628f1f1fe 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 f13c1bb9f8..22e4e9c498 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 e63ef34d1a..395aacc512 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 a3612a2266..537cf49e8e 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 5afb4fbab8..c9bd0f5c88 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 99e0522cf3..89e4d9668f 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 0cd63c0ac4..b59c2b6c78 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 eb124c97bd..1540e6b36f 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 600453dd17..29924c81fb 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 4060bb59d6..7b16f1bf2a 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 10ebc1c4d7..476ba1e1d2 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 081d3e9014..df39550de4 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 c974be9d77..cc6020badb 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):