Register term_handler for all zuul apps
Almost all zuul apps use the method term_handler for SIGINT and SIGTERM. Defining this centrally in ZuulDaemonApp makes this much simpler and without repitition. Change-Id: I68f8d1bf52b0e16340818d2bcc44cd9fc5868ca7
This commit is contained in:
parent
379523bd09
commit
00d7ea51fd
|
@ -170,6 +170,14 @@ class ZuulDaemonApp(ZuulApp, metaclass=abc.ABCMeta):
|
|||
expand_user=True)
|
||||
return pid_fn
|
||||
|
||||
@abc.abstractmethod
|
||||
def exit_handler(self, signum, frame):
|
||||
"""
|
||||
This is a signal handler which is called on SIGINT and SIGTERM and must
|
||||
take care of stopping the application.
|
||||
"""
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
def run(self):
|
||||
"""
|
||||
|
@ -189,6 +197,8 @@ class ZuulDaemonApp(ZuulApp, metaclass=abc.ABCMeta):
|
|||
signal.signal(signal.SIGUSR2, stack_dump_handler)
|
||||
|
||||
if self.args.nodaemon:
|
||||
signal.signal(signal.SIGTERM, self.exit_handler)
|
||||
signal.signal(signal.SIGINT, self.exit_handler)
|
||||
self.run()
|
||||
else:
|
||||
# Exercise the pidfile before we do anything else (including
|
||||
|
|
|
@ -19,7 +19,6 @@ import logging
|
|||
import os
|
||||
import pwd
|
||||
import sys
|
||||
import signal
|
||||
import tempfile
|
||||
|
||||
import zuul.cmd
|
||||
|
@ -53,8 +52,6 @@ class Executor(zuul.cmd.ZuulDaemonApp):
|
|||
|
||||
def exit_handler(self, signum, frame):
|
||||
self.executor.stop()
|
||||
self.executor.join()
|
||||
sys.exit(0)
|
||||
|
||||
def start_log_streamer(self):
|
||||
pipe_read, pipe_write = os.pipe()
|
||||
|
@ -130,16 +127,7 @@ class Executor(zuul.cmd.ZuulDaemonApp):
|
|||
log_streaming_port=self.finger_port)
|
||||
self.executor.start()
|
||||
|
||||
if self.args.nodaemon:
|
||||
signal.signal(signal.SIGTERM, self.exit_handler)
|
||||
while True:
|
||||
try:
|
||||
signal.pause()
|
||||
except KeyboardInterrupt:
|
||||
print("Ctrl + C: asking executor to exit nicely...\n")
|
||||
self.exit_handler(signal.SIGINT, None)
|
||||
else:
|
||||
self.executor.join()
|
||||
self.executor.join()
|
||||
|
||||
|
||||
def main():
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
# under the License.
|
||||
|
||||
import logging
|
||||
import signal
|
||||
import sys
|
||||
|
||||
import zuul.cmd
|
||||
|
@ -47,6 +46,9 @@ class FingerGatewayApp(zuul.cmd.ZuulDaemonApp):
|
|||
if self.args.command:
|
||||
self.args.nodaemon = True
|
||||
|
||||
def exit_handler(self, signum, frame):
|
||||
self.stop()
|
||||
|
||||
def run(self):
|
||||
'''
|
||||
Main entry point for the FingerGatewayApp.
|
||||
|
@ -84,19 +86,7 @@ class FingerGatewayApp(zuul.cmd.ZuulDaemonApp):
|
|||
self.log.info('Starting Zuul finger gateway app')
|
||||
self.gateway.start()
|
||||
|
||||
if self.args.nodaemon:
|
||||
# NOTE(Shrews): When running in non-daemon mode, although sending
|
||||
# the 'stop' command via the command socket will shutdown the
|
||||
# gateway, it's still necessary to Ctrl+C to stop the app.
|
||||
while True:
|
||||
try:
|
||||
signal.pause()
|
||||
except KeyboardInterrupt:
|
||||
print("Ctrl + C: asking gateway to exit nicely...\n")
|
||||
self.stop()
|
||||
break
|
||||
else:
|
||||
self.gateway.wait()
|
||||
self.gateway.wait()
|
||||
|
||||
self.log.info('Stopped Zuul finger gateway app')
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import signal
|
||||
import sys
|
||||
|
||||
import zuul.cmd
|
||||
|
@ -44,8 +43,6 @@ class Merger(zuul.cmd.ZuulDaemonApp):
|
|||
|
||||
def exit_handler(self, signum, frame):
|
||||
self.merger.stop()
|
||||
self.merger.join()
|
||||
sys.exit(0)
|
||||
|
||||
def run(self):
|
||||
# See comment at top of file about zuul imports
|
||||
|
@ -62,16 +59,7 @@ class Merger(zuul.cmd.ZuulDaemonApp):
|
|||
self.connections)
|
||||
self.merger.start()
|
||||
|
||||
if self.args.nodaemon:
|
||||
signal.signal(signal.SIGTERM, self.exit_handler)
|
||||
while True:
|
||||
try:
|
||||
signal.pause()
|
||||
except KeyboardInterrupt:
|
||||
print("Ctrl + C: asking merger to exit nicely...\n")
|
||||
self.exit_handler(signal.SIGINT, None)
|
||||
else:
|
||||
self.merger.join()
|
||||
self.merger.join()
|
||||
|
||||
|
||||
def main():
|
||||
|
|
|
@ -63,9 +63,7 @@ class Scheduler(zuul.cmd.ZuulDaemonApp):
|
|||
|
||||
def exit_handler(self, signum, frame):
|
||||
self.sched.exit()
|
||||
self.sched.join()
|
||||
self.stop_gear_server()
|
||||
sys.exit(0)
|
||||
|
||||
def start_gear_server(self):
|
||||
pipe_read, pipe_write = os.pipe()
|
||||
|
@ -175,16 +173,7 @@ class Scheduler(zuul.cmd.ZuulDaemonApp):
|
|||
|
||||
signal.signal(signal.SIGHUP, self.reconfigure_handler)
|
||||
|
||||
if self.args.nodaemon:
|
||||
signal.signal(signal.SIGTERM, self.exit_handler)
|
||||
while True:
|
||||
try:
|
||||
signal.pause()
|
||||
except KeyboardInterrupt:
|
||||
print("Ctrl + C: asking scheduler to exit nicely...\n")
|
||||
self.exit_handler(signal.SIGINT, None)
|
||||
else:
|
||||
self.sched.join()
|
||||
self.sched.join()
|
||||
|
||||
|
||||
def main():
|
||||
|
|
|
@ -89,12 +89,6 @@ class WebServer(zuul.cmd.ZuulDaemonApp):
|
|||
name='web')
|
||||
self.thread.start()
|
||||
|
||||
try:
|
||||
signal.pause()
|
||||
except KeyboardInterrupt:
|
||||
print("Ctrl + C: asking web server to exit nicely...\n")
|
||||
self.exit_handler(signal.SIGINT, None)
|
||||
|
||||
self.thread.join()
|
||||
loop.stop()
|
||||
loop.close()
|
||||
|
|
Loading…
Reference in New Issue