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
This commit is contained in:
Elena Ezhova 2015-03-26 15:33:36 +03:00
parent 483de6313f
commit f92d22d91b
1 changed files with 15 additions and 1 deletions

View File

@ -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: