fix(registry): give storage readiness a measured timeout #2121
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/zot-readiness-margin"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up to today's zot-v2 storage migration. Zot recovered on its own and is healthy now — this PR fixes the two durable defects the outage exposed. No imperative cluster changes were made.
What happened (verified, not inferred)
The migration was hard-down 13:43:10–13:50:31 UTC and flapping until ~14:00. Two causes:
PruneLast=trueand thezot→zot-v2rename merged in one commit. ArgoCD history shows the parent (pipelines-argocd) and child (registry) apps both started syncing554f5cefat 13:42:52Z — the same second. The child cut its sync operation from its pre-PruneLastspec, prunedStatefulSet/zotat 13:43:08, andzot-v2(empty PVC → full S3 index rebuild, 7m21s) could not serve until 13:50:31. The doc's stated safety property — "the old pod continues to serve traffic" — never applied./v2/_catalog?n=1measured 0.94–5.35s. WithfailureThreshold: 3, three unlucky reads pull the endpoint of a perfectly alive registry. This flapped during the rebuild and will recur under load.The fix
timeoutSeconds: 5→10on the catalog readiness probe. The catalog path stays —/readyzproves only the process, and the migration gate needs the storage-backed signal. The 5s value was the same-day reviewed number; this supersedes it with measured data, and the test contract's assertion carries the measurements.docs/REGISTRY-AVAILABILITY.mdgains a Gate ordering rule section with the timeline evidence and the durable lesson: merge an Application-spec gate one step before the bundle change it gates, confirm it on the live Application, then merge the change. A same-commit gate races the child's automated sync in a two-level app-of-apps. The ordering spans two merges, so it is documented rather than statically asserted.Deploy note
The probe change edits the pod template, so deploying this restarts the singleton once — one bounded index-rescan window (~5 min live, within the 900s startup budget). Pick the moment; do not deploy mid-kernel-roll. If #2119 (zot UI OIDC) merges around the same time, batching them costs one restart instead of two.
Testing
tests/zot-binjovi-publisher.shcontract updated first (red against the unmodified manifest, green here); fulltests/check.sh142/142, 0 skipped.https://claude.ai/code/session_019JVStQiFwbSLGHArU2sA4X
sean referenced this pull request2026-08-31 14:46:12 +00:00
aeb36f799beccea8e468