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
Snapshots: record the Hardware of the worker that captured them #2249
ExternalSnapshot and LocalSnapshot record only the URI/name, scope, and template UID. The scheduler cannot match a snapshot to a worker without knowing which hardware it was taken on.
Proposal
messageExternalSnapshot {
stringsnapshot_uri=1;
SnapshotContentScopecontent_scope=2; // becomes SnapshotScope under #2102stringactor_template_uid=3;
// Hardware the snapshot was captured on.// +k8s:optionalHardwarehardware=4;
}
messageLocalSnapshot {
repeatedstringnode_vms_with_local_snapshots=1;
stringsnapshot_name=2;
SnapshotContentScopecontent_scope=3;
// +k8s:optionalHardwarehardware=4;
}
The control plane copies the Hardware stamp from the assigned Worker's recorded WorkerStatus.hardware when the pause or suspend workflow captures the snapshot. Stamping LocalSnapshot.hardware at pause time ensures that a subsequent paused-origin suspend (isPausedOriginSuspend in workflow_suspend.go, where WorkerAssignment was already cleared by PauseActor) can propagate LocalSnapshot.hardware onto the promoted ExternalSnapshot. That keeps the stamp identical to what placement matches against and needs no new atelet response fields.
A memory checkpoint (SNAPSHOT_FIDELITY_MEMORY) is only restorable on a worker whose sandbox class, host hardware, and runtime assets match the environment that produced the checkpoint. While workers now self-report their default_runtime and restorable_runtimes during registration (#2247), snapshots and active actor assignments do not yet record which SandboxRuntime an actor is running under or which runtime produced a given snapshot.
Additionally, during a rolling runtime upgrade, a worker may update its default_runtime to a newer version (v2) while existing actors on that worker continue running under an older version (v1 in restorable_runtimes). Reading a worker's live default_runtime at checkpoint time would mis-stamp snapshots taken from those already-running v1 actors as v2.
Proposal
Track the SandboxRuntime across the actor lifecycle by pinning it on the actor's worker assignment when the actor starts or resumes, and propagating that stamp to every snapshot derived from it:
Pin the active runtime on WorkerAssignment:
When an actor is placed on a worker during ResumeActor, record the specific SandboxRuntime serving that actor on WorkerAssignment.sandbox_runtime (either the worker's default_runtime on a cold start / fallback, or the specific entry from default_runtime / restorable_runtimes that matched the snapshot being restored).
Stamp checkpoints from the assignment:
Pause (PauseActor): Stamp the node-local checkpoint's Snapshot.sandbox_runtime from WorkerAssignment.sandbox_runtime.
Suspend from RUNNING (SuspendActor): Stamp the durable snapshot's Snapshot.sandbox_runtime from WorkerAssignment.sandbox_runtime.
Suspend from PAUSED (SuspendActor): When uploading a node-local pause checkpoint after the worker has already been released, preserve the Snapshot.sandbox_runtime already recorded on the local pause snapshot.
Propagate stamps across tags and seeded actors:
Tagging (CreateTag): Copy the source actor snapshot's sandbox_runtime onto the tag's snapshot.
Seeding (CreateActor): Preserve Snapshot.sandbox_runtime when initializing an actor from a user source_tag or a template's golden snapshot.
Activity
shrutiyam-glitch commentedon Oct 14, 2026
Updating the issue after the recent API changes (#2289) and re-design in #2348
Part of #2246 (and #2069).
Problem
A memory checkpoint (
SNAPSHOT_FIDELITY_MEMORY) is only restorable on a worker whose sandbox class, host hardware, and runtime assets match the environment that produced the checkpoint. While workers now self-report theirdefault_runtimeandrestorable_runtimesduring registration (#2247), snapshots and active actor assignments do not yet record whichSandboxRuntimean actor is running under or which runtime produced a given snapshot.Additionally, during a rolling runtime upgrade, a worker may update its
default_runtimeto a newer version (v2) while existing actors on that worker continue running under an older version (v1inrestorable_runtimes). Reading a worker's livedefault_runtimeat checkpoint time would mis-stamp snapshots taken from those already-runningv1actors asv2.Proposal
Track the
SandboxRuntimeacross the actor lifecycle by pinning it on the actor's worker assignment when the actor starts or resumes, and propagating that stamp to every snapshot derived from it:WorkerAssignment:When an actor is placed on a worker during
ResumeActor, record the specificSandboxRuntimeserving that actor onWorkerAssignment.sandbox_runtime(either the worker'sdefault_runtimeon a cold start / fallback, or the specific entry fromdefault_runtime/restorable_runtimesthat matched the snapshot being restored).PauseActor): Stamp the node-local checkpoint'sSnapshot.sandbox_runtimefromWorkerAssignment.sandbox_runtime.RUNNING(SuspendActor): Stamp the durable snapshot'sSnapshot.sandbox_runtimefromWorkerAssignment.sandbox_runtime.PAUSED(SuspendActor): When uploading a node-local pause checkpoint after the worker has already been released, preserve theSnapshot.sandbox_runtimealready recorded on the local pause snapshot.CreateTag): Copy the source actor snapshot'ssandbox_runtimeonto the tag's snapshot.CreateActor): PreserveSnapshot.sandbox_runtimewhen initializing an actor from a usersource_tagor a template's golden snapshot.cc: Zoe Zhao (@zoez7)
Stamp snapshots with SandboxRuntime and schedule restores on runtime-…