From dc86cf8c5efef718ce642e18608943e9e1f4b077 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Tue, 17 Dec 2024 13:16:00 -0800 Subject: [PATCH 1/4] Make Echidna status checking tolerate transient failure It often happens that checking the Echinda status too quickly after request upload results in failure (to get the validation results), but checking it shortly after that would result in success. So, make the status-check script retry a couple of times on failure. --- document/util/check-echidna-status.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/document/util/check-echidna-status.py b/document/util/check-echidna-status.py index 9bc3f6026c..0af5a435de 100755 --- a/document/util/check-echidna-status.py +++ b/document/util/check-echidna-status.py @@ -23,13 +23,20 @@ def get_echidna_id(directory): def get_current_response(echidna_id): url = ECHIDNA_STATUS_URL + echidna_id print(f'Fetching {url}') - response = requests.get(url, allow_redirects=True) - if response.status_code != 200: + retry = 2 + while retry: + response = requests.get(url, allow_redirects=True) + if response.status_code == 200: + return response.json() + print(f'Got status code {response.status_code}, text:') - print(response.text) - raise Exception('Failed to fetch echidna result') + retry -= 1 + if retry: + print('Retrying in 5s') + + print(response.text) + raise Exception('Failed to fetch echidna result') - return response.json() def get_echidna_result(echidna_id): From 237f0d37904164ee3c005789add9b629f924ebc7 Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Tue, 17 Dec 2024 13:27:15 -0800 Subject: [PATCH 2/4] always print text --- document/util/check-echidna-status.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/document/util/check-echidna-status.py b/document/util/check-echidna-status.py index 0af5a435de..9715f72e8e 100755 --- a/document/util/check-echidna-status.py +++ b/document/util/check-echidna-status.py @@ -30,11 +30,12 @@ def get_current_response(echidna_id): return response.json() print(f'Got status code {response.status_code}, text:') + print(response.text) retry -= 1 if retry: print('Retrying in 5s') - print(response.text) + raise Exception('Failed to fetch echidna result') From 454aadb246a3286022b01336468f67e14eb667fc Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Wed, 18 Dec 2024 08:06:15 -0800 Subject: [PATCH 3/4] actually sleep --- document/util/check-echidna-status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/document/util/check-echidna-status.py b/document/util/check-echidna-status.py index 9715f72e8e..80acba834e 100755 --- a/document/util/check-echidna-status.py +++ b/document/util/check-echidna-status.py @@ -34,7 +34,7 @@ def get_current_response(echidna_id): retry -= 1 if retry: print('Retrying in 5s') - + time.sleep(5) raise Exception('Failed to fetch echidna result') From bb499d30cbc31fdf4a61623866b5fbc497a159ee Mon Sep 17 00:00:00 2001 From: Derek Schuff Date: Wed, 18 Dec 2024 08:23:28 -0800 Subject: [PATCH 4/4] Try 3 times instead of 2, handle failure more consistently --- document/util/check-echidna-status.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/document/util/check-echidna-status.py b/document/util/check-echidna-status.py index 80acba834e..1f0e0f32f9 100755 --- a/document/util/check-echidna-status.py +++ b/document/util/check-echidna-status.py @@ -23,16 +23,16 @@ def get_echidna_id(directory): def get_current_response(echidna_id): url = ECHIDNA_STATUS_URL + echidna_id print(f'Fetching {url}') - retry = 2 - while retry: + tries = 3 + while tries: response = requests.get(url, allow_redirects=True) if response.status_code == 200: return response.json() print(f'Got status code {response.status_code}, text:') print(response.text) - retry -= 1 - if retry: + tries -= 1 + if tries: print('Retrying in 5s') time.sleep(5) @@ -50,7 +50,8 @@ def get_echidna_result(echidna_id): result = response['results']['status'] print(f'Echidna issue {echidna_id} is {result}.') print(json.dumps(response, indent=2)) - return result == 'success' + if result != 'success': + raise Exception(f'Echidna result: {result}') def main(argv): @@ -58,7 +59,10 @@ def main(argv): echidna_id = get_echidna_id(directory) print(f'Got echidna id {echidna_id}.') time.sleep(5) - if not get_echidna_result(echidna_id): + try: + get_echidna_result(echidna_id) + except Exception as e: + print(f'Echidna failure: {e}') sys.exit(1)