From d1564b592e979b17301d75d6a544302d5ca8fbd8 Mon Sep 17 00:00:00 2001 From: Manuela Kuhn <manuela.kuhn@desy.de> Date: Fri, 29 Apr 2016 15:32:44 +0200 Subject: [PATCH] Added term handler to TaskProvider and DataDispatcher --- src/sender/DataDispatcher.py | 10 +++++++++- src/sender/TaskProvider.py | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/sender/DataDispatcher.py b/src/sender/DataDispatcher.py index f88dab20..475bb6fa 100644 --- a/src/sender/DataDispatcher.py +++ b/src/sender/DataDispatcher.py @@ -8,6 +8,7 @@ import logging import traceback import cPickle import shutil +import signal from multiprocessing import Process try: @@ -53,7 +54,9 @@ class DataDispatcher(): self.id = id self.log = self.__getLogger(logQueue) - self.currentPID = os.getpid() + signal.signal(signal.SIGTERM, self.signal_term_handler) + + self.currentPID = os.getpid() self.log.debug("DataDispatcher-" + str(self.id) + " started (PID " + str(self.currentPID) + ").") self.controlConId = controlConId @@ -297,6 +300,11 @@ class DataDispatcher(): self.context = None + def signal_term_handler(self, signal, frame): + self.log.debug('got SIGTERM') + self.stop() + + def __exit__ (self): self.stop() diff --git a/src/sender/TaskProvider.py b/src/sender/TaskProvider.py index 7f04013a..6f9f965b 100644 --- a/src/sender/TaskProvider.py +++ b/src/sender/TaskProvider.py @@ -7,6 +7,8 @@ import logging import sys import trace import cPickle +import signal +import errno try: BASE_PATH = os.path.dirname ( os.path.dirname ( os.path.dirname ( os.path.realpath ( __file__ ) ))) @@ -45,6 +47,8 @@ class TaskProvider(): self.log = self.getLogger(logQueue) + signal.signal(signal.SIGTERM, self.signal_term_handler) + self.currentPID = os.getpid() self.log.debug("TaskProvider started (PID " + str(self.currentPID) + ").") @@ -158,6 +162,12 @@ class TaskProvider(): workloadList = self.eventDetector.getNewEvent() except KeyboardInterrupt: break + except IOError as e: + if e.errno == errno.EINTR: + break + else: + self.log.error("Invalid fileEvent message received.", exc_info=True) + continue except: self.log.error("Invalid fileEvent message received.", exc_info=True) #skip all further instructions and continue with next iteration @@ -240,6 +250,11 @@ class TaskProvider(): self.context = None + def signal_term_handler(self, signal, frame): + self.log.debug('got SIGTERM') + self.stop() + + def __exit__ (self): self.stop() -- GitLab