summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Henkel <tobias.henkel@bmw.de>2018-01-22 15:15:19 +0100
committerTobias Henkel <tobias.henkel@bmw.de>2018-01-22 15:20:24 +0100
commitb3cab1d779aa5c95eef09cc56da124b806d781c8 (patch)
tree93a72c924658865f1942e2efc6440c7ad5ad12ab
parent495a52d2aeec647b036c406e74370b78d83cbf8c (diff)
downloadzuul-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-xzuul/cmd/__init__.py10
-rwxr-xr-xzuul/cmd/executor.py14
-rw-r--r--zuul/cmd/fingergw.py18
-rwxr-xr-xzuul/cmd/merger.py14
-rwxr-xr-xzuul/cmd/scheduler.py13
-rwxr-xr-xzuul/cmd/web.py6
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()