From 0fd6b22f75794292640e9781d4e60ee3e6501f3d Mon Sep 17 00:00:00 2001 From: Nathan Gillett Date: Thu, 10 Jul 2025 12:25:26 -0500 Subject: [PATCH] Add retry backoff max and jitter settings [RHELDST-32465] Previously these paramters used for urllib3's Retry were unset. Backoff max defaulted to 120, which was too low for Akamai's strict rate limiting. Jitter was also added to better spread requests, improve system stability. --- fastpurge/_client.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fastpurge/_client.py b/fastpurge/_client.py index ab06e10..5ffa8b5 100644 --- a/fastpurge/_client.py +++ b/fastpurge/_client.py @@ -106,6 +106,9 @@ class FastPurgeClient(object): MAX_RETRIES = int(os.environ.get("FAST_PURGE_MAX_RETRIES", "10")) RETRY_BACKOFF = float(os.environ.get("FAST_PURGE_RETRY_BACKOFF", "0.15")) + RETRY_BACKOFF_MAX = float(os.environ.get("FAST_PURGE_RETRY_BACKOFF_MAX", "150")) + RETRY_BACKOFF_JITTER = float(os.environ.get("FAST_PURGE_RETRY_JITTER", "2")) + # Default purge type. # Akamai recommend "invalidate", so why is "delete" our default? # Here's what Akamai docs have to say: @@ -235,6 +238,8 @@ def __retry_policy(self): retries = LoggingRetry( total=self.MAX_RETRIES, backoff_factor=self.RETRY_BACKOFF, + backoff_max=self.RETRY_BACKOFF_MAX, + backoff_jitter=self.RETRY_BACKOFF_JITTER, # We strictly require 201 here since that's how the server # tells us we queued something async, as expected status_forcelist=[status.value for status in HTTPStatus