CCL-2423 | Name the cause behind a node's not-ready condition - #476
Merged
fabribet merged 4 commits intoSep 11, 2026
Merged
Conversation
|
PR Packages Published Python Package:
NPM Package:
|
|
The latest Buf updates on your PR. Results from workflow Pull Request / linting (pull_request).
|
|
The latest Buf updates on your PR. Results from workflow Pull Request / linting (pull_request).
|
This reverts commit bf977f6.
fabribet
marked this pull request as ready for review
September 3, 2026 15:24
asadrizv
approved these changes
Sep 3, 2026
…-schema Resolve conflicts in cluster.proto: keep the node-downtime refactor (the reason/reason_message tier, the deprecation of event/event_message and the CLUSTER_NODE_ACTION_KIND_VIEW_LOGS action) and layer on the OUTPUT_ONLY field behaviors main added in #487, including on the two new fields. Generated bindings regenerated with `make generate`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
syndbg
approved these changes
Sep 11, 2026
fabribet
deleted the
bug/fabribet/CCL-2423-refactor-node-downtime-schema
branch
September 11, 2026 15:48
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.
What changed
ClusterNodeNotReadyInfonow explains a not-ready node in two tiers.conditionstill says what is wrong with the node; a newClusterNodeNotReadyReasonenum says why, withreason_messagecarrying the sentence to render.ClusterNodeActionKindalso gainsVIEW_LOGS, for causes that only show up in the database's own output.event,event_messageandClusterNodeTerminationEventare deprecated rather than removed, so this release is additive andbuf breakingreports nothing. They are superseded by the reason tier and come out in a follow-up, once nothing writes them.What the old schema could not do, for a node whose image cannot be pulled:
Before
After
The mapping is the part worth checking.
VOLUME_UNAVAILABLEis the one reason reported under two conditions, and which one you get is decided by the storage class's binding mode rather than by the underlying problem:CLUSTER_NODE_NOT_READY_REASON_)CLUSTER_NODE_NOT_READY_CONDITION_)INSUFFICIENT_RESOURCESPOD_SCHEDULING_ERRORNODE_CONSTRAINTS_UNSATISFIEDPOD_SCHEDULING_ERRORVOLUME_UNAVAILABLEPOD_SCHEDULING_ERROR,CONTAINER_START_BLOCKEDIMAGE_UNAVAILABLECONTAINER_START_BLOCKEDCONFIGURATION_MISSINGCONTAINER_START_BLOCKEDOUT_OF_MEMORYCONTAINER_RESTARTINGPROCESS_EXITEDCONTAINER_RESTARTINGWhy
The condition/event pair from #442 could name only two causes, both of them terminations, and only under
CONTAINER_RESTARTING. Building the producer side found the gap. A pod that will not schedule, an image that will not pull, a missing secret: the user got a condition and no cause at all. Splitting the explanation gives the causes a tier of their own, one that grows as more become recognizable without disturbing the conditions. It also lets a single cause be reported under whichever condition it surfaces in.Notes
cluster-apionmainimportsClusterNodeTerminationEventat module scope ingrpc_api/cluster/v1/not_ready_mapper.py, so a release without that enum turns any bump of the dependency into anImportErrorin a module on theGetClusterandListClusterspath. Bumps there are routine and unrelated to this work, so whoever hit it would be someone who never touched node status, in a file they had no reason to be reading. Keeping the fields for one release decouples the proto release from the cluster-api adoption.reasonand nothing readsevent. That one is breaking, will need thebuf skip breakinglabel, and should say so in its release notes.buf breakingreports nothing againstmain: the change is additive, so no label is needed here.mainis the deprecation. Reviewing the diff rather than the commits is the shorter path.reasontakes 6 andreason_message7 rather than reusing 3 and 4, which also lets the eventual removal reserve those numbers without disturbing anything.CLUSTER_NODE_NOT_READY_CONDITION_UNKNOWNis documented as not emitted. Where the node status does not say what is wrong,not_ready_infostays unset rather than carrying a placeholder.DOCUMENTATIONaction was never guaranteed and now says so; it is attached only where a page exists for the specific cause.buf generateoutput. Review the proto.reasonhappens in cluster-api, which needs this merged and released first.