Repository navigation
fix(inferences): stop showing a healthy scaler as failing - #101
Conversation
The scaling step treated every LLMScaler condition with status False as a failure. ScalingDeferred is inverted: llm-operator sets it True while a rollout or scale-down settle guard holds a step back, and False otherwise (NotDeferred, or DeferralTimedOut after a forced write). Every healthy scaler therefore showed "NotDeferred" in red. - ScalingDeferred=False no longer counts as failing - ScalingDeferred=True shows as waiting, with its reason - any other condition at False (DecisionAvailable) still fails the step Fixes #100
huskcass
left a comment
There was a problem hiding this comment.
No blockers. The fix matches llm-operator's ScalingDeferred semantics (True while a rollout or settle guard holds a step back, False otherwise), and the three new tests pin the split. vitest for src/modules/inferences and typecheck pass locally.
Low, non-blocking:
- The check is still "any False except ScalingDeferred is bad". If llm-operator adds another condition where False is the normal state, it will show red again. Checking only
DecisionAvailable=Falseas a failure would be sturdier. - A forced write after the defer timeout (
ScalingDeferred=False,DeferralTimedOut) now shows as plain ok/steady, so the step gives no hint that a guard was overridden. Fine for this fix; worth a follow-up if that case matters on the page.
Verdict: good to merge.
— Review Golden
|
LGMT. BTW, I'm adding new status field to |
|
hold on util modelsphere/llm-operator#23 . It revised |
…tive llm-operator now reports LLMScaler status the way HPA does. The scaling step still failed on any condition at False, so a healthy scaler with ScalingLimited=False (DesiredWithinRange) showed as failing. - only AbleToScale=False or ScalingActive=False fails the step, with the condition's reason and message - AbleToScale=True with RolloutInProgress, ScaleDownSettling or ScaleDownStabilized shows as holding; Synced and DeferralTimedOut are a normal scale - ScalingLimited and any other condition never fail the step - older operators: DecisionAvailable stands in when ScalingActive is absent, ScalingDeferred=True holds when AbleToScale is absent; a stale old condition next to the new one is ignored Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com>
huskcass
left a comment
There was a problem hiding this comment.
Re-review at b01111a.
No blockers.
Verdict: scalerStep matches the condition contract in llm-operator docs/llmscaler.md for new and old objects; typecheck, tests and build pass locally and the gate/go/web checks are green. Mergeable.
— Review Golden
- AbleToScale=False with a message and no ScalingActive - an old object with only ScalingDeferred=True - AbleToScale=False next to a stale ScalingDeferred=True Also say in the comment that DecisionAvailable is still written as a deprecated mirror of ScalingActive, not left behind like ScalingDeferred. Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com>
huskcass
left a comment
There was a problem hiding this comment.
No blockers.
Comment and test-only follow-up: the scalerStep comment now matches the operator behavior, and the three added cases cover the remaining edge cases; logic unchanged. Good to merge.
— Review Golden
ScalingDeferred only shipped in a release candidate. The released operator to stay compatible with is 0.5.0, which writes DecisionAvailable under the Custom provider and no condition under Prometheus. - no ScalingDeferred handling; a missing AbleToScale means no hold or failure information - tests use the 0.5.0 status shape in place of the ScalingDeferred cases Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com>
huskcass
left a comment
There was a problem hiding this comment.
Re-review at dea3127.
No blockers.
Verdict: the step now reads operator v0.5.0 objects correctly (Custom DecisionAvailable True/False, Prometheus with no conditions) and the AbleToScale/ScalingActive handling is unchanged from b01111a; typecheck, tests and build pass locally and the gate/go/web checks are green. Mergeable.
— Review Golden
* fix(inferences): stop showing a healthy scaler as failing The scaling step treated every LLMScaler condition with status False as a failure. ScalingDeferred is inverted: llm-operator sets it True while a rollout or scale-down settle guard holds a step back, and False otherwise (NotDeferred, or DeferralTimedOut after a forced write). Every healthy scaler therefore showed "NotDeferred" in red. - ScalingDeferred=False no longer counts as failing - ScalingDeferred=True shows as waiting, with its reason - any other condition at False (DecisionAvailable) still fails the step Fixes #100 * fix(inferences): read LLMScaler health from AbleToScale and ScalingActive llm-operator now reports LLMScaler status the way HPA does. The scaling step still failed on any condition at False, so a healthy scaler with ScalingLimited=False (DesiredWithinRange) showed as failing. - only AbleToScale=False or ScalingActive=False fails the step, with the condition's reason and message - AbleToScale=True with RolloutInProgress, ScaleDownSettling or ScaleDownStabilized shows as holding; Synced and DeferralTimedOut are a normal scale - ScalingLimited and any other condition never fail the step - older operators: DecisionAvailable stands in when ScalingActive is absent, ScalingDeferred=True holds when AbleToScale is absent; a stale old condition next to the new one is ignored Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com> * test(inferences): cover more LLMScaler condition fallbacks - AbleToScale=False with a message and no ScalingActive - an old object with only ScalingDeferred=True - AbleToScale=False next to a stale ScalingDeferred=True Also say in the comment that DecisionAvailable is still written as a deprecated mirror of ScalingActive, not left behind like ScalingDeferred. Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com> * fix(inferences): drop ScalingDeferred from the LLMScaler step ScalingDeferred only shipped in a release candidate. The released operator to stay compatible with is 0.5.0, which writes DecisionAvailable under the Custom provider and no condition under Prometheus. - no ScalingDeferred handling; a missing AbleToScale means no hold or failure information - tests use the 0.5.0 status shape in place of the ScalingDeferred cases Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com> --------- Co-authored-by: huskcass <333684917+huskcass@users.noreply.github.com> Co-authored-by: aceforeverd <11715200+aceforeverd@users.noreply.github.com>
What type of PR is this?
What this PR does and why
The install-progress "Scaling" step marked the scaler as failing whenever any LLMScaler condition had
status: "False".ScalingDeferredreads the other way round: llm-operator sets itTruewhile a rollout or scale-down settle guard holds a step back, andFalseotherwise (NotDeferred, orDeferralTimedOutafter a forced write). So every healthy scaler showedNotDeferredin red.ScalingDeferred=FalseNotDeferredScalingDeferred=TrueDecisionAvailable=FalseAdds one string,
steps.scaler.deferred, in both locales.Which issue(s) this PR fixes
Fixes #100
How it was tested
installStepsinlib.test.ts. Against the oldscalerStepthe first two fail and the third passes, which is the intended split.npm run typecheck,npm run buildpass.npm testpasses on Node 24 (the CI version): 47 files, 421 tests. On Node 25src/shell/preferences.test.tsfails onmainas well (Node's ownlocalStorageglobal shadows jsdom's); unrelated to this change.Checks
go test ./...andgofmt -l .is empty (no Go change)npm run typecheck && npm test && npm run buildinweb/(ifweb/changed)helm lint --strict helm/console(if the chart changed)Notes for reviewers
Deliberately left out: the swiss copy has the same check in
components/ReleaseObjects.tsx(the scaler card badge and the condition list dots) androutes/DeploymentDetail.tsx. Per coding-conventions those are fixed upstream in modelsphere/swiss and resynced, not edited here. Until then the cluster-resources scaler card still showsNotDeferredas a warning badge.Release note