From 08512e0dd6d82d54e31557a02834a53486d28200 Mon Sep 17 00:00:00 2001 From: godog <godog@autistici.org> Date: Mon, 24 May 2021 20:56:47 +0200 Subject: [PATCH] Use 'retrying' for backoff For consistency with ai-scripts, where we moved to 'retrying' since it has Debian packages. --- ai_web_common/rpc/core.py | 19 +++++++++++-------- setup.py | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/ai_web_common/rpc/core.py b/ai_web_common/rpc/core.py index b4719e6..cc2c85c 100644 --- a/ai_web_common/rpc/core.py +++ b/ai_web_common/rpc/core.py @@ -1,4 +1,4 @@ -import backoff +from retrying import retry import codecs import json import random @@ -149,6 +149,12 @@ def _json_response_decoder(resp): return json.load(reader(resp)) +def _should_retry_request(exception): + return exception.__class__ in ( + urllib3.exceptions.HTTPError, + RetriableStatusError) + + class ClientStub(): """Client stub for JSON/RPC services.""" @@ -196,13 +202,10 @@ class ClientStub(): else: setattr(self, method, self._method(url)) - @backoff.on_exception(backoff.expo, - (urllib3.exceptions.HTTPError, - RetriableStatusError), - base=1.4142, - factor=0.1, - max_value=DEFAULT_MAX_BACKOFF_INTERVAL, - max_time=DEFAULT_MAX_TIMEOUT) + @retry(retry_on_exception=_should_retry_request, + wait_exponential_multiplier=100, + wait_exponential_max=DEFAULT_MAX_BACKOFF_INTERVAL * 1000, + stop_max_delay=DEFAULT_MAX_TIMEOUT * 1000) def _do_single_request(self, parsed_url, targets, request_data, headers, response_decoder, deadline): """Issue a request, retry on temporary errors. diff --git a/setup.py b/setup.py index 900569f..4faf69e 100755 --- a/setup.py +++ b/setup.py @@ -11,13 +11,13 @@ setup( author_email="info@autistici.org", url="https://git.autistici.org/ai3/tools/python-web-common", install_requires=[ - "backoff", "Flask", "flask-talisman", "opencensus", - "opencensus-ext-zipkin", "opencensus-ext-flask", "opencensus-ext-requests", + "opencensus-ext-zipkin", + "retrying", "sso", "urllib3", "whitenoise", -- GitLab