Skip to content

Readiness asserts the load-bearing informers per probe - #45

Merged
glenmessenger merged 2 commits into
mainfrom
fix/readyz-informer-probe
Aug 20, 2026
Merged

glenmessenger merged 2 commits into
mainfrom
fix/readyz-informer-probe

Conversation

@glenmessenger

Copy link
Copy Markdown
Collaborator

rc.2's boundary rerun defeated the Runnable-based fix from #44: plain runnables and controllers start in the same late group, and the informers are created by the controllers — so the channel closed before the v1beta1 informers existed, reproducing the false-Ready window (pod went Ready, rollout completed, then decayed to NotReady/restarts exactly like rc.1).

This fix has no ordering assumptions to violate: every readyz probe asks mgr.GetCache().GetInformer() for the v1beta1 AIBOM and AIBOMControllerConfig informers and checks HasSynced() — failing while the cache is unstarted, while informers haven't synced, and (the stranded-CRD case) while the API server cannot serve the requested version at all. Ready means "this pod can genuinely observe its own APIs," evaluated fresh at every probe.

Full suite green. Changelog's 1.3.0 entry updated to describe both defeated implementations honestly. Next: rc.3 and the boundary rerun — third time against a check that finally has no seams.

The Runnable-derived signal was defeated by the same ordering class it
replaced: controllers create their informers after plain runnables
start, so the channel closed before the v1beta1 informers existed.
Every readyz evaluation now asks the cache for the AIBOM and
AIBOMControllerConfig informers (v1beta1) and their sync state directly
— failing while the cache is unstarted or the API server cannot serve
those versions. No ordering assumptions left to violate.
@glenmessenger
glenmessenger merged commit 1b0ea12 into main Aug 20, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant