From 9e6693087ee731b8a74993a611d02ae49400f88b Mon Sep 17 00:00:00 2001 From: fly Date: Tue, 9 Mar 2021 13:13:17 +0000 Subject: [PATCH] Catch SIGINT between tile builds Signed-off-by: fly --- worldbuild-worker.py | 122 +++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/worldbuild-worker.py b/worldbuild-worker.py index 78ff867..4791846 100755 --- a/worldbuild-worker.py +++ b/worldbuild-worker.py @@ -97,77 +97,77 @@ def cleanup(): run("rm -rf projects/worldbuild-" + name, shell=True) -running = True -while running: - if api != None: - name = api_get_job(action, api, api_token) - else: - name = get_job(action, host, port) - - try: - run("mkdir -p projects/worldbuild-" + name, shell=True) - - run("cp projects/worldbuild/params.ini projects/worldbuild-" + name + "/", shell=True) - - if global_db: - db_name = prefix + "worldbuild" +try: + running = True + while running: + if api != None: + name = api_get_job(action, api, api_token) else: - if get_south(name) >= 80: - db_name = prefix + "n-pole" - elif get_south(name) < -80: - db_name = prefix + "s-pole" + name = get_job(action, host, port) + + run("mkdir -p projects/worldbuild-" + name, shell=True) + + run("cp projects/worldbuild/params.ini projects/worldbuild-" + name + "/", shell=True) + + if global_db: + db_name = prefix + "worldbuild" else: - match = re.match(r"[0-9]{1,7}", name) - if match == None: - print("ERROR: Invalid tile name") - sys.exit(1) + if get_south(name) >= 80: + db_name = prefix + "n-pole" + elif get_south(name) < -80: + db_name = prefix + "s-pole" else: - db_name = prefix + get_area_name(get_south(name), get_west(name), major=True) - - if get_west(name) < 0: - bounds = "bounds=*" - else: - bounds = "bounds=" + match = re.match(r"[0-9]{1,7}", name) + if match == None: + print("ERROR: Invalid tile name") + sys.exit(1) + else: + db_name = prefix + get_area_name(get_south(name), get_west(name), major=True) - bounds += str(get_west(name)) + "_" + str(get_south(name)) + "_" + str(get_east(name)) + "_" + str(get_north(name)) + if get_west(name) < 0: + bounds = "bounds=*" + else: + bounds = "bounds=" + + bounds += str(get_west(name)) + "_" + str(get_south(name)) + "_" + str(get_east(name)) + "_" + str(get_north(name)) + + run("sed -i 's/DB_NAME.*/DB_NAME = \"" + db_name + "\"/' projects/worldbuild-" + name + "/params.ini", shell=True) + + run("echo '" + bounds + "' > projects/worldbuild-" + name + "/settings", shell=True) - run("sed -i 's/DB_NAME.*/DB_NAME = \"" + db_name + "\"/' projects/worldbuild-" + name + "/params.ini", shell=True) + if not quiet: + print("Building " + name) - run("echo '" + bounds + "' > projects/worldbuild-" + name + "/settings", shell=True) - - if not quiet: - print("Building " + name) - - logpath = "projects/worldbuild/output/" + get_area_name(get_south(name), get_west(name), major=True) + "/" + get_area_name(get_south(name), get_west(name)) + "/" - run("mkdir -p " + logpath, shell=True) - with open(logpath + name + "-" + strftime("%Y%m%d-%H%M") + ".log", "w") as log_file: - build = Popen("./build -S 10 -t 1 worldbuild-" + name, stdout=log_file, stderr=STDOUT, shell=True, start_new_session=True) - + logpath = "projects/worldbuild/output/" + get_area_name(get_south(name), get_west(name), major=True) + "/" + get_area_name(get_south(name), get_west(name)) + "/" + run("mkdir -p " + logpath, shell=True) + with open(logpath + name + "-" + strftime("%Y%m%d-%H%M") + ".log", "w") as log_file: + build = Popen("./build -S 10 -t 1 worldbuild-" + name, stdout=log_file, stderr=STDOUT, shell=True, start_new_session=True) + + build.wait() + + cleanup() + + if api != None: + api_send_status(name, "done", api, api_token) + else: + send_status(name, "done", host, port) +except KeyboardInterrupt: + if not quiet: + print("Graceful shutdown triggered. To force immedate stop, press Ctrl+C again") + running = False + try: build.wait() - cleanup() - if api != None: api_send_status(name, "done", api, api_token) else: send_status(name, "done", host, port) except KeyboardInterrupt: - if not quiet: - print("Graceful shutdown triggered. To force immedate stop, press Ctrl+C again") - running = False - try: - build.wait() - cleanup() - if api != None: - api_send_status(name, "done", api, api_token) - else: - send_status(name, "done", host, port) - except KeyboardInterrupt: - #TODO doesn't work - print("Forcing shutdown...") - build.terminate() - sleep(5) - build.kill() - sleep(5) - cleanup() - sys.exit(0) + #TODO doesn't work + print("Forcing shutdown...") + build.terminate() + sleep(5) + build.kill() + sleep(5) + cleanup() + sys.exit(0)