Repository navigation
runtime/session: recover and suspend actors after abandoned dispatches - #3635
Open
shashankram wants to merge 1 commit into
Open
shashankram wants to merge 1 commit into
shashankram wants to merge 1 commit into
Conversation
iplay88keys
reviewed
Nov 11, 2026
shashankram
force-pushed
the
suspend-turnless
branch
from
November 11, 2026 22:43
2b34722 to
b1d7019
Compare
shashankram
force-pushed
the
suspend-turnless
branch
3 times, most recently
from
November 11, 2026 23:37
45c96bb to
9dc67e2
Compare
iplay88keys
reviewed
Nov 12, 2026
iplay88keys
left a comment
Contributor
There was a problem hiding this comment.
LGTM from a migration and rollback perspective. The separate cleanup table is a bit heavy, but the old controller ignores it, so it works here.
shashankram
force-pushed
the
suspend-turnless
branch
4 times, most recently
from
November 12, 2026 19:48
b13c8ce to
d1b37c3
Compare
\# Description Canceled or timed-out messages can leave actors running or resuming without an active turn, retaining worker capacity. - Use durable runtime lifecycle jobs to recover interrupted resumes and suspend actors without turns through the existing worker. - Preserve ownership and progress across replicas and restarts, with bounded retry backoff and persistent scheduling for parked work. - Let newer messages supersede cleanup without job writes on successful sends. - Support DB-first upgrades and controller-first rollbacks while preserving older-controller writes and recovering abandoned dispatches without jobs. \# Change Type ``` /kind fix ``` \# Changelog ```release-note Automatically recover and suspend actors left active by canceled or timed-out messages. ``` \# Additional Notes Signed-off-by: Shashank Ram <shashank.ram@solo.io>
shashankram
force-pushed
the
suspend-turnless
branch
from
November 14, 2026 00:03
d1b37c3 to
b1aa22b
Compare
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.
Description
Canceled or timed-out messages can leave an actor RUNNING or RESUMING without an active turn, holding worker capacity. The existing Session lifecycle worker now recovers and suspends these actors while keeping the Session READY for the next message.
runtime_lifecycle_job, with a runtime, operation kind, generation, phase, availability, and owner. Revocation enqueues work atomically; expiry scans discover abandoned dispatches after controller loss. Successful message delivery adds no job writes.A resume or suspend already issued to Substrate may finish after a newer message arrives. The message follows normal runtime retry behavior; stale cleanup cannot overwrite its dispatch or snapshot.
Testing
Change Type
Changelog