Skip to content

Commit 6d7b118

Browse files
authored
Bug: Too many requests error missed retry (#279)
1 parent 620b55f commit 6d7b118

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

tosfs/retry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,10 @@ def _get_sleep_time(err: TosError, retry_count: int) -> float:
164164
err.status_code == TOO_MANY_REQUESTS_CODE
165165
or err.status_code == SERVICE_UNAVAILABLE
166166
)
167-
and "retry-after" in err.headers
167+
and "retry-after" in err.header
168168
):
169169
try:
170-
sleep_time = max(int(err.headers["retry-after"]), int(sleep_time))
170+
sleep_time = max(int(err.header["retry-after"]), int(sleep_time))
171171
except Exception as e:
172172
from tosfs.core import logger
173173

tosfs/tests/test_retry.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from tos.http import Response
2121
from urllib3.exceptions import ProtocolError
2222

23-
from tosfs.retry import is_retryable_exception
23+
from tosfs.retry import _get_sleep_time, is_retryable_exception
2424

2525
mock_resp = Mock(spec=requests.Response)
2626

@@ -86,3 +86,38 @@ def test_is_retry_exception(
8686
expected,
8787
):
8888
assert is_retryable_exception(exception) == expected
89+
90+
91+
def test_get_sleep_time():
92+
mock_resp = Mock(spec=requests.Response)
93+
94+
sleep_time = 1000
95+
96+
mock_resp.status_code = 429
97+
mock_resp.headers = {
98+
"Content-Type": "application/json",
99+
"Date": "Thu, 07 Nov 2024 17:19:56 GMT",
100+
"Retry-After": str(sleep_time),
101+
"Server": "TosServer",
102+
"x-tos-ec": "0004-00000007",
103+
"x-tos-id-2": "0000-00000-0000",
104+
"x-tos-request-id": "0000-0000-0000",
105+
"x-tos-server-time": "1",
106+
"Content-Length": "277",
107+
}
108+
mock_resp.iter_content = Mock(return_value=[b"chunk1", b"chunk2", b"chunk3"])
109+
mock_resp.json = Mock(return_value={"key": "value"})
110+
111+
response = Response(mock_resp)
112+
113+
err = TosServerError(
114+
response,
115+
"Exceed account external rate limit. Too much throughput in a "
116+
"short period of time, please slow down.",
117+
"ExceedAccountExternalRateLimit",
118+
"KmsJSKDKhjasdlKmsduwRETYHB",
119+
"",
120+
"0004-00000001",
121+
)
122+
123+
assert _get_sleep_time(err, 1) == sleep_time

0 commit comments

Comments
 (0)