Skip to content

Commit d79414c

Browse files
author
peco-engineer-bot[bot]
committed
Retry: sleep_for_retry uses max(wait, delay_max) — inflates small Retry-After to delay_max (60s floor) (#860)
Signed-off-by: peco-engineer-bot[bot] <3815206+peco-engineer-bot[bot]@users.noreply.github.com>
1 parent 6d1e842 commit d79414c

2 files changed

Lines changed: 17 additions & 11 deletions

File tree

src/databricks/sql/auth/retry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def sleep_for_retry(self, response: BaseHTTPResponse) -> bool:
297297
else:
298298
proposed_wait = self.get_backoff_time()
299299

300-
proposed_wait = max(proposed_wait, self.delay_max)
300+
proposed_wait = min(proposed_wait, self.delay_max)
301301
self.check_proposed_wait(proposed_wait)
302302
logger.debug(f"Retrying after {proposed_wait} seconds")
303303
time.sleep(proposed_wait)

tests/unit/test_retry.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,23 @@ def test_sleep__no_retry_after(self, t_mock, retry_policy, error_history):
3939
retry_policy.history = [error_history, error_history]
4040
retry_policy.sleep(HTTPResponse(status=503))
4141

42-
expected_backoff_time = max(
43-
self.calculate_backoff_time(
44-
0, retry_policy.delay_min, retry_policy.delay_max
45-
),
46-
retry_policy.delay_max,
42+
expected_backoff_time = self.calculate_backoff_time(
43+
0, retry_policy.delay_min, retry_policy.delay_max
4744
)
4845
t_mock.assert_called_with(expected_backoff_time)
4946

47+
@patch("time.sleep")
48+
def test_sleep__retry_after_header_honored_not_inflated(
49+
self, t_mock, retry_policy, error_history
50+
):
51+
# A small server Retry-After must be honored as-is (capped at delay_max),
52+
# not inflated up to delay_max.
53+
retry_policy._retry_start_time = time.time()
54+
retry_policy.history = [error_history, error_history]
55+
retry_policy.sleep(HTTPResponse(status=503, headers={"Retry-After": "2"}))
56+
57+
t_mock.assert_called_with(2)
58+
5059
@patch("time.sleep")
5160
def test_sleep__no_retry_after_header__multiple_retries(self, t_mock, retry_policy):
5261
num_attempts = retry_policy.stop_after_attempts_count
@@ -62,11 +71,8 @@ def test_sleep__no_retry_after_header__multiple_retries(self, t_mock, retry_poli
6271
expected_backoff_times = []
6372
for attempt in range(num_attempts):
6473
expected_backoff_times.append(
65-
max(
66-
self.calculate_backoff_time(
67-
attempt, retry_policy.delay_min, retry_policy.delay_max
68-
),
69-
retry_policy.delay_max,
74+
self.calculate_backoff_time(
75+
attempt, retry_policy.delay_min, retry_policy.delay_max
7076
)
7177
)
7278

0 commit comments

Comments
 (0)