From: Elena Ezhova Date: Thu, 26 Mar 2015 12:33:36 +0000 (+0300) Subject: Sync service from oslo-incubator X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=f92d22d91b8a29a0088c69a1cf4940c822d38847;p=openstack-build%2Fneutron-build.git Sync service from oslo-incubator This sync includes changes that are required to fix handling of SIGHUP in Neutron. The following changes and bugfixes are included: d24b658 Revert "Optimization of waiting subprocesses in ProcessLauncher" 593005b ProcessLauncher: reload config file in parent process on SIGHUP f29e865 Store ProcessLauncher signal handlers on class level bf92010 Optimization of waiting subprocesses in ProcessLauncher Change-Id: If0aab4e8978422346f6ba4c9e6272cdaf39db6cb Closes-Bug: #1433142 Related-Bug: #1276694 --- diff --git a/neutron/openstack/common/service.py b/neutron/openstack/common/service.py index b4276141f..bffc4e79b 100644 --- a/neutron/openstack/common/service.py +++ b/neutron/openstack/common/service.py @@ -199,6 +199,13 @@ class ServiceWrapper(object): class ProcessLauncher(object): + _signal_handlers_set = set() + + @classmethod + def _handle_class_signals(cls, *args, **kwargs): + for handler in cls._signal_handlers_set: + handler(*args, **kwargs) + def __init__(self, wait_interval=0.01): """Constructor. @@ -214,7 +221,8 @@ class ProcessLauncher(object): self.handle_signal() def handle_signal(self): - _set_signals_handler(self._handle_signal) + self._signal_handlers_set.add(self._handle_signal) + _set_signals_handler(self._handle_class_signals) def _handle_signal(self, signo, frame): self.sigcaught = signo @@ -391,8 +399,14 @@ class ProcessLauncher(object): if not _is_sighup_and_daemon(self.sigcaught): break + cfg.CONF.reload_config_files() + for service in set( + [wrap.service for wrap in self.children.values()]): + service.reset() + for pid in self.children: os.kill(pid, signal.SIGHUP) + self.running = True self.sigcaught = None except eventlet.greenlet.GreenletExit: