fix(garm): retire excess idle online JIT registrations - #429
Merged
Conversation
GARM v0.2.1-nddev.93 removes undemanded idle ephemeral registrations through Actions RemoveRunner after two matching observations. REST busy must be explicit false; omitted busy is unknown. Scale-set statistics of all zeros are not idle proof. Provider delete stays ordinary GARM reconcile after absence. The .92 patches are unchanged. Ordinary merge in this repository does not require a general CI status check. Gate remains truthful advisory evidence. Signed-off-by: rldyourmnd <danil@nddev.it.com>
GARM v0.2.1-nddev.93 still retires excess undemanded idle ephemeral JIT through Actions RemoveRunner after two matching observations. REST busy must be explicit false. Retirement is now best-effort: local age and min-idle decide whether any API call happens, a classified warning cannot block absent-runner consolidation, unseen observation IDs are pruned, and RemoveRunner 204/404/409/unexpected status are wired through an injected pending-delete writer. The .92 patches are unchanged. REST overlay fallback for acknowledged never-started jobs is not in this derivative. JobAssigned does not bind GitHub job ID or run attempt, so latest-name uniqueness is not authoritative demand or tombstone evidence. Signed-off-by: rldyourmnd <danil@nddev.it.com>
Idle retirement stays best-effort: warnIdleRetirement runs before the original consolidateRunnerState body, so a retirement API failure cannot block absent-runner cleanup. Runner Unlock remains deferred until that function returns, preserving the provider-vs-DB race guard. Local age and min-idle decide whether any API call happens. Helper tests document predicate and fake-client evidence only. The .92 patches are unchanged. Signed-off-by: rldyourmnd <danil@nddev.it.com>
Signed-off-by: rldyourmnd <danil@nddev.it.com>
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.
Excess old online JIT registrations can occupy the fleet while their scale set has no dispatchable demand. GARM
.93adds bounded idle retirement: local age and min-idle eligibility precede remote calls; two observations bind the exact ephemeral runner, explicit RESTbusy: false, Actions identity and zero scale-set demand. The busy-protected Actions removal path and absent-registration handling precede provider cleanup.Retirement failures are classified and logged while normal reconciliation continues. Patch 0031 preserves the original consolidation body and the lifetime of its deferred runner locks. Observation state is pruned. The
.92patches remain immutable. The exploratory REST name-based demand fallback is excluded: name uniqueness does not prove an exact job/attempt or authorize a tombstone.The repository contract also makes ordinary self-CI advisory;
Gateremains diagnostic evidence. The native stable-0.8 generator updated the anchor's bundle-lock input digest after that declaration changed.Verification: all 39 manifest input hashes match; pinned Go 1.26.6 race tests and two independent build caches produced
8f6519500e90ad028c62b7fc3f5c8f2c7784fd82ef653c37c8db9e45afcfa841(required glibc 2.34). The coordinator independently checked the final binary hash, reviewed the restored lock scope, ranmake verify, and completed native projection plan/apply/verify/repeat-check. Idle tests are predicate/fake-client evidence; they do not prove a live Worker/DB/HTTP deployment. AGENTS structure and source consistency checks passed.Deployment and security boundaries: this PR does not prove recovery of the eight old priority intents and has not deployed
.93. A separate coordinator binary-mode govulncheck v1.6.0 scan flagged advisories in four inherited upstream modules; source reachability and dependency remediation are under investigation. No vulnerability-clean runtime claim is made.