Skip to content

Suspend-from-PAUSED: support gVisor Full-capture → Data-commit conversion (blocked on #790) #817

Closed

Description

Tracks the gVisor half of the scope-conversion gate introduced in #816 (part of #791).

Current behavior

When a PAUSED actor is suspended and the pause captured Full but the template commits Data, atelet must narrow the upload to the durable data (narrowFullCaptureToData in cmd/atelet/main.go):

  • micro-VM: implemented — the durable data is a single self-contained durable-dir.tar (ateompath.DurableDirTarFile), carved out of the full file set and uploaded alone.
  • gVisor: returns codes.Unimplemented ("gVisor cannot extract durable data from a full checkpoint yet") — a full gVisor checkpoint is a monolithic sandbox image, and durable data cannot be separated from it today. The TODO(#790) marks the branch.

Control-plane effect: a gVisor actor paused with onPause: Full under a template with onCommit: Data cannot be suspended from PAUSED — the upload fails Unimplemented and the actor stays SUSPENDING under client retries (it remains resumable). All other combinations (Full→Full, Data→Data) work on gVisor.

Unblocking work

#790 (split-checkpoint runsc / onResume.fromData phase 2) introduces gVisor checkpoints whose filesystem/durable state is separable from the sandbox image. Once a runsc release with split checkpoints ships:

  1. Implement the SandboxClassGvisor branch of narrowFullCaptureToData (route it through the durable-data artifact the split checkpoint produces, analogous to the micro-VM durable tar).
  2. Flip the e2e case: TestDurableDirLifecycle/"onCommit:Data, onPause:Full, suspend from PAUSED" is microVMOnly today — drop the restriction so it covers gVisor.
  3. Re-check the pause side: onPause: Full + gVisor + onCommit: Data could then also be validated at template level if desired.

Relationship to #791

#791 (suspend a PAUSED actor) is functionally complete for micro-VM and for scope-matched gVisor suspends via #810/#812/#813/#816, but should stay open until this gap is closed.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/gvisorkind/featureAn enhancement / feature request or implementation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions