Skip to content

Commit 42a1b0a

Browse files
committed
Added the exponential backoff code
1 parent ecdddba commit 42a1b0a

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

src/databricks/sql/auth/retry.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,27 @@ def sleep_for_retry(self, response: BaseHTTPResponse) -> bool:
285285
"""
286286
retry_after = self.get_retry_after(response)
287287
if retry_after:
288-
backoff = self.get_backoff_time()
288+
backoff = self.get_exponential_backoff()
289289
proposed_wait = max(backoff, retry_after)
290290
self.check_proposed_wait(proposed_wait)
291291
time.sleep(proposed_wait)
292292
return True
293293

294294
return False
295295

296+
def get_exponential_backoff(self) -> float:
297+
"""
298+
This method implements the exponential backoff algorithm to calculate the delay between retries.
299+
:return:
300+
"""
301+
302+
current_attempt = self.stop_after_attempts_count - self.total
303+
proposed_backoff = (2**current_attempt) * self.delay_min
304+
proposed_backoff = min(proposed_backoff, self.delay_max)
305+
self.check_proposed_wait(proposed_backoff)
306+
307+
return proposed_backoff
308+
296309
def get_backoff_time(self) -> float:
297310
"""Calls urllib3's built-in get_backoff_time.
298311

src/databricks/sql/thrift_backend.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@
6464
# - 900s attempts-duration lines up w ODBC/JDBC drivers (for cluster startup > 10 mins)
6565
_retry_policy = { # (type, default, min, max)
6666
"_retry_delay_min": (float, 1, 0.1, 60),
67-
"_retry_delay_max": (float, 60, 5, 3600),
68-
"_retry_stop_after_attempts_count": (int, 30, 1, 60),
67+
"_retry_delay_max": (float, 30, 5, 3600),
68+
"_retry_stop_after_attempts_count": (int, 5, 1, 60),
6969
"_retry_stop_after_attempts_duration": (float, 900, 1, 86400),
7070
"_retry_delay_default": (float, 5, 1, 60),
7171
}

0 commit comments

Comments
 (0)