Merge "Sync service module from oslo-incubator"

This commit is contained in:
Jenkins 2014-06-13 21:20:17 +00:00 committed by Gerrit Code Review
commit ad30cf5f81

View File

@ -190,6 +190,7 @@ class ServiceLauncher(Launcher):
return status, signo return status, signo
def wait(self, ready_callback=None): def wait(self, ready_callback=None):
systemd.notify_once()
while True: while True:
self.handle_signal() self.handle_signal()
status, signo = self._wait_for_exit_or_signal(ready_callback) status, signo = self._wait_for_exit_or_signal(ready_callback)
@ -267,7 +268,7 @@ class ProcessLauncher(object):
launcher.wait() launcher.wait()
except SignalExit as exc: except SignalExit as exc:
signame = _signo_to_signame(exc.signo) signame = _signo_to_signame(exc.signo)
LOG.info(_LI('Caught %s, exiting'), signame) LOG.info(_LI('Child caught %s, exiting'), signame)
status = exc.code status = exc.code
signo = exc.signo signo = exc.signo
except SystemExit as exc: except SystemExit as exc:
@ -382,6 +383,7 @@ class ProcessLauncher(object):
def wait(self): def wait(self):
"""Loop waiting on children to die and respawning as necessary.""" """Loop waiting on children to die and respawning as necessary."""
systemd.notify_once()
LOG.debug('Full set of CONF:') LOG.debug('Full set of CONF:')
CONF.log_opt_values(LOG, std_logging.DEBUG) CONF.log_opt_values(LOG, std_logging.DEBUG)
@ -389,7 +391,10 @@ class ProcessLauncher(object):
while True: while True:
self.handle_signal() self.handle_signal()
self._respawn_children() self._respawn_children()
if self.sigcaught: # No signal means that stop was called. Don't clean up here.
if not self.sigcaught:
return
signame = _signo_to_signame(self.sigcaught) signame = _signo_to_signame(self.sigcaught)
LOG.info(_LI('Caught %s, stopping children'), signame) LOG.info(_LI('Caught %s, stopping children'), signame)
if not _is_sighup_and_daemon(self.sigcaught): if not _is_sighup_and_daemon(self.sigcaught):
@ -402,6 +407,11 @@ class ProcessLauncher(object):
except eventlet.greenlet.GreenletExit: except eventlet.greenlet.GreenletExit:
LOG.info(_LI("Wait called after thread killed. Cleaning up.")) LOG.info(_LI("Wait called after thread killed. Cleaning up."))
self.stop()
def stop(self):
"""Terminate child processes and wait on each."""
self.running = False
for pid in self.children: for pid in self.children:
try: try:
os.kill(pid, signal.SIGTERM) os.kill(pid, signal.SIGTERM)
@ -488,7 +498,6 @@ class Services(object):
""" """
service.start() service.start()
systemd.notify_once()
done.wait() done.wait()