diff --git a/osc/connection.py b/osc/connection.py index 856804eb29..b4f3496fdd 100644 --- a/osc/connection.py +++ b/osc/connection.py @@ -141,12 +141,12 @@ def http_request_wrap_file(func): Turn file path into a file object and close it automatically by using a context manager. """ - def new_func(method, url, headers=None, data=None, file=None, retry_on_400: bool = True): + def new_func(method, url, headers=None, data=None, file=None): if file: with open(file, "rb") as f: - return func(method, url, headers, data, f, retry_on_400) + return func(method, url, headers, data, file=f) else: - return func(method, url, headers, data, file, retry_on_400) + return func(method, url, headers, data, file) new_func.__name__ = func.__name__ new_func.__doc__ = func.__doc__ @@ -154,7 +154,7 @@ def new_func(method, url, headers=None, data=None, file=None, retry_on_400: bool @http_request_wrap_file -def http_request(method: str, url: str, headers=None, data=None, file=None, retry_on_400: bool = True): +def http_request(method: str, url: str, headers=None, data=None, file=None): """ Send a HTTP request to a server. @@ -174,7 +174,6 @@ def http_request(method: str, url: str, headers=None, data=None, file=None, retr :param headers: Dictionary of custom headers to send. :param data: Data to send in the request body (conflicts with `file`). :param file: Path to a file to send as data in the request body (conflicts with `data`). - :param retry_on_400: Whether to retry on receiving HTTP status code 400. """ purl = urllib3.util.parse_url(url) @@ -234,22 +233,15 @@ def http_request(method: str, url: str, headers=None, data=None, file=None, retr else: retries_kwargs = {"method_whitelist": None} - - status_forcelist = ( - 500, # Internal Server Error - 502, # Bad Gateway - 503, # Service Unavailable - 504, # Gateway Timeout - ) - if retry_on_400: - status_forcelist = ( - 400, # Bad Request; retry on 400: service in progress - ) + status_forcelist - pool_kwargs["retries"] = urllib3.Retry( total=int(conf.config["http_retries"]), backoff_factor=2, - status_forcelist=status_forcelist, + status_forcelist=( + 500, # Internal Server Error + 502, # Bad Gateway + 503, # Service Unavailable + 504, # Gateway Timeout + ), # don't raise because we want an actual response rather than a MaxRetryError with "too many error responses" message raise_on_status=False, **retries_kwargs, diff --git a/osc/core.py b/osc/core.py index 2a5dff5c68..141de34897 100644 --- a/osc/core.py +++ b/osc/core.py @@ -5422,7 +5422,7 @@ def server_diff( query["file"] = UrlQueryArray(files) u = makeurl(apiurl, ['source', new_project, new_package], query=query) - f = http_POST(u, retry_on_400=False) + f = http_POST(u) if onlyissues and not xml: del_issue_list = [] add_issue_list = [] diff --git a/osc/util/models.py b/osc/util/models.py index 28b21ef171..0777b535d7 100644 --- a/osc/util/models.py +++ b/osc/util/models.py @@ -759,7 +759,7 @@ def xml_request(cls, method: str, apiurl: str, path: List[str], query: Optional[ from ..core import makeurl url = makeurl(apiurl, path, query) # TODO: catch HTTPError and return the wrapped response as XmlModel instance - return http_request(method, url, data=data, retry_on_400=False) + return http_request(method, url, data=data) def do_update(self, other: "XmlModel") -> None: """