Skip to content

feat(api,orch): add reboot escape hatch for sandbox resume - #2877

Closed
ValentaTomas wants to merge 4 commits into
mainfrom
cova/rootfs-reboot-only
Closed

ValentaTomas wants to merge 4 commits into
mainfrom
cova/rootfs-reboot-only

Conversation

@ValentaTomas

@ValentaTomas ValentaTomas commented May 31, 2026 •

Copy link
Copy Markdown
Member

Adds an optional reboot boolean on the create and resume endpoints. When set, the orchestrator boots the sandbox from its template/snapshot filesystem with fresh memory, discarding the memory snapshot. Useful as an escape hatch when memory snapshots are slow or corrupted.

Not exposed on connect or auto-resume.

@cla-bot cla-bot Bot added the cla-signed label May 31, 2026
@cursor

cursor Bot commented May 31, 2026 •

Copy link
Copy Markdown

PR Summary

Medium Risk
Changes core sandbox start/resume behavior on the orchestrator create RPC; mis-handling could affect routing readiness or TTL windows, but the flag is opt-in and connect/auto-resume are unchanged.

Overview
This PR adds an optional reboot flag on sandbox create and resume so callers can start from the saved filesystem while skipping memory snapshot restore—fresh RAM instead of resuming in-memory state. The API threads the flag through to the orchestrator SandboxCreateRequest, which either follows the existing resume path or, when reboot is set, boots from rootfs with an empty memfile, waits for envd, and only then marks the sandbox running (same visibility timing as normal resume). Connect, gRPC proxy resume, and auto-resume paths keep reboot off.

Reviewed by Cursor Bugbot for commit 343e394. Bugbot is set up for automated code reviews on this repo. Configure here.

@codecov

codecov Bot commented May 31, 2026 •

Copy link
Copy Markdown

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
2705 3 2702 7
View the full list of 3 ❄️ flaky test(s)
github.com/e2b-dev/infra/tests/integration/internal/tests/api/sandboxes::TestSandboxListPaginationRunningLargerLimit

Flake rate in main: 42.64% (Passed 764 times, Failed 568 times)

Stack Traces | 95.2s run time
=== RUN   TestSandboxListPaginationRunningLargerLimit
    sandbox_list_test.go:327: Created sandbox 1/12: i9k927et6jroa2haz0kjo
    sandbox_list_test.go:327: Created sandbox 2/12: ia5orgtus0f7m9nr66cfc
    sandbox_list_test.go:327: Created sandbox 3/12: imlrblo81712oxvym5yy7
    sandbox_list_test.go:327: Created sandbox 4/12: ijhzee2rykgjhti7ytx5d
    sandbox_list_test.go:327: Created sandbox 5/12: iuteio3tbiuwr9lw5ztub
    sandbox_list_test.go:327: Created sandbox 6/12: ikbxlsdc5w10w16adzzwv
    sandbox_list_test.go:327: Created sandbox 7/12: ihztglhk4utwx5od216n4
    sandbox_list_test.go:327: Created sandbox 8/12: iio7vii1yhkvqy63mm6df
    sandbox_list_test.go:327: Created sandbox 9/12: ige6ny4ak87nxlgp5dvpr
    sandbox_list_test.go:327: Created sandbox 10/12: ih7v21qza6tbbiemswyxb
    sandbox_list_test.go:327: Created sandbox 11/12: i8y0p20mdukvfs54ukqxo
    sandbox_list_test.go:327: Created sandbox 12/12: iswwcpuu1hul960uirp28
    sandbox_list_test.go:330: 
        	Error Trace:	.../api/sandboxes/sandbox_list_test.go:340
        	            				.../hostedtoolcache/go/1.26.3.../src/runtime/asm_amd64.s:1771
        	Error:      	"[]" should have 12 item(s), but has 0
    sandbox_list_test.go:330: 
        	Error Trace:	.../api/sandboxes/sandbox_list_test.go:330
        	Error:      	Condition never satisfied
        	Test:       	TestSandboxListPaginationRunningLargerLimit
--- FAIL: TestSandboxListPaginationRunningLargerLimit (95.21s)
github.com/e2b-dev/infra/tests/integration/internal/tests/orchestrator::TestSandboxMemoryIntegrity

Flake rate in main: 57.45% (Passed 757 times, Failed 1022 times)

Stack Traces | 62.9s run time
=== RUN   TestSandboxMemoryIntegrity
=== PAUSE TestSandboxMemoryIntegrity
=== CONT  TestSandboxMemoryIntegrity
    sandbox_memory_integrity_test.go:27: Build completed successfully
--- FAIL: TestSandboxMemoryIntegrity (62.92s)
github.com/e2b-dev/infra/tests/integration/internal/tests/orchestrator::TestSandboxMemoryIntegrity/tmpfs_hash

Flake rate in main: 57.56% (Passed 747 times, Failed 1013 times)

Stack Traces | 190s run time
=== RUN   TestSandboxMemoryIntegrity/tmpfs_hash
=== PAUSE TestSandboxMemoryIntegrity/tmpfs_hash
=== CONT  TestSandboxMemoryIntegrity/tmpfs_hash
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{start:{pid:1256}}
Executing command bash in sandbox iiof9sl6u6tvuffa4a1w6 (user: root)
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stdout:"Total memory: 985 MB\nUsed memory before tmpfs mount: 187 MB\nFree memory before tmpfs mount: 797 MB\nMemory to use in integrity test (60% of free, min 64MB): 478 MB\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"478+0 records in\n478+0 records out\n501219328 bytes (501 MB, 478 MiB) copied, 2.49363 s, 201 MB/s\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\tCommand being timed: \"dd if=/dev/urandom of=/mnt/testfile bs=1M count=478\"\n\tUser time (seconds): 0.00\n\tSystem time (seconds): 2.48\n\tPercent of CPU this job got: 99%\n\tElapsed (wall clock) time (h:mm:ss or m:ss): 0:02.49\n\tAverage shared text size (kbytes): 0\n\tAverage unshared data size (kbytes): 0\n\tAverage stack size (kbytes): 0\n\tAverage total size (kbytes): 0\n\tMaximum resident set size (kbytes): 2652\n\tAverage resident set size (kbytes): 0\n\tMajor (requiring I/O) p"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"age faults: 2\n\tMinor "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"(recl"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"aim"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ing"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" a "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"fra"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"me)"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" pag"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e f"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ault"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"s: "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"345\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\tVolu"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"nta"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ry "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"context"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" sw"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"itch"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"es:"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" 3\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\tIn"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"volu"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ntary"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" co"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"nte"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"xt "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"switc"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"hes"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:": "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"93\n\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"Swa"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"ps: 0\n\tFile system inputs: 176\n\tFile system outputs: 0\n\tSocket messages sent: 0\n\tSocket messages received: 0\n\tSignals delivered: 0\n\tPage size (bytes): 4096\n\tExit status: 0\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stdout:"Used memory after tmpfs mount and file fill: 671 MB\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{end:{exited:true status:"exit status 0"}}
    sandbox_memory_integrity_test.go:70: Command [bash] completed successfully in sandbox imlw8am7v4oznpkrvu1ia
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1273}}
Executing command bash in sandbox iki9uugbkjec3z0ydf5i0 (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{data:{stdout:"22ba567629e5878e0b91271ccc77d82629debadc01161cc2cee87b6390faa679\n"}}
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{end:{exited:true status:"exit status 0"}}
    sandbox_memory_integrity_test.go:80: Command [bash] completed successfully in sandbox imlw8am7v4oznpkrvu1ia
Executing command bash in sandbox iki9uugbkjec3z0ydf5i0 (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1277}}
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
Executing command bash in sandbox imlw8am7v4oznpkrvu1ia (user: root)
    sandbox_memory_integrity_test.go:110: 
        	Error Trace:	.../tests/orchestrator/sandbox_memory_integrity_test.go:81
        	            				.../hostedtoolcache/go/1.26.3.../src/runtime/asm_amd64.s:1771
        	Error:      	Received unexpected error:
        	            	failed to execute command bash in sandbox imlw8am7v4oznpkrvu1ia: unavailable: HTTP status 502 Bad Gateway
    sandbox_memory_integrity_test.go:110: 
        	Error Trace:	.../tests/orchestrator/sandbox_memory_integrity_test.go:78
        	            				.../tests/orchestrator/sandbox_memory_integrity_test.go:110
        	Error:      	Condition never satisfied
        	Test:       	TestSandboxMemoryIntegrity/tmpfs_hash
--- FAIL: TestSandboxMemoryIntegrity/tmpfs_hash (189.65s)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Comment thread packages/orchestrator/pkg/server/sandboxes.go

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Using uuid.MustParse on template.Files().BuildID can cause a runtime panic if the build ID is not a valid UUID or if template.Files() is nil. It is safer to parse the UUID using uuid.Parse and handle the error gracefully to prevent potential service panics.

Comment thread packages/orchestrator/pkg/server/sandboxes.go
@ValentaTomas
ValentaTomas force-pushed the cova/rootfs-reboot-only branch from 0aabc3f to 1730f78 Compare May 31, 2026 02:53
Comment thread packages/orchestrator/pkg/server/sandboxes.go
Comment thread packages/orchestrator/pkg/server/sandboxes.go Outdated
@ValentaTomas
ValentaTomas force-pushed the cova/rootfs-reboot-only branch from 1730f78 to 8f3c887 Compare May 31, 2026 02:56
@cursor

This comment has been minimized.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Autofix Details

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Reboot resume skips envd wait
    • Added WaitForEnvd call after createSandboxFromRootfs to ensure envd is ready before the orchestrator Create RPC completes, matching the behavior of normal snapshot resumes.

Create PR

Or push these changes by commenting:

@cursor push 9b20165933
Preview (9b20165933)
diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go
--- a/packages/api/internal/api/api.gen.go
+++ b/packages/api/internal/api/api.gen.go
@@ -714,6 +714,9 @@
 	// Deprecated: this property has been marked as deprecated upstream, but no `x-deprecated-reason` was set
 	AutoPause *bool `json:"autoPause,omitempty"`
 
+	// Reboot Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
+	Reboot *bool `json:"reboot,omitempty"`
+
 	// Timeout Time to live for the sandbox in seconds.
 	Timeout *int32 `json:"timeout,omitempty"`
 }
@@ -13409,175 +13412,176 @@
 // const string: with thousands of chunks the chained `+` fold is several
 // times slower for the Go compiler than parsing a slice literal.
 var swaggerSpec = []string{
-	"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",
+	"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",
 }
 
 // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,

diff --git a/packages/api/internal/handlers/proxy_grpc.go b/packages/api/internal/handlers/proxy_grpc.go
--- a/packages/api/internal/handlers/proxy_grpc.go
+++ b/packages/api/internal/handlers/proxy_grpc.go
@@ -257,6 +257,7 @@
 		s.api.buildResumeSandboxData(sandboxID, nil),
 		&headers,
 		true,
+		false,
 		nil, // mcp
 	)
 	if apiErr != nil {

diff --git a/packages/api/internal/handlers/sandbox.go b/packages/api/internal/handlers/sandbox.go
--- a/packages/api/internal/handlers/sandbox.go
+++ b/packages/api/internal/handlers/sandbox.go
@@ -28,6 +28,7 @@
 	getSandboxData orchestrator.SandboxDataFetcher,
 	requestHeader *http.Header,
 	isResume bool,
+	reboot bool,
 	mcp api.Mcp,
 ) (*api.Sandbox, *api.APIError) {
 	sbx, apiErr := a.startSandboxInternal(
@@ -38,6 +39,7 @@
 		getSandboxData,
 		requestHeader,
 		isResume,
+		reboot,
 		mcp,
 	)
 	if apiErr != nil {
@@ -56,6 +58,7 @@
 	getSandboxData orchestrator.SandboxDataFetcher,
 	requestHeader *http.Header,
 	isResume bool,
+	reboot bool,
 	mcp api.Mcp,
 ) (sandbox.Sandbox, *api.APIError) {
 	startTime := time.Now()
@@ -77,6 +80,7 @@
 		timeout,
 		isResume,
 		creationMeta,
+		reboot,
 	)
 	if instanceErr != nil {
 		telemetry.ReportError(ctx, "error when creating instance", instanceErr.Err)

diff --git a/packages/api/internal/handlers/sandbox_connect.go b/packages/api/internal/handlers/sandbox_connect.go
--- a/packages/api/internal/handlers/sandbox_connect.go
+++ b/packages/api/internal/handlers/sandbox_connect.go
@@ -152,6 +152,7 @@
 		a.buildResumeSandboxData(sandboxID, nil),
 		&c.Request.Header,
 		true,
+		false,
 		nil, // mcp
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/handlers/sandbox_create.go b/packages/api/internal/handlers/sandbox_create.go
--- a/packages/api/internal/handlers/sandbox_create.go
+++ b/packages/api/internal/handlers/sandbox_create.go
@@ -265,6 +265,7 @@
 		getSandboxData,
 		&c.Request.Header,
 		false,
+		false,
 		mcp,
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/handlers/sandbox_resume.go b/packages/api/internal/handlers/sandbox_resume.go
--- a/packages/api/internal/handlers/sandbox_resume.go
+++ b/packages/api/internal/handlers/sandbox_resume.go
@@ -54,6 +54,7 @@
 	}
 
 	telemetry.ReportEvent(ctx, "Parsed body")
+	reboot := body.Reboot != nil && *body.Reboot
 
 	timeout := sandbox.SandboxTimeoutDefault
 	if body.Timeout != nil {
@@ -160,6 +161,7 @@
 		a.buildResumeSandboxData(sandboxID, body.AutoPause),
 		&c.Request.Header,
 		true,
+		reboot,
 		nil, // mcp
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/orchestrator/create_instance.go b/packages/api/internal/orchestrator/create_instance.go
--- a/packages/api/internal/orchestrator/create_instance.go
+++ b/packages/api/internal/orchestrator/create_instance.go
@@ -10,6 +10,7 @@
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/metric"
 	"go.uber.org/zap"
+	"google.golang.org/grpc/metadata"
 	"google.golang.org/protobuf/types/known/timestamppb"
 
 	"github.com/e2b-dev/infra/packages/api/internal/api"
@@ -127,6 +128,7 @@
 	timeout time.Duration,
 	isResume bool,
 	creationMeta sandbox.CreationMetadata,
+	rebootOpt ...bool,
 ) (sbx sandbox.Sandbox, apiErr *api.APIError) {
 	ctx, childSpan := tracer.Start(ctx, "create-sandbox")
 	defer childSpan.End()
@@ -296,6 +298,10 @@
 		}
 	}
 
+	if len(rebootOpt) > 0 && rebootOpt[0] {
+		ctx = metadata.AppendToOutgoingContext(ctx, orchestrator.SandboxRebootFromRootfsGRPCMetadataKey, "true")
+	}
+
 	nodeClusterID := clusters.WithClusterFallback(team.ClusterID)
 	clusterNodes := o.GetClusterNodes(nodeClusterID)
 

diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go
--- a/packages/orchestrator/pkg/server/sandboxes.go
+++ b/packages/orchestrator/pkg/server/sandboxes.go
@@ -24,10 +24,16 @@
 	"google.golang.org/protobuf/types/known/emptypb"
 	"google.golang.org/protobuf/types/known/timestamppb"
 
+	grpcmetadata "google.golang.org/grpc/metadata"
+
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/block"
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/fc"
 	sbxtemplate "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/template"
+	configpkg "github.com/e2b-dev/infra/packages/orchestrator/pkg/template/build/config"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/template/constants"
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/template/metadata"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/units"
 	"github.com/e2b-dev/infra/packages/shared/pkg/events"
 	"github.com/e2b-dev/infra/packages/shared/pkg/featureflags"
 	"github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator"
@@ -58,6 +64,61 @@
 	killReasonUnknown = "unknown"
 )
 
+func rebootFromRootfsEnabled(ctx context.Context) bool {
+	values := grpcmetadata.ValueFromIncomingContext(ctx, orchestrator.SandboxRebootFromRootfsGRPCMetadataKey)
+	return len(values) > 0 && values[0] == "true"
+}
+
+func (s *Server) createSandboxFromRootfs(
+	ctx context.Context,
+	template sbxtemplate.Template,
+	config *sandbox.Config,
+	runtime sandbox.RuntimeMetadata,
+	req *orchestrator.SandboxCreateRequest,
+) (*sandbox.Sandbox, error) {
+	buildID, err := uuid.Parse(template.Files().BuildID)
+	if err != nil {
+		return nil, fmt.Errorf("parse build ID: %w", err)
+	}
+
+	memfile, err := block.NewEmpty(
+		units.MBToBytes(config.RamMB),
+		configpkg.MemfilePageSize(config.HugePages),
+		buildID,
+	)
+	if err != nil {
+		return nil, fmt.Errorf("create empty memfile: %w", err)
+	}
+	defer memfile.Close()
+
+	maskedTemplate := sbxtemplate.NewMaskTemplate(template, sbxtemplate.WithMemfile(memfile))
+
+	kvmClock, err := utils.IsGTEVersion(config.Envd.Version, "0.2.11")
+	if err != nil {
+		return nil, fmt.Errorf("compare envd version: %w", err)
+	}
+
+	timeout := req.GetEndTime().AsTime().Sub(req.GetStartTime().AsTime())
+	if timeout <= 0 {
+		timeout = s.config.EnvdTimeout
+	}
+
+	return s.sandboxFactory.CreateSandbox(
+		ctx,
+		config,
+		runtime,
+		maskedTemplate,
+		timeout,
+		"",
+		fc.ProcessOptions{
+			InitScriptPath: constants.SystemdInitPath,
+			KvmClock:       kvmClock,
+		},
+		req.GetSandbox(),
+		nil,
+	)
+}
+
 func (s *Server) Create(ctx context.Context, req *orchestrator.SandboxCreateRequest) (_ *orchestrator.SandboxCreateResponse, createErr error) {
 	// set max request timeout for this request
 	ctx, cancel := context.WithTimeoutCause(ctx, requestTimeout, errors.New("request timed out"))
@@ -187,18 +248,25 @@
 		SandboxType: sandbox.SandboxTypeSandbox,
 	}
 
-	sbx, err := s.sandboxFactory.ResumeSandbox(
-		ctx,
-		template,
-		config,
-		runtime,
-		req.GetStartTime().AsTime(),
-		req.GetEndTime().AsTime(),
-		req.GetSandbox(),
-	)
+	var sbx *sandbox.Sandbox
+	if rebootFromRootfsEnabled(ctx) {
+		sbx, err = s.createSandboxFromRootfs(ctx, template, config, runtime, req)
+		if err == nil {
+			err = sbx.WaitForEnvd(ctx, s.config.EnvdTimeout)
+		}
+	} else {
+		sbx, err = s.sandboxFactory.ResumeSandbox(
+			ctx,
+			template,
+			config,
+			runtime,
+			req.GetStartTime().AsTime(),
+			req.GetEndTime().AsTime(),
+			req.GetSandbox(),
+		)
+	}
 	if err != nil {
 		if errors.Is(err, storage.ErrObjectNotExist) {
-			// Snapshot data not found, let the API know the data aren't probably upload yet
 			telemetry.ReportError(ctx, "sandbox files not found", err, telemetry.WithSandboxID(req.GetSandbox().GetSandboxId()))
 
 			return nil, status.Errorf(codes.FailedPrecondition, "sandbox files for '%s' not found", req.GetSandbox().GetSandboxId())

diff --git a/packages/shared/pkg/grpc/orchestrator/internal_flags.go b/packages/shared/pkg/grpc/orchestrator/internal_flags.go
new file mode 100644
--- /dev/null
+++ b/packages/shared/pkg/grpc/orchestrator/internal_flags.go
@@ -1,0 +1,3 @@
+package orchestrator
+
+const SandboxRebootFromRootfsGRPCMetadataKey = "x-e2b-reboot-from-rootfs"

diff --git a/spec/openapi.yml b/spec/openapi.yml
--- a/spec/openapi.yml
+++ b/spec/openapi.yml
@@ -724,6 +724,9 @@
           type: boolean
           deprecated: true
           description: Automatically pauses the sandbox after the timeout
+        reboot:
+          type: boolean
+          description: Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
 
     ConnectSandbox:
       type: object

diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go
--- a/tests/integration/internal/api/generated.go
+++ b/tests/integration/internal/api/generated.go
@@ -709,6 +709,9 @@
 	// Deprecated: this property has been marked as deprecated upstream, but no `x-deprecated-reason` was set
 	AutoPause *bool `json:"autoPause,omitempty"`
 
+	// Reboot Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
+	Reboot *bool `json:"reboot,omitempty"`
+
 	// Timeout Time to live for the sandbox in seconds.
 	Timeout *int32 `json:"timeout,omitempty"`
 }

You can send follow-ups to the cloud agent here.

Comment thread packages/orchestrator/pkg/server/sandboxes.go
@cursor

cursor Bot commented May 31, 2026

Copy link
Copy Markdown

Bugbot Autofix prepared fixes for both issues found in the latest run.

  • ✅ Fixed: Premature MarkRunning before envd
    • Removed MarkRunning from CreateSandbox and moved it to after WaitForEnvd in all callers, ensuring sandbox is only marked running once envd is ready.
  • ✅ Fixed: Wrong WaitForEnvd timeout source
    • Changed createSandboxFromRootfs to use s.config.EnvdTimeout for WaitForEnvd instead of the sandbox lifetime timeout.

Create PR

Or push these changes by commenting:

@cursor push 25faf4a9ef
Preview (25faf4a9ef)
diff --git a/packages/api/internal/api/api.gen.go b/packages/api/internal/api/api.gen.go
--- a/packages/api/internal/api/api.gen.go
+++ b/packages/api/internal/api/api.gen.go
@@ -714,6 +714,9 @@
 	// Deprecated: this property has been marked as deprecated upstream, but no `x-deprecated-reason` was set
 	AutoPause *bool `json:"autoPause,omitempty"`
 
+	// Reboot Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
+	Reboot *bool `json:"reboot,omitempty"`
+
 	// Timeout Time to live for the sandbox in seconds.
 	Timeout *int32 `json:"timeout,omitempty"`
 }
@@ -13409,175 +13412,176 @@
 // const string: with thousands of chunks the chained `+` fold is several
 // times slower for the Go compiler than parsing a slice literal.
 var swaggerSpec = []string{
-	"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",
+	"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",
 }
 
 // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes,

diff --git a/packages/api/internal/handlers/proxy_grpc.go b/packages/api/internal/handlers/proxy_grpc.go
--- a/packages/api/internal/handlers/proxy_grpc.go
+++ b/packages/api/internal/handlers/proxy_grpc.go
@@ -257,6 +257,7 @@
 		s.api.buildResumeSandboxData(sandboxID, nil),
 		&headers,
 		true,
+		false,
 		nil, // mcp
 	)
 	if apiErr != nil {

diff --git a/packages/api/internal/handlers/sandbox.go b/packages/api/internal/handlers/sandbox.go
--- a/packages/api/internal/handlers/sandbox.go
+++ b/packages/api/internal/handlers/sandbox.go
@@ -28,6 +28,7 @@
 	getSandboxData orchestrator.SandboxDataFetcher,
 	requestHeader *http.Header,
 	isResume bool,
+	reboot bool,
 	mcp api.Mcp,
 ) (*api.Sandbox, *api.APIError) {
 	sbx, apiErr := a.startSandboxInternal(
@@ -38,6 +39,7 @@
 		getSandboxData,
 		requestHeader,
 		isResume,
+		reboot,
 		mcp,
 	)
 	if apiErr != nil {
@@ -56,6 +58,7 @@
 	getSandboxData orchestrator.SandboxDataFetcher,
 	requestHeader *http.Header,
 	isResume bool,
+	reboot bool,
 	mcp api.Mcp,
 ) (sandbox.Sandbox, *api.APIError) {
 	startTime := time.Now()
@@ -77,6 +80,7 @@
 		timeout,
 		isResume,
 		creationMeta,
+		reboot,
 	)
 	if instanceErr != nil {
 		telemetry.ReportError(ctx, "error when creating instance", instanceErr.Err)

diff --git a/packages/api/internal/handlers/sandbox_connect.go b/packages/api/internal/handlers/sandbox_connect.go
--- a/packages/api/internal/handlers/sandbox_connect.go
+++ b/packages/api/internal/handlers/sandbox_connect.go
@@ -152,6 +152,7 @@
 		a.buildResumeSandboxData(sandboxID, nil),
 		&c.Request.Header,
 		true,
+		false,
 		nil, // mcp
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/handlers/sandbox_create.go b/packages/api/internal/handlers/sandbox_create.go
--- a/packages/api/internal/handlers/sandbox_create.go
+++ b/packages/api/internal/handlers/sandbox_create.go
@@ -265,6 +265,7 @@
 		getSandboxData,
 		&c.Request.Header,
 		false,
+		false,
 		mcp,
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/handlers/sandbox_resume.go b/packages/api/internal/handlers/sandbox_resume.go
--- a/packages/api/internal/handlers/sandbox_resume.go
+++ b/packages/api/internal/handlers/sandbox_resume.go
@@ -54,6 +54,7 @@
 	}
 
 	telemetry.ReportEvent(ctx, "Parsed body")
+	reboot := body.Reboot != nil && *body.Reboot
 
 	timeout := sandbox.SandboxTimeoutDefault
 	if body.Timeout != nil {
@@ -160,6 +161,7 @@
 		a.buildResumeSandboxData(sandboxID, body.AutoPause),
 		&c.Request.Header,
 		true,
+		reboot,
 		nil, // mcp
 	)
 	if createErr != nil {

diff --git a/packages/api/internal/orchestrator/create_instance.go b/packages/api/internal/orchestrator/create_instance.go
--- a/packages/api/internal/orchestrator/create_instance.go
+++ b/packages/api/internal/orchestrator/create_instance.go
@@ -10,6 +10,7 @@
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/metric"
 	"go.uber.org/zap"
+	"google.golang.org/grpc/metadata"
 	"google.golang.org/protobuf/types/known/timestamppb"
 
 	"github.com/e2b-dev/infra/packages/api/internal/api"
@@ -127,6 +128,7 @@
 	timeout time.Duration,
 	isResume bool,
 	creationMeta sandbox.CreationMetadata,
+	rebootOpt ...bool,
 ) (sbx sandbox.Sandbox, apiErr *api.APIError) {
 	ctx, childSpan := tracer.Start(ctx, "create-sandbox")
 	defer childSpan.End()
@@ -296,6 +298,10 @@
 		}
 	}
 
+	if len(rebootOpt) > 0 && rebootOpt[0] {
+		ctx = metadata.AppendToOutgoingContext(ctx, orchestrator.SandboxRebootFromRootfsGRPCMetadataKey, "true")
+	}
+
 	nodeClusterID := clusters.WithClusterFallback(team.ClusterID)
 	clusterNodes := o.GetClusterNodes(nodeClusterID)
 

diff --git a/packages/orchestrator/pkg/sandbox/sandbox.go b/packages/orchestrator/pkg/sandbox/sandbox.go
--- a/packages/orchestrator/pkg/sandbox/sandbox.go
+++ b/packages/orchestrator/pkg/sandbox/sandbox.go
@@ -559,8 +559,6 @@
 		exit.SetError(errors.Join(err, fcErr))
 	}()
 
-	f.Sandboxes.MarkRunning(ctx, sbx)
-
 	return sbx, nil
 }
 

diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go
--- a/packages/orchestrator/pkg/server/sandboxes.go
+++ b/packages/orchestrator/pkg/server/sandboxes.go
@@ -24,10 +24,16 @@
 	"google.golang.org/protobuf/types/known/emptypb"
 	"google.golang.org/protobuf/types/known/timestamppb"
 
+	grpcmetadata "google.golang.org/grpc/metadata"
+
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/block"
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/fc"
 	sbxtemplate "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/template"
+	configpkg "github.com/e2b-dev/infra/packages/orchestrator/pkg/template/build/config"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/template/constants"
 	"github.com/e2b-dev/infra/packages/orchestrator/pkg/template/metadata"
+	"github.com/e2b-dev/infra/packages/orchestrator/pkg/units"
 	"github.com/e2b-dev/infra/packages/shared/pkg/events"
 	"github.com/e2b-dev/infra/packages/shared/pkg/featureflags"
 	"github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator"
@@ -58,6 +64,68 @@
 	killReasonUnknown = "unknown"
 )
 
+func rebootFromRootfsEnabled(ctx context.Context) bool {
+	values := grpcmetadata.ValueFromIncomingContext(ctx, orchestrator.SandboxRebootFromRootfsGRPCMetadataKey)
+	return len(values) > 0 && values[0] == "true"
+}
+
+func (s *Server) createSandboxFromRootfs(
+	ctx context.Context,
+	template sbxtemplate.Template,
+	config *sandbox.Config,
+	runtime sandbox.RuntimeMetadata,
+	req *orchestrator.SandboxCreateRequest,
+) (*sandbox.Sandbox, error) {
+	memfile, err := block.NewEmpty(
+		units.MBToBytes(config.RamMB),
+		configpkg.MemfilePageSize(config.HugePages),
+		uuid.MustParse(template.Files().BuildID),
+	)
+	if err != nil {
+		return nil, fmt.Errorf("create empty memfile: %w", err)
+	}
+	defer memfile.Close()
+
+	maskedTemplate := sbxtemplate.NewMaskTemplate(template, sbxtemplate.WithMemfile(memfile))
+
+	kvmClock, err := utils.IsGTEVersion(config.Envd.Version, "0.2.11")
+	if err != nil {
+		return nil, fmt.Errorf("compare envd version: %w", err)
+	}
+
+	sandboxTimeout := req.GetEndTime().AsTime().Sub(req.GetStartTime().AsTime())
+	if sandboxTimeout <= 0 {
+		sandboxTimeout = s.config.EnvdTimeout
+	}
+
+	sbx, err := s.sandboxFactory.CreateSandbox(
+		ctx,
+		config,
+		runtime,
+		maskedTemplate,
+		sandboxTimeout,
+		"",
+		fc.ProcessOptions{
+			InitScriptPath: constants.SystemdInitPath,
+			KvmClock:       kvmClock,
+		},
+		req.GetSandbox(),
+		nil,
+	)
+	if err != nil {
+		return nil, err
+	}
+
+	if err := sbx.WaitForEnvd(ctx, s.config.EnvdTimeout); err != nil {
+		closeErr := sbx.Close(context.WithoutCancel(ctx))
+		return nil, errors.Join(fmt.Errorf("wait for envd after rootfs reboot: %w", err), closeErr)
+	}
+
+	s.sandboxFactory.Sandboxes.MarkRunning(ctx, sbx)
+
+	return sbx, nil
+}
+
 func (s *Server) Create(ctx context.Context, req *orchestrator.SandboxCreateRequest) (_ *orchestrator.SandboxCreateResponse, createErr error) {
 	// set max request timeout for this request
 	ctx, cancel := context.WithTimeoutCause(ctx, requestTimeout, errors.New("request timed out"))
@@ -187,18 +255,22 @@
 		SandboxType: sandbox.SandboxTypeSandbox,
 	}
 
-	sbx, err := s.sandboxFactory.ResumeSandbox(
-		ctx,
-		template,
-		config,
-		runtime,
-		req.GetStartTime().AsTime(),
-		req.GetEndTime().AsTime(),
-		req.GetSandbox(),
-	)
+	var sbx *sandbox.Sandbox
+	if rebootFromRootfsEnabled(ctx) {
+		sbx, err = s.createSandboxFromRootfs(ctx, template, config, runtime, req)
+	} else {
+		sbx, err = s.sandboxFactory.ResumeSandbox(
+			ctx,
+			template,
+			config,
+			runtime,
+			req.GetStartTime().AsTime(),
+			req.GetEndTime().AsTime(),
+			req.GetSandbox(),
+		)
+	}
 	if err != nil {
 		if errors.Is(err, storage.ErrObjectNotExist) {
-			// Snapshot data not found, let the API know the data aren't probably upload yet
 			telemetry.ReportError(ctx, "sandbox files not found", err, telemetry.WithSandboxID(req.GetSandbox().GetSandboxId()))
 
 			return nil, status.Errorf(codes.FailedPrecondition, "sandbox files for '%s' not found", req.GetSandbox().GetSandboxId())

diff --git a/packages/orchestrator/pkg/template/build/layer/create_sandbox.go b/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
--- a/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
+++ b/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
@@ -173,5 +173,7 @@
 		return nil, fmt.Errorf("wait for envd: %w", err)
 	}
 
+	cs.sandboxFactory.Sandboxes.MarkRunning(ctx, sbx)
+
 	return sbx, nil
 }

diff --git a/packages/shared/pkg/grpc/orchestrator/internal_flags.go b/packages/shared/pkg/grpc/orchestrator/internal_flags.go
new file mode 100644
--- /dev/null
+++ b/packages/shared/pkg/grpc/orchestrator/internal_flags.go
@@ -1,0 +1,3 @@
+package orchestrator
+
+const SandboxRebootFromRootfsGRPCMetadataKey = "x-e2b-reboot-from-rootfs"

diff --git a/spec/openapi.yml b/spec/openapi.yml
--- a/spec/openapi.yml
+++ b/spec/openapi.yml
@@ -724,6 +724,9 @@
           type: boolean
           deprecated: true
           description: Automatically pauses the sandbox after the timeout
+        reboot:
+          type: boolean
+          description: Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
 
     ConnectSandbox:
       type: object

diff --git a/tests/integration/internal/api/generated.go b/tests/integration/internal/api/generated.go
--- a/tests/integration/internal/api/generated.go
+++ b/tests/integration/internal/api/generated.go
@@ -709,6 +709,9 @@
 	// Deprecated: this property has been marked as deprecated upstream, but no `x-deprecated-reason` was set
 	AutoPause *bool `json:"autoPause,omitempty"`
 
+	// Reboot Boot from the snapshot filesystem with fresh memory instead of restoring the memory snapshot.
+	Reboot *bool `json:"reboot,omitempty"`
+
 	// Timeout Time to live for the sandbox in seconds.
 	Timeout *int32 `json:"timeout,omitempty"`
 }

You can send follow-ups to the cloud agent here.

@ValentaTomas
ValentaTomas force-pushed the cova/rootfs-reboot-only branch from 8f3c887 to 9ad58bc Compare May 31, 2026 03:01

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Autofix Details

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Reboot resume uses envd timeout
    • Changed createSandboxFromRootfs to calculate sandboxTimeout from request's EndTime and StartTime instead of using the 10-second envd timeout, matching the behavior of normal resume path.

Create PR

Or push these changes by commenting:

@cursor push 2a4a8499e0
Preview (2a4a8499e0)
diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go
--- a/packages/orchestrator/pkg/server/sandboxes.go
+++ b/packages/orchestrator/pkg/server/sandboxes.go
@@ -98,12 +98,14 @@
 		return nil, fmt.Errorf("compare envd version: %w", err)
 	}
 
+	sandboxTimeout := req.GetEndTime().AsTime().Sub(req.GetStartTime().AsTime())
+
 	sbx, err := s.sandboxFactory.CreateSandbox(
 		ctx,
 		config,
 		runtime,
 		maskedTemplate,
-		s.config.EnvdTimeout,
+		sandboxTimeout,
 		"",
 		fc.ProcessOptions{
 			InitScriptPath: constants.SystemdInitPath,

You can send follow-ups to the cloud agent here.

Comment thread packages/orchestrator/pkg/server/sandboxes.go
@ValentaTomas
ValentaTomas force-pushed the cova/rootfs-reboot-only branch 4 times, most recently from 86d868e to fdc34aa Compare May 31, 2026 04:22
Adds an optional `reboot` flag on the resume endpoint that boots the
sandbox from its snapshot filesystem with fresh memory, discarding the
memory snapshot. Useful when memfile restore is slow or corrupted.

The flag flows via gRPC metadata to the orchestrator, which creates an
empty memfile and cold-boots the VM through systemd. Existing paths are
unchanged when the flag is not set.
@ValentaTomas
ValentaTomas force-pushed the cova/rootfs-reboot-only branch from fdc34aa to 558f3fc Compare May 31, 2026 04:26
@ValentaTomas
ValentaTomas marked this pull request as ready for review May 31, 2026 04:35

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Reboot ignores API end time
    • Modified CreateSandbox to accept optional startedAt/endAt parameters and updated the reboot path to pass the API's explicit timestamps instead of using time.Now().

Create PR

Or push these changes by commenting:

@cursor push bd1530ed0f
Preview (bd1530ed0f)
diff --git a/packages/orchestrator/pkg/sandbox/sandbox.go b/packages/orchestrator/pkg/sandbox/sandbox.go
--- a/packages/orchestrator/pkg/sandbox/sandbox.go
+++ b/packages/orchestrator/pkg/sandbox/sandbox.go
@@ -332,6 +332,8 @@
 	processOptions fc.ProcessOptions,
 	apiConfigToStore *orchestrator.SandboxConfig,
 	preBootFn PreBootFn,
+	startedAt *time.Time,
+	endAt *time.Time,
 ) (s *Sandbox, e error) {
 	ctx, span := tracer.Start(ctx, "create sandbox")
 	defer span.End()
@@ -457,6 +459,15 @@
 		memory: uffd.NewNoopMemory(memfileSize, fcPageSize),
 	}
 
+	var actualStartedAt, actualEndAt time.Time
+	if startedAt != nil && endAt != nil {
+		actualStartedAt = *startedAt
+		actualEndAt = *endAt
+	} else {
+		actualStartedAt = time.Now()
+		actualEndAt = time.Now().Add(sandboxTimeout)
+	}
+
 	metadata := &Metadata{
 		internalConfig: internalConfig{
 			EnvdInitRequestTimeout: f.GetEnvdInitRequestTimeout(ctx),
@@ -465,8 +476,8 @@
 		Config:  config,
 		Runtime: runtime,
 
-		startedAt: time.Now(),
-		endAt:     time.Now().Add(sandboxTimeout),
+		startedAt: actualStartedAt,
+		endAt:     actualEndAt,
 	}
 
 	sbx := &Sandbox{

diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go
--- a/packages/orchestrator/pkg/server/sandboxes.go
+++ b/packages/orchestrator/pkg/server/sandboxes.go
@@ -95,6 +95,9 @@
 		timeout = s.config.EnvdTimeout
 	}
 
+	startTime := req.GetStartTime().AsTime()
+	endTime := req.GetEndTime().AsTime()
+
 	sbx, err := s.sandboxFactory.CreateSandbox(
 		ctx,
 		config,
@@ -108,6 +111,8 @@
 		},
 		req.GetSandbox(),
 		nil,
+		&startTime,
+		&endTime,
 	)
 	if err != nil {
 		return nil, err

diff --git a/packages/orchestrator/pkg/template/build/layer/create_sandbox.go b/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
--- a/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
+++ b/packages/orchestrator/pkg/template/build/layer/create_sandbox.go
@@ -154,6 +154,8 @@
 		},
 		nil,
 		cs.preBootFn,
+		nil,
+		nil,
 	)
 	if err != nil {
 		return nil, fmt.Errorf("create sandbox: %w", err)

diff --git a/packages/orchestrator/pkg/template/build/phases/base/provision.go b/packages/orchestrator/pkg/template/build/phases/base/provision.go
--- a/packages/orchestrator/pkg/template/build/phases/base/provision.go
+++ b/packages/orchestrator/pkg/template/build/phases/base/provision.go
@@ -142,7 +142,9 @@
 			Stderr: logsWriter,
 		},
 		nil,
-		nil, // no pre-boot hook for provisioning
+		nil,
+		nil,
+		nil,
 	)
 	if err != nil {
 		return fmt.Errorf("error creating sandbox: %w", err)

You can send follow-ups to the cloud agent here.

Reviewed by Cursor Bugbot for commit 13c2b3c. Configure here.

Comment thread packages/orchestrator/pkg/server/sandboxes.go
@ValentaTomas
ValentaTomas marked this pull request as draft June 1, 2026 02:27
@ValentaTomas
ValentaTomas marked this pull request as ready for review June 1, 2026 05:14
Comment thread packages/orchestrator/pkg/server/sandboxes.go
The reboot path reuses CreateSandbox, which marked the sandbox running
before WaitForEnvd, unlike ResumeSandbox. Add an opt-in
WithDeferredMarkRunning option so the reboot path marks running only
after envd is ready, keeping the two resume paths consistent.
@ValentaTomas
ValentaTomas marked this pull request as draft June 1, 2026 06:03
@ValentaTomas

Copy link
Copy Markdown
Member Author

Closing for now because of other immediate prios.

@ValentaTomas
ValentaTomas deleted the cova/rootfs-reboot-only branch June 6, 2026 08:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant