You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Allow stopping actors without taking a snapshot #3703
Today in Substrate, every SuspendActor takes a snapshot. If the actor does throwaway work, or executes a stateless task, it does not need a snapshot after every turn.
RevertActor already ends the current execution without a checkpoint, releases the worker, and keeps the latest completed snapshot for the next resume, including a golden or source tag snapshot. As a per-turn stop it has gaps: a retry after a lost response fails with FailedPrecondition, a late retry has no UID check and can discard the next turn, and RequestActorSuspend from the worker always checkpoints. External volumes are never reverted, so their writes carry over between turns. If the snapshot from an earlier async suspend is not uploaded yet, revert deletes it and falls back to an older snapshot or a cold boot (#2983, with open fixes in #3041 and #3079). After a no-snapshot stop, should the next turn resume from the latest existing snapshot, or always from the initial one? And should this be chosen per call, such as a field in SuspendOptions, or per template? I'm happy to send a PR once we agree on the semantics.
Activity
cloudonly commentedon Nov 6, 2026
RevertActoralready ends the current execution without a checkpoint, releases the worker, and keeps the latest completed snapshot for the next resume, including a golden or source tag snapshot. As a per-turn stop it has gaps: a retry after a lost response fails withFailedPrecondition, a late retry has no UID check and can discard the next turn, andRequestActorSuspendfrom the worker always checkpoints. External volumes are never reverted, so their writes carry over between turns. If the snapshot from an earlier async suspend is not uploaded yet, revert deletes it and falls back to an older snapshot or a cold boot (#2983, with open fixes in #3041 and #3079). After a no-snapshot stop, should the next turn resume from the latest existing snapshot, or always from the initial one? And should this be chosen per call, such as a field inSuspendOptions, or per template? I'm happy to send a PR once we agree on the semantics.