From de9e731b71a38ef2ddce9bc1e01a673dfc8e2585 Mon Sep 17 00:00:00 2001 From: Shivam Raj Date: Wed, 5 Mar 2025 19:51:35 +0530 Subject: [PATCH] Add version check for urllib3 in backoff calculation --- src/databricks/sql/auth/retry.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/databricks/sql/auth/retry.py b/src/databricks/sql/auth/retry.py index 1c6644ff..c471ca69 100755 --- a/src/databricks/sql/auth/retry.py +++ b/src/databricks/sql/auth/retry.py @@ -5,6 +5,8 @@ from enum import Enum from typing import List, Optional, Tuple, Union +import urllib3 + # We only use this import for type hinting try: # If urllib3~=2.0 is installed @@ -14,6 +16,8 @@ from urllib3 import HTTPResponse as BaseHTTPResponse from urllib3 import Retry from urllib3.util.retry import RequestHistory +from packaging import version + from databricks.sql.exc import ( CursorAlreadyClosedError, @@ -307,8 +311,9 @@ def get_backoff_time(self) -> float: current_attempt = self.stop_after_attempts_count - int(self.total or 0) proposed_backoff = (2**current_attempt) * self.delay_min - if self.backoff_jitter != 0.0: - proposed_backoff += random.random() * self.backoff_jitter + if version.parse(urllib3.__version__) >= version.parse("2.0.0"): + if self.backoff_jitter != 0.0: + proposed_backoff += random.random() * self.backoff_jitter proposed_backoff = min(proposed_backoff, self.delay_max) self.check_proposed_wait(proposed_backoff)