From e4638ea5e12ecc516072b993b18fb745265c3d80 Mon Sep 17 00:00:00 2001 From: Ted Kim Date: Sat, 14 Nov 2026 14:23:22 -0500 Subject: [PATCH] fix(transport): preserve retry delay on service unavailable responses --- src/volcano_sdk/_tests/test_errors.py | 2 +- src/volcano_sdk/_transport_response.py | 3 ++- src/volcano_sdk/_transport_types.py | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/volcano_sdk/_tests/test_errors.py b/src/volcano_sdk/_tests/test_errors.py index cdb1062e..c8c11de6 100644 --- a/src/volcano_sdk/_tests/test_errors.py +++ b/src/volcano_sdk/_tests/test_errors.py @@ -75,7 +75,7 @@ def handle(request: httpx.Request) -> httpx.Response: assert type(caught.value) is expected assert caught.value.status == status assert caught.value.code == "contract_code" - assert caught.value.retry_after == (17 if status == 429 else None) + assert caught.value.retry_after == (17 if status in {429, 503} else None) assert len(requests) == 1 assert requests[0].method == "POST" assert requests[0].url == "https://api.test.volcano.dev/auth/signin" diff --git a/src/volcano_sdk/_transport_response.py b/src/volcano_sdk/_transport_response.py index 5cac9cfa..7b1f5a23 100644 --- a/src/volcano_sdk/_transport_response.py +++ b/src/volcano_sdk/_transport_response.py @@ -17,6 +17,7 @@ HTTP_RATE_LIMITED, HTTP_SERVER_ERROR_MAX, HTTP_SERVER_ERROR_MIN, + HTTP_SERVICE_UNAVAILABLE, RETRY_AFTER_HEADER, GeneratedTransportResponse, JSONResponse, @@ -189,7 +190,7 @@ def response_payload(response: TransportResponse, expected_status: int) -> objec code_value = payload.get("code") code = str(code_value) if code_value is not None else None retry_after = None - if status == HTTP_RATE_LIMITED: + if status in {HTTP_RATE_LIMITED, HTTP_SERVICE_UNAVAILABLE}: retry_after_value = header(response.headers, RETRY_AFTER_HEADER) try: retry_after = ( diff --git a/src/volcano_sdk/_transport_types.py b/src/volcano_sdk/_transport_types.py index 0f673c08..e8980fd8 100644 --- a/src/volcano_sdk/_transport_types.py +++ b/src/volcano_sdk/_transport_types.py @@ -65,6 +65,7 @@ HTTP_RATE_LIMITED = 429 +HTTP_SERVICE_UNAVAILABLE = 503 HTTP_OK = 200