diff options
author | Tobias Henkel <tobias.henkel@bmw.de> | 2018-01-22 15:15:19 +0100 |
---|---|---|
committer | Tobias Henkel <tobias.henkel@bmw.de> | 2018-01-22 15:20:24 +0100 |
commit | b3cab1d779aa5c95eef09cc56da124b806d781c8 (patch) | |
tree | 93a72c924658865f1942e2efc6440c7ad5ad12ab | |
parent | 495a52d2aeec647b036c406e74370b78d83cbf8c (diff) | |
download | zuul-b3cab1d779aa5c95eef09cc56da124b806d781c8.tar.gz |
Revert "Register term_handler for all zuul apps"
This reverts commit 00d7ea51fd1633a141b2e97291baa425be1680c8. It
intended to refactor common code paths for signal handling. However in
our dockerized deployment this seems to completely break signal
handling. Thus it needs to be reverted.
Change-Id: Id5731557ff9a363c7a3d9438a8efcd476e38380c
-rwxr-xr-x | zuul/cmd/__init__.py | 10 | ||||
-rwxr-xr-x | zuul/cmd/executor.py | 14 | ||||
-rw-r--r-- | zuul/cmd/fingergw.py | 18 | ||||
-rwxr-xr-x | zuul/cmd/merger.py | 14 | ||||
-rwxr-xr-x | zuul/cmd/scheduler.py | 13 | ||||
-rwxr-xr-x | zuul/cmd/web.py | 6 |
6 files changed, 58 insertions, 17 deletions
diff --git a/zuul/cmd/__init__.py b/zuul/cmd/__init__.py index bf11c6fc9..b2992195c 100755 --- a/zuul/cmd/__init__.py +++ b/zuul/cmd/__init__.py @@ -171,14 +171,6 @@ class ZuulDaemonApp(ZuulApp, metaclass=abc.ABCMeta): 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): """ This is the main run method of the application. @@ -197,8 +189,6 @@ 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 diff --git a/zuul/cmd/executor.py b/zuul/cmd/executor.py index 5b06f0cca..b050a5979 100755 --- a/zuul/cmd/executor.py +++ b/zuul/cmd/executor.py @@ -17,6 +17,7 @@ import logging import os import sys +import signal import tempfile import zuul.cmd @@ -50,6 +51,8 @@ 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() @@ -106,7 +109,16 @@ class Executor(zuul.cmd.ZuulDaemonApp): log_streaming_port=self.finger_port) self.executor.start() - self.executor.join() + 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() def main(): diff --git a/zuul/cmd/fingergw.py b/zuul/cmd/fingergw.py index 0d47f0848..920eed8f2 100644 --- a/zuul/cmd/fingergw.py +++ b/zuul/cmd/fingergw.py @@ -14,6 +14,7 @@ # under the License. import logging +import signal import sys import zuul.cmd @@ -46,9 +47,6 @@ 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. @@ -86,7 +84,19 @@ class FingerGatewayApp(zuul.cmd.ZuulDaemonApp): self.log.info('Starting Zuul finger gateway app') self.gateway.start() - self.gateway.wait() + 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.log.info('Stopped Zuul finger gateway app') diff --git a/zuul/cmd/merger.py b/zuul/cmd/merger.py index 390191f4a..8c4798923 100755 --- a/zuul/cmd/merger.py +++ b/zuul/cmd/merger.py @@ -14,6 +14,7 @@ # License for the specific language governing permissions and limitations # under the License. +import signal import sys import zuul.cmd @@ -43,6 +44,8 @@ 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 @@ -59,7 +62,16 @@ class Merger(zuul.cmd.ZuulDaemonApp): self.connections) self.merger.start() - self.merger.join() + 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() def main(): diff --git a/zuul/cmd/scheduler.py b/zuul/cmd/scheduler.py index 3cffa1010..7748a80a7 100755 --- a/zuul/cmd/scheduler.py +++ b/zuul/cmd/scheduler.py @@ -63,7 +63,9 @@ 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() @@ -173,7 +175,16 @@ class Scheduler(zuul.cmd.ZuulDaemonApp): signal.signal(signal.SIGHUP, self.reconfigure_handler) - self.sched.join() + 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() def main(): diff --git a/zuul/cmd/web.py b/zuul/cmd/web.py index 78392db51..ad3062ff0 100755 --- a/zuul/cmd/web.py +++ b/zuul/cmd/web.py @@ -89,6 +89,12 @@ 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() |