Repository navigation
fix(lcm): preserve retry backoff across dirty invalidation - #4808
Open
ScriptedAlchemy wants to merge 1 commit into
Open
ScriptedAlchemy wants to merge 1 commit into
ScriptedAlchemy wants to merge 1 commit into
Conversation
Keep retryable and terminal outcomes durable when an earlier raw revision still has invalidation work; only new revisions can rearm those failures. Cover retry deadlines across restart, terminal parking, recovery on new raw input, and stale-generation refusal. Refs #4481
|
This branch has not been deployed
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.
Root cause and scope
Refs #4481 — partial retry-loop repair; not issue acceptance. This PR fixes a distinct LCM convergence redrive path on the session store. It does not assert the original macOS idle CPU target or 24-hour store growth is resolved.
A failed retained-summary invalidation can leave a row in
lcm_summary_convergence_dirty_raw(the raw revision remains genuinely dirty). Inrecord_outcome, any such row overrode aretryable,unavailable, orpermanentoutcome withpending, resetfailure_count, and discardednext_attempt_at_ms. The next daemon convergence page therefore immediately retried the same deterministic failure rather than honoring the session's durable retry/parking outcome.The raw-revision CAS already refuses settlement when a new revision arrives. Keep an old dirty row as pending only for successful/in-progress (
current/pending) outcomes. For failed outcomes, preserve the retry deadline or terminal parking until an actual new raw revision increments the generation and rearms the queue through the existing trigger.Behavioral regression coverage
unavailableandpermanentoutcomes park despite outstanding older dirty rows, but a new raw revision unblocks them.Two files only:
crates/tracedecay-lcm/src/summary_convergence.rsand its existing crate behavioral tests. No changes to schema, dependencies, policy thresholds, or generated surfaces.Verification and limits
pending/0/0before andretryable/1/100000after for identical dirty input, but this is not a Rust test or macOS daemon benchmark.cargocommand was used.Separate owners / acceptance
No overlap with #4793 projection batching, #4798 retention GC, or #4799 doctor reporting. No work moved through held draft #4776, Kev/decision-model branches, or release #4763.
#4481 stays open until the full idle-daemon CPU, retry-convergence and 24-hour bounded-growth acceptance is reproduced on master.