Commit f45a9508 authored by Jelte Jansen's avatar Jelte Jansen
Browse files

[640] rename stop()

parent 2c40ed8b
......@@ -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:
......
......@@ -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
......
......@@ -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):
"""
......
......@@ -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
......
......@@ -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):
"""
......
......@@ -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()
......
......@@ -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):
......
......@@ -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():
......
......@@ -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:
......
......@@ -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
......
......@@ -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
......
......@@ -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"""
......
......@@ -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))
......
......@@ -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):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment