X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lttng_ivc%2Futils%2Fruntime.py;h=264addc67f8667263071605658253faddaaad571;hb=acb9586ebf849dfd4691f3bcbf38a26d6c0a171b;hp=52258e8388b589f4d85bc13a61408f8381dcaca1;hpb=d96b684ba6d78ca3dfb19ff90e38ba1f3b78c9a1;p=deliverable%2Flttng-ivc.git diff --git a/lttng_ivc/utils/runtime.py b/lttng_ivc/utils/runtime.py index 52258e8..264addc 100644 --- a/lttng_ivc/utils/runtime.py +++ b/lttng_ivc/utils/runtime.py @@ -7,7 +7,6 @@ import logging import shutil import contextlib import pprint -import traceback from tempfile import TemporaryDirectory @@ -47,6 +46,7 @@ class Runtime(object): self._runtime_log_aggregation = os.path.join(self.__runtime_log, "runtime.log") self._run_command_count = 0 + self._is_test_modules_loaded = False self.special_env_variables = {"LTTNG_UST_DEBUG": "1", "LTTNG_APP_SOCKET_TIMEOUT": "-1", @@ -67,16 +67,26 @@ class Runtime(object): def add_project(self, project): self.__projects.append(project) + def remove_project(self, project): + self.__projects.remove(project) + def subprocess_signal(self, subprocess_uuid, signal): self.__subproces[subprocess_uuid].send_signal(signal) - def subprocess_terminate(self, subprocess_uuid, timeout=60): + def subprocess_terminate(self, subprocess_uuid, timeout=60, check_return=True): process = self.__subprocess[subprocess_uuid] process.terminate() - process.wait(timeout) + try: + process.wait(timeout) + except subprocess.TimeoutExpired: + # Force kill + return self.subprocess_kill(subprocess_uuid) stdout, stderr = self.__stdout_stderr[subprocess_uuid] stdout.close() stderr.close() + if check_return: + if process.returncode != 0: + raise subprocess.CalledProcessError(process.returncode, process.args) return process def subprocess_kill(self, subprocess_uuid): @@ -88,6 +98,17 @@ class Runtime(object): stderr.close() return process + def subprocess_wait(self, subprocess_uuid, check_return=True): + process = self.__subprocess[subprocess_uuid] + process.wait() + stdout, stderr = self.__stdout_stderr[subprocess_uuid] + stdout.close() + stderr.close() + if check_return: + if process.returncode != 0: + raise subprocess.CalledProcessError(process.returncode, process.args) + return process + def get_subprocess_stdout_path(self, subprocess_uuid): stdout, stderr = self.__stdout_stderr[subprocess_uuid] return stdout.name @@ -237,10 +258,12 @@ class Runtime(object): def load_test_module(self): # Base directory is provided by env self.run("modprobe lttng-test") + self._is_test_modules_loaded = True def unload_test_module(self, check_return=True): # Base directory is provided by env - self.run("modprobe -r lttng-test", check_return=check_return) + if self._is_test_modules_loaded: + self.run("modprobe -r lttng-test", check_return=check_return) def close(self): for key, subp in self.__subprocess.items(): @@ -259,4 +282,3 @@ class Runtime(object): # Copy the lttng_home used at runtime using hardlink to prevent useless # data duplication shutil.copytree(self.lttng_home, self.__post_runtime_lttng_home_path, copy_function=os.link) -