Adds a default reload callback to ProcessManager
Currently, process reload in ProcessManager is being done with 'HUP'. Some processes, such as haproxy[1], use a different method for reloading configuration updates. This patch addes a default reload callback option to handle such cases, while keeping 'HUP' as the default method, in case a default reload callback was not provided. [1] See -sf flags: http://www.haproxy.org/download/1.2/doc/haproxy-en.txt Related-Bug: #1565801 Change-Id: Ia2f67e742778cd99f2211c94782635652d9032c7
This commit is contained in:
parent
99cbcba48c
commit
ec929d9b1c
@ -61,7 +61,8 @@ class ProcessManager(MonitoredProcess):
|
|||||||
"""
|
"""
|
||||||
def __init__(self, conf, uuid, namespace=None, service=None,
|
def __init__(self, conf, uuid, namespace=None, service=None,
|
||||||
pids_path=None, default_cmd_callback=None,
|
pids_path=None, default_cmd_callback=None,
|
||||||
cmd_addl_env=None, pid_file=None, run_as_root=False):
|
cmd_addl_env=None, pid_file=None, run_as_root=False,
|
||||||
|
custom_reload_callback=None):
|
||||||
|
|
||||||
self.conf = conf
|
self.conf = conf
|
||||||
self.uuid = uuid
|
self.uuid = uuid
|
||||||
@ -71,6 +72,7 @@ class ProcessManager(MonitoredProcess):
|
|||||||
self.pids_path = pids_path or self.conf.external_pids
|
self.pids_path = pids_path or self.conf.external_pids
|
||||||
self.pid_file = pid_file
|
self.pid_file = pid_file
|
||||||
self.run_as_root = run_as_root
|
self.run_as_root = run_as_root
|
||||||
|
self.custom_reload_callback = custom_reload_callback
|
||||||
|
|
||||||
if service:
|
if service:
|
||||||
self.service_pid_fname = 'pid.' + service
|
self.service_pid_fname = 'pid.' + service
|
||||||
@ -94,6 +96,9 @@ class ProcessManager(MonitoredProcess):
|
|||||||
self.reload_cfg()
|
self.reload_cfg()
|
||||||
|
|
||||||
def reload_cfg(self):
|
def reload_cfg(self):
|
||||||
|
if self.custom_reload_callback:
|
||||||
|
self.disable(get_stop_command=self.custom_reload_callback)
|
||||||
|
else:
|
||||||
self.disable('HUP')
|
self.disable('HUP')
|
||||||
|
|
||||||
def disable(self, sig='9', get_stop_command=None):
|
def disable(self, sig='9', get_stop_command=None):
|
||||||
|
@ -164,6 +164,35 @@ class TestProcessManager(base.BaseTestCase):
|
|||||||
manager.enable(callback)
|
manager.enable(callback)
|
||||||
self.assertFalse(callback.called)
|
self.assertFalse(callback.called)
|
||||||
|
|
||||||
|
def test_reload_cfg_without_custom_reload_callback(self):
|
||||||
|
with mock.patch.object(ep.ProcessManager, 'disable') as disable:
|
||||||
|
manager = ep.ProcessManager(self.conf, 'uuid', namespace='ns')
|
||||||
|
manager.reload_cfg()
|
||||||
|
disable.assert_called_once_with('HUP')
|
||||||
|
|
||||||
|
def test_reload_cfg_with_custom_reload_callback(self):
|
||||||
|
reload_callback = mock.sentinel.callback
|
||||||
|
with mock.patch.object(ep.ProcessManager, 'disable') as disable:
|
||||||
|
manager = ep.ProcessManager(
|
||||||
|
self.conf, 'uuid', namespace='ns',
|
||||||
|
custom_reload_callback=reload_callback)
|
||||||
|
manager.reload_cfg()
|
||||||
|
disable.assert_called_once_with(get_stop_command=reload_callback)
|
||||||
|
|
||||||
|
def test_disable_get_stop_command(self):
|
||||||
|
cmd = ['the', 'cmd']
|
||||||
|
reload_callback = mock.Mock(return_value=cmd)
|
||||||
|
with mock.patch.object(ep.ProcessManager, 'pid',
|
||||||
|
mock.PropertyMock(return_value=4)):
|
||||||
|
with mock.patch.object(ep.ProcessManager, 'active',
|
||||||
|
mock.PropertyMock(return_value=True)):
|
||||||
|
manager = ep.ProcessManager(
|
||||||
|
self.conf, 'uuid',
|
||||||
|
custom_reload_callback=reload_callback)
|
||||||
|
manager.disable(
|
||||||
|
get_stop_command=manager.custom_reload_callback)
|
||||||
|
self.assertIn(cmd, self.execute.call_args[0])
|
||||||
|
|
||||||
def test_disable_no_namespace(self):
|
def test_disable_no_namespace(self):
|
||||||
with mock.patch.object(ep.ProcessManager, 'pid') as pid:
|
with mock.patch.object(ep.ProcessManager, 'pid') as pid:
|
||||||
pid.__get__ = mock.Mock(return_value=4)
|
pid.__get__ = mock.Mock(return_value=4)
|
||||||
|
Loading…
Reference in New Issue
Block a user