From 7d84001ca4807d5b718b15d813578b1d2c3957a1 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Thu, 24 Dec 2015 17:08:26 +0100 Subject: [PATCH] Tweak code question error handling --- course/page/code.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/course/page/code.py b/course/page/code.py index f4aa741f..0225d24b 100644 --- a/course/page/code.py +++ b/course/page/code.py @@ -141,6 +141,17 @@ def request_python_run(run_req, run_timeout, image=None): from traceback import format_exc + def check_timeout(): + if time() - start_time < docker_timeout: + sleep(0.1) + # and retry + else: + return { + "result": "uncaught_error", + "message": "Timeout waiting for container.", + "traceback": "".join(format_exc()), + } + while True: try: connection = http_client.HTTPConnection('localhost', port) @@ -148,37 +159,27 @@ def request_python_run(run_req, run_timeout, image=None): connection.request('GET', '/ping') response = connection.getresponse() - response_data = response.read().decode("utf-8") + response_data = response.read().decode() if response_data != "OK": raise InvalidPingResponse() break + except (http_client.RemoteDisconnected, http_client.BadStatusLine, + InvalidPingResponse): + ct_res = check_timeout() + if ct_res is not None: + return ct_res + except socket.error as e: if e.errno in [errno.ECONNRESET, errno.ECONNREFUSED]: - if time() - start_time < docker_timeout: - sleep(0.1) - # and retry - else: - return { - "result": "uncaught_error", - "message": "Timeout waiting for container.", - "traceback": "".join(format_exc()), - } - else: - raise + ct_res = check_timeout() + if ct_res is not None: + return ct_res - except (http_client.BadStatusLine, InvalidPingResponse): - if time() - start_time < docker_timeout: - sleep(0.1) - # and retry else: - return { - "result": "uncaught_error", - "message": "Timeout waiting for container.", - "traceback": "".join(format_exc()), - } + raise # }}} -- GitLab