From b76904c0e683b01162b92543f3696dee4cdf87bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 29 Aug 2024 15:23:30 +0200 Subject: [PATCH] Add retry if HTTP error 502 (bad gateway) This is most likely caused by nginx is up but rousette is not fully started yet. --- test/infamy/restconf.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/test/infamy/restconf.py b/test/infamy/restconf.py index 273aa3eb..162c5a46 100644 --- a/test/infamy/restconf.py +++ b/test/infamy/restconf.py @@ -6,6 +6,7 @@ import sys import libyang import re import urllib.parse +import time from requests.auth import HTTPBasicAuth from urllib.parse import quote @@ -45,7 +46,7 @@ def xpath_to_uri(xpath, extra=None): return uri_path # Workaround for bug in requests 2.32.x: https://github.com/psf/requests/issues/6735 -def requests_workaround(method, url, json, headers, auth, verify=False): +def requests_workaround(method, url, json, headers, auth, verify=False, retry=0): # Create a session session=requests.Session() @@ -53,7 +54,19 @@ def requests_workaround(method, url, json, headers, auth, verify=False): request=requests.Request(method, url, json=json, headers=headers, auth=auth) prepared_request=session.prepare_request(request) prepared_request.url=prepared_request.url.replace('%25', '%') - return session.send(prepared_request, verify=verify) + response=session.send(prepared_request, verify=verify) + try: + response.raise_for_status() # Raise an exception for HTTP errors + except Exception as e: + if e.response.status_code == 502 and retry < 10: # most likely caused by nginx up, but not yet rousette + retry=retry+1 + print(f"{method} {url}: HTTP error 502, retrying({retry})") + time.sleep(1) + response=requests_workaround(method, url, json, headers, auth, verify, retry) + else: + raise e + + return response def requests_workaround_put(url, json, headers, auth, verify=False): return requests_workaround('PUT', url, json, headers, auth, verify=False)