Skip to content

Readiness design: should /_/ready avoid a live ListBuckets so it survives a sustained backend-throttle tail? #78

Description

@ton77v

Following up on #62 (the retry/timeout fix you shipped in v1.14.1 — thank you, it lands the common case cleanly). This is a design question about the sustained-throttle tail, framed against DGP's own readiness-signal goals — your call on the trade-off, not a request for a specific change.

Observation

/_/ready performs a live ListBuckets against the object backend on every probe. When our storage provider (Hetzner hel1) throttles or has a long latency tail, that list 503s ("Backend throttled") and readiness flips to a paging 503 — even though the data plane keeps serving normally (only the probe fails; zero customer-facing impact both times).

We've now hit this twice:

  • 2026-07-10hel1 degradation, /_/ready 503s at the list timeout, data plane unaffected.
  • 2026-07-26 — recurrence, same signature ("Backend throttled" on the list call).

v1.14.1's retry (DGP_READY_RETRIES) + tunable timeout (DGP_READY_TIMEOUT_SECS) absorb a short throttle well. The open question is the sustained case: retry rides out a blip, but a multi-minute provider degradation still flips readiness, because the readiness signal is structurally coupled to a heavyweight, throttle-prone ListBuckets.

The question

Is a live ListBuckets the right primitive for readiness under provider stress, or would something lighter reflect "can we serve?" more faithfully without being hostage to list-throttling — e.g.:

  • a cheaper probe like HeadBucket, or
  • a short-TTL cached last-known-good, so a transient/sustained list-throttle doesn't immediately downgrade readiness while the data plane is demonstrably fine?

The trade-off (readiness freshness vs. resilience to provider list-throttling) is yours to weigh — you know the readiness contract's intent better than we do. Retry (#62) may well be judged sufficient; if so, a "won't change, retry is the answer" is a perfectly good outcome for us to document.

Evidence available

Happy to share the two incident write-ups (503-at-list-timeout signature + "Backend throttled" backend logs) if useful as input.

🦀 sent by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions