Skip to content

Commit 7f063fd

Browse files
committed
Retry failed precondition sandbox registrations
1 parent b4e5c33 commit 7f063fd

2 files changed

Lines changed: 6 additions & 5 deletions

File tree

durabletask-azuremanaged/durabletask/azuremanaged/preview/sandboxes/worker.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,15 @@ def _resolve_dts_sandbox_identifier() -> str:
243243
_RETRIABLE_REGISTRATION_STATUS_CODES = {
244244
grpc.StatusCode.CANCELLED,
245245
grpc.StatusCode.DEADLINE_EXCEEDED,
246+
grpc.StatusCode.FAILED_PRECONDITION,
246247
grpc.StatusCode.INTERNAL,
247248
grpc.StatusCode.RESOURCE_EXHAUSTED,
248249
grpc.StatusCode.UNAVAILABLE,
249250
grpc.StatusCode.UNKNOWN,
250251
}
251252

252-
# TODO: Selectively retry FAILED_PRECONDITION only after sandbox worker
253-
# registration exposes structured, machine-readable transient reasons.
253+
# TODO: Stop retrying permanent FAILED_PRECONDITION responses once sandbox
254+
# worker registration exposes structured, machine-readable failure reasons.
254255

255256

256257
def _is_retriable_registration_failure(ex: Exception) -> bool:

tests/durabletask-azuremanaged/test_sandboxes_extension.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -755,14 +755,14 @@ def RemoteHello(_ctx, value):
755755
assert start.start.sandbox_provider == pb.SANDBOX_PROVIDER_KIND_UNSPECIFIED
756756

757757

758-
def test_sandbox_registration_does_not_retry_failed_precondition_without_structured_reasons() -> None:
758+
def test_sandbox_registration_retries_failed_precondition_until_structured_reasons() -> None:
759759
assert sandbox_worker._is_retriable_registration_failure(
760760
_FakeRpcError(grpc.StatusCode.UNAVAILABLE))
761-
assert not sandbox_worker._is_retriable_registration_failure(
761+
assert sandbox_worker._is_retriable_registration_failure(
762762
_FakeRpcError(grpc.StatusCode.FAILED_PRECONDITION, "sandbox not ready"))
763763
assert not sandbox_worker._is_retriable_registration_failure(
764764
_FakeRpcError(grpc.StatusCode.INVALID_ARGUMENT))
765-
assert not sandbox_worker._is_retriable_registration_failure(
765+
assert sandbox_worker._is_retriable_registration_failure(
766766
_FakeRpcError(grpc.StatusCode.FAILED_PRECONDITION, "worker profile does not match"))
767767

768768

0 commit comments

Comments
 (0)