aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2020-04-23 11:33:34 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2020-04-23 11:33:34 +0200
commitdeac53607db2b2f16dc987f7f002f1095862a582 (patch)
tree65a7ab7c79a711dbea57a8e3a5439a8ad3fa2fc8
parent8c53567d91194f444b1c22cd0467c49f63baac84 (diff)
downloadallocbench-deac53607db2b2f16dc987f7f002f1095862a582.tar.gz
allocbench-deac53607db2b2f16dc987f7f002f1095862a582.zip
fix shutdown for already terminated servers and save their returncode
-rw-r--r--src/benchmark.py46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/benchmark.py b/src/benchmark.py
index 3b6feb1..2fb2606 100644
--- a/src/benchmark.py
+++ b/src/benchmark.py
@@ -363,7 +363,7 @@ class Benchmark:
# Register termination of the server
atexit.register(Benchmark.shutdown_server, self=self, server=server)
- self.results["servers"].setdefault(alloc_name, {s["name"]: {"stdout": [], "stderr": []} for s in self.servers})
+ self.results["servers"].setdefault(alloc_name, {s["name"]: {"stdout": [], "stderr": [], "returncode": []} for s in self.servers})
if not "prepare_cmds" in server:
continue
@@ -382,31 +382,33 @@ class Benchmark:
def shutdown_server(self, server):
"""Terminate a started server running its shutdown_cmds in advance"""
- if server["popen"].poll() != None:
- return
+ if server["popen"].poll() == None:
+ server_name = server.get("name", "Server")
+ print_info(f"Shutting down {server_name}")
- server_name = server.get("name", "Server")
- print_info(f"Shutting down {server_name}")
+ substitutions = {}
+ substitutions.update(self.__dict__)
+ substitutions.update(server)
- substitutions = {}
- substitutions.update(self.__dict__)
- substitutions.update(server)
+ if "shutdown_cmds" in server:
+ for shutdown_cmd in server["shutdown_cmds"]:
+ shutdown_cmd = shutdown_cmd.format(**substitutions)
+ print_debug(shutdown_cmd)
- if "shutdown_cmds" in server:
- for shutdown_cmd in server["shutdown_cmds"]:
- shutdown_cmd = shutdown_cmd.format(**substitutions)
- print_debug(shutdown_cmd)
+ proc = subprocess.run(shutdown_cmd.split(), universal_newlines=True,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- proc = subprocess.run(shutdown_cmd.split(), universal_newlines=True,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ print_debug("Stdout:", proc.stdout)
+ print_debug("Stderr:", proc.stderr)
- print_debug("Stdout:", proc.stdout)
- print_debug("Stderr:", proc.stderr)
+ # wait for server termination
+ sleep(5)
- # wait for server termination
- sleep(5)
+ outs, errs = Benchmark.terminate_subprocess(server["popen"])
+ else:
+ outs = server["popen"].stdout.read()
+ errs = server["popen"].stderr.read()
- outs, errs = Benchmark.terminate_subprocess(server["popen"])
server["stdout"] = outs
server["stderr"] = errs
@@ -566,8 +568,10 @@ class Benchmark:
self.shutdown_servers()
for server in self.servers:
- self.results["servers"][alloc_name][server['name']]["stdout"].append(server["stdout"])
- self.results["servers"][alloc_name][server['name']]["stderr"].append(server["stderr"])
+ server_result = self.results["servers"][alloc_name][server['name']]
+ server_result["stdout"].append(server["stdout"])
+ server_result["stderr"].append(server["stderr"])
+ server_result["returncode"].append(server["popen"].returncode)
if hasattr(self, "postallocator_hook"):
self.postallocator_hook((alloc_name, alloc), run)