Skip to content

Mark XRs not ready while waiting, and replicas until each object is - #467

Merged
negz merged 2 commits into
modelplaneai:mainfrom
negz:ready-or-not
Sep 30, 2026
Merged

negz merged 2 commits into
modelplaneai:mainfrom
negz:ready-or-not

Conversation

@negz

@negz negz commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

Description of your changes

Broken by #101, which marked a ModelReplica's non-workload Objects ready as soon as it observed them. #142 then gave the endpoint picker a readiness query that marking ignored.

compose-model-replica marked every composed Object other than its workloads ready once observed. That included one that failed to create, such as a picker Service the API server rejected for an invalid name, and the picker's Deployment before it was Available, though Envoy AI Gateway fails closed without a picker whatever the pool's failureMode says. Either way the replica reported Ready and compose-model-deployment put it into rotation. It now relays each Object's own Ready condition, as its readiness policy decides. Under SuccessfulCreate that catches an Object that never applied, but not a later update the API server rejects.

Separately, Crossplane counts an XR Ready when every composed resource is ready, so an XR with nothing composed is Ready. A ModelReplica waiting for its InferenceCluster, a ModelCache with no cluster to stage onto or waiting for its auth token, a ModelDeployment with no InferenceClusters, an InferenceCluster waiting for its InferenceClasses and a GKECluster waiting for its ProviderConfig all reported Ready=True beside a condition or event saying they were waiting. Each now marks itself not ready where it reports the wait.

On EKS, before the change, a ModelDeployment and a ModelCache that matched no cluster were Ready=True, and a replica whose picker Service had failed to create was Ready with a ModelEndpoint. After it, the first two were Ready=False, and with the picker's Deployment made unavailable the replica went Ready=False with Unready resources: epp and its ModelEndpoint was withdrawn, then both came back once the picker did.

I have:

  • Read and followed Modelplane's contribution process.
  • Run nix flake check (or ./nix.sh flake check) and made sure it passes.
  • Added or updated tests covering any composition function changes.
  • Signed off every commit with git commit -s.

Copilot AI balanced review requested due to automatic review settings September 26, 2026 01:07

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Copilot AI review requested due to automatic review settings September 26, 2026 02:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@negz negz changed the title Report XRs not ready while waiting, and gate replicas on their endpoint picker Report XRs not ready while they wait, and replicas until their objects apply Sep 26, 2026
compose-model-replica marked every composed Object other than its workloads
ready as soon as it was observed. That included one that had failed to
create, such as a picker Service rejected for an invalid name, and the
endpoint picker's Deployment before it was Available, though its Object has
a CEL readiness query for exactly that and Envoy AI Gateway fails closed
without a picker. Either way the replica reported Ready and
compose-model-deployment put it into rotation.

This relays each Object's own Ready condition instead, as its readiness
policy decides.

Signed-off-by: Nic Cope <nicc@rk0n.org>
Crossplane counts an XR ready when every resource composed for it is ready,
so one with nothing composed, or only resources marked ready, reports Ready.
A ModelReplica waiting for its InferenceCluster, a ModelCache with no
cluster to stage onto or waiting for its auth token, a ModelDeployment with
no InferenceClusters, an InferenceCluster waiting for its InferenceClasses
and a GKECluster waiting for its ProviderConfig all reported Ready while
saying they were waiting.

Signed-off-by: Nic Cope <nicc@rk0n.org>
Copilot AI review requested due to automatic review settings September 26, 2026 02:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@negz negz changed the title Report XRs not ready while they wait, and replicas until their objects apply Report XRs not ready while they wait, and replicas until their objects are Sep 26, 2026
@negz negz changed the title Report XRs not ready while they wait, and replicas until their objects are Mark XRs not ready while waiting, and replicas until each object is Sep 26, 2026
@negz
negz merged commit e74545e into modelplaneai:main Sep 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants