From 07ef5de1915b48f3514435b31da35120ee4835b9 Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Mon, 10 Oct 2016 15:28:50 -0600 Subject: [PATCH] Ensure console loggers die when the job does Signed-off-by: Zack Cerza --- teuthology/task/console_log.py | 20 +++++++++++++++++--- teuthology/test/task/test_console_log.py | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/teuthology/task/console_log.py b/teuthology/task/console_log.py index 97cf83450d..f9450b2a81 100644 --- a/teuthology/task/console_log.py +++ b/teuthology/task/console_log.py @@ -2,6 +2,7 @@ import logging import os from teuthology.orchestra.cluster import Cluster +from teuthology.exit import exiter from . import Task @@ -42,7 +43,8 @@ class ConsoleLog(Task): if not self.enabled: return super(ConsoleLog, self).setup() - self.processes = list() + self.processes = dict() + self.signal_handlers = list() self.setup_archive() def setup_archive(self): @@ -65,7 +67,15 @@ class ConsoleLog(Task): "%s.log" % remote.shortname, ) proc = remote.console.spawn_sol_log(log_path) - self.processes.append(proc) + self.processes[remote.shortname] = proc + + # Install a signal handler to make sure the console-logging + # processes are terminated if the job is killed + def kill_console_loggers(signal_, frame): + for (name, proc) in self.processes.items(): + log.debug("Killing console logger for %s", name) + proc.terminate() + exiter.add_handler(15, kill_console_loggers) def end(self): if not self.enabled: @@ -74,7 +84,7 @@ class ConsoleLog(Task): self.stop_logging() def stop_logging(self, force=False): - for proc in self.processes: + for proc in self.processes.values(): if proc.poll() is not None: continue if force: @@ -82,6 +92,10 @@ class ConsoleLog(Task): else: proc.terminate() + # Remove any signal handlers + for handler in self.signal_handlers: + handler.remove() + def teardown(self): if not self.enabled: return diff --git a/teuthology/test/task/test_console_log.py b/teuthology/test/task/test_console_log.py index b9731d47e3..c55e9ac63d 100644 --- a/teuthology/test/task/test_console_log.py +++ b/teuthology/test/task/test_console_log.py @@ -74,6 +74,6 @@ class TestConsoleLog(TestTask): def test_end(self, m_pconsole): with self.klass(self.ctx, self.task_config) as task: pass - for proc in task.processes: + for proc in task.processes.values(): assert proc.terminate.called_once_with() assert proc.kill.called_once_with() -- 2.39.5