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