oci: type the manifest 404 as snapshot.ErrManifestNotFound - #13
Merged
Conversation
GetManifest callers that need fail-closed semantics (vk-cocoon's hibernate-evidence check) currently pay a HasManifest HEAD before every GET purely to distinguish clean absence from transport failure. The 404 now maps to a contract-level sentinel on the Downloader interface, so one GET answers both questions; ignoreNotFound shares the detection.
CMGS
added a commit
to cocoonstack/vk-cocoon
that referenced
this pull request
Jul 28, 2026
cocoon-common's typed manifest 404 (cocoonstack/cocoon-common#13) lands via the pseudo-version bump, so fetchHibernateManifest drops its HasManifest HEAD: absence comes back as ErrManifestNotFound, every other error keeps failing closed. One registry round trip per wake and per create-time evidence check instead of two.
CMGS
added a commit
to cocoonstack/vk-cocoon
that referenced
this pull request
Jul 28, 2026
…and status reconcile (#57) * stats: shared scrape sample; startup: parallel probe starts and status reconcile Follow-ups from the whole-repo efficiency audit. The three scrape consumers (stats summary, metrics resource, Prometheus collector) each paid their own /proc+statfs sweep per VM; they now share one 2s-TTL sample, and CPU+RSS come from a single /proc/<pid>/stat read (RSS field 24 replaces the separate status VmRSS read — same resident-set definition). StartupReconcile's adopted-pod probe starts move to a bounded fan-out: each first probe is synchronous with a 3s worst case and the loop gates node registration. reconcilePodStatuses gets the same bounded fan-out; the three reconcile paths share reconcileFanOut. * registry: one GET decides hibernate evidence cocoon-common's typed manifest 404 (cocoonstack/cocoon-common#13) lands via the pseudo-version bump, so fetchHibernateManifest drops its HasManifest HEAD: absence comes back as ErrManifestNotFound, every other error keeps failing closed. One registry round trip per wake and per create-time evidence check instead of two. * review: whole-repo round on the efficiency PR fanOut collapses the two policy-identical bounded fan-outs (probe starts inline at the call site, status reconcile's closure drops its error ceremony); the shared constant splits by lifecycle into startupFanOut and statusReconcileFanOut so steady-state apiserver concurrency tunes independently of the boot gate; buildNetworkStats drops the disjunct the upstream sample already implies; narration trimmed from the sample/parse/evidence comments. Skipped as adjudicated: Manager.StartBatch (single-consumer API), a lazily-split sample cache (codex round-1 rebuttal), a generic TTL-cache type (one instantiation). * docs: describe shared metrics sampling
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GetManifestcallers needing fail-closed semantics (vk-cocoon's hibernate-evidence check, cocoonstack/vk-cocoon#54 follow-up) currently pay aHasManifestHEAD before every GET purely to distinguish clean absence from transport failure. This maps the registry 404 to a contract-level sentinel —snapshot.ErrManifestNotFoundon theDownloaderinterface — so a single GET answers both questions;ignoreNotFoundshares the same detection via the extractedisNotFound.Additive: existing callers that treat any
GetManifesterror as fall-through (e.g. vk'sresolveRunImage) are unaffected; no caller string-matches these errors (checked across the workspace).go test -race ./...green.make lintfails on main already (apis/v1deprecatedscheme.Builder, staticcheck SA1019) — pre-existing, untouched by this PR.