Skip to content

perf(iac): tune NFS caching and RPC parallelism for persistent volumes#2871

Open
tomassrnka wants to merge 2 commits into
mainfrom
nfs-volume-cache-tuning
Open

perf(iac): tune NFS caching and RPC parallelism for persistent volumes#2871
tomassrnka wants to merge 2 commits into
mainfrom
nfs-volume-cache-tuning

Conversation

@tomassrnka
Copy link
Copy Markdown
Member

Summary

Two changes targeting NFS-volume read latency for sandboxes mounting persistent volumes:

  • Relax default_persistent_volume_type_nfs_mount_options: replace noac, lookupcache=none with actimeo=1, lookupcache=positive. The current options force every stat()/lookup() to round-trip to Filestore, which dominates metadata-heavy workloads. actimeo=1 bounds cross-host attribute staleness to ~1s — below the VM-side NFS client's own cache floor — while eliminating the bulk of redundant GETATTR RPCs. Negative lookups stay uncached so new files created by peer sandboxes still appear promptly. Per-volume_type mount_options overrides remain available for workloads that explicitly need stricter coherency.
  • Raise sunrpc.tcp_slot_table_entries to 128 (default 2) via /etc/modprobe.d/sunrpc.conf on client nodes. With nconnect=7, the host opens 7 TCP connections to Filestore, but the default 2 in-flight RPCs per connection caps total in-flight RPCs at 14 — far too low for many concurrent sandboxes generating uncached metadata RPCs. cmd/simulate-nfs-traffic already validated this experimentally; this wires it into the production startup script. A runtime sysctl -w covers the case where the module is already loaded.

Rationale on the cache change

The previous noac, lookupcache=none defaults were inherited from the original chunks-cache mount options (commit a56c28d, Sep 2025), with the inline comment // disable attribute caching. slower, but more reliable. That mount was later flipped to caching in #1429 (Nov 2025). The persistent-volumes path added in #1893 (Mar 2026, "Add files API") reused the pre-#1429 conservative options without re-evaluating them for the new use case.

In the multi-mount case (N sandboxes attaching the same volume across multiple hosts), noac does bound host-side staleness — but the VM-side NFS client has its own attribute cache that the orchestrator cannot control. Real cross-sandbox staleness is bounded by the VM cache, not the host cache, so removing noac does not meaningfully degrade observable consistency. It does eliminate a Filestore RPC on every metadata op.

lookupcache=positive (not none) preserves prompt discovery of newly-created files from peer sandboxes — important for shared-state coordination workloads — while still caching successful lookups for hot paths.

Why this matters

Sandbox volume reads currently traverse: VM kernel NFSv3 → orchestrator go-nfs proxy → host kernel NFSv3 → Filestore. With noac, lookupcache=none, every ls, stat, open(path), and directory walk on the hot path is a Filestore round-trip (~1–3ms in-zone). For metadata-heavy workloads this dominates end-to-end latency.

Test plan

  • Apply Terraform plan to staging; confirm the diff only touches mount options and the start-client script template
  • Roll a fresh client node in staging and verify cat /sys/module/sunrpc/parameters/tcp_slot_table_entries reports 128
  • Verify mount | grep persistent-volume-types on a staging client shows actimeo=1 and lookupcache=pos in the active mount options
  • Run cmd/simulate-nfs-traffic against a staging persistent volume; compare p50/p99 read latency before/after for metadata-heavy scenarios
  • Sanity-check that a multi-sandbox coordination test (write file from one sandbox, poll for it from another on a different host) still observes the new file within seconds
  • Watch orchestrator.chroot.request.latency and Filestore-side metrics over 24h post-rollout

🤖 Generated with Claude Code

Two changes targeting NFS-volume read latency:

1. Relax the persistent-volume mount cache options from `noac, lookupcache=none`
   to `actimeo=1, lookupcache=positive`. The current options force every stat()
   and lookup to round-trip to Filestore, which dominates metadata-heavy
   workloads. `actimeo=1` bounds cross-host attribute staleness to ~1s — below
   the VM-side NFS client's own cache floor — while eliminating the bulk of
   redundant GETATTR RPCs. `lookupcache=positive` keeps negative lookups
   uncached so new files created by peer sandboxes still appear promptly.
   Cross-sandbox strict coherency, when actually needed, should use NLM locks
   (already enabled via `lock,local_lock=none`) or out-of-band signaling.

2. Raise `sunrpc.tcp_slot_table_entries` to 128 (default 2) via modprobe.d on
   client nodes. With `nconnect=7` the host can open 7 TCP connections to
   Filestore, but the default 2 in-flight RPCs per connection caps total
   in-flight RPCs at 14 — far too low for many concurrent sandboxes generating
   uncached metadata RPCs. `cmd/simulate-nfs-traffic` already validated this
   experimentally; this wires it into the production startup script.
@cursor
Copy link
Copy Markdown

cursor Bot commented May 30, 2026

PR Summary

Medium Risk
Changes production NFS mount defaults and kernel RPC limits for all clients, which can alter cross-host file visibility timing for shared volumes until rolled out and validated.

Overview
This PR speeds up sandbox access to persistent volumes backed by Filestore by changing default host NFS behavior and raising kernel RPC concurrency on Nomad client nodes. Default mount options no longer disable all attribute and lookup caching (noac, lookupcache=none); they now cap attribute cache freshness to about one second (actimeo=1) and allow caching successful path lookups while still revalidating misses (lookupcache=positive), with comments noting that stricter coherency can still use locks or per-volume mount_options overrides. Client startup also writes sunrpc modprobe settings and applies runtime sysctls so each TCP connection can run many more in-flight NFS RPCs (128 slots instead of 2), which is meant to let existing nconnect=7 parallelism actually help metadata-heavy workloads.

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

The [ -d /proc/sys/sunrpc ] guard already handles the "module not loaded"
case; `tcp_slot_table_entries` and `tcp_max_slot_table_entries` have been
stable kernel sysctls for over a decade. A write failure past the guard is
a real misconfiguration we want to surface at boot, not silently swallow.
Copy link
Copy Markdown
Contributor

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

Choose a reason for hiding this comment

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

Code Review

The sunrpc slot table settings in iac/provider-gcp/nomad-cluster/scripts/start-client.sh are module parameters located under /sys/module/sunrpc/parameters/ rather than sysctl parameters under /proc/sys/sunrpc/. Checking /proc/sys/sunrpc and using sysctl -w will fail to apply the runtime settings, so they should be applied by writing directly to the module parameter files if the module is loaded.

Comment on lines +94 to +97
if [ -d /proc/sys/sunrpc ]; then
sysctl -w sunrpc.tcp_slot_table_entries=128
sysctl -w sunrpc.tcp_max_slot_table_entries=128
fi

This comment was marked as low quality.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Gemini is mistaken here. On modern Linux kernels these are exposed via both interfaces — they read/write the same underlying variables in net/sunrpc/xprtsock.c:

  • module parameters: /sys/module/sunrpc/parameters/tcp_{slot,max_slot}_table_entries
  • sysctls: /proc/sys/sunrpc/tcp_{slot,max_slot}_table_entries (i.e. sysctl sunrpc.tcp_slot_table_entries)

The project's own benchmark already uses the sysctl path successfully — see packages/orchestrator/cmd/simulate-nfs-traffic/experiments.go:72-75, which shells out to sysctl -w sunrpc.tcp_slot_table_entries=128 via setSysFs. That validates the path works on the kernels we run.

Also: the suggested replacement reintroduces || true, which was explicitly removed in the second commit on this branch — the [ -d ... ] guard already covers the "module not loaded" case, and silently swallowing errors past it would hide real misconfiguration.

Keeping the current implementation.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 30, 2026

❌ 4 Tests Failed:

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

Flake rate in main: 42.25% (Passed 723 times, Failed 529 times)

Stack Traces | 15.5s run time
=== RUN   TestSandboxRapidSnapshotForkChain
=== PAUSE TestSandboxRapidSnapshotForkChain
=== CONT  TestSandboxRapidSnapshotForkChain
    sandbox_rapid_pause_resume_test.go:43: 
        	Error Trace:	.../api/sandboxes/snapshot_template_test.go:37
        	            				.../api/sandboxes/sandbox_rapid_pause_resume_test.go:43
        	Error:      	Not equal: 
        	            	expected: 201
        	            	actual  : 500
        	Test:       	TestSandboxRapidSnapshotForkChain
--- FAIL: TestSandboxRapidSnapshotForkChain (15.53s)
github.com/e2b-dev/infra/tests/integration/internal/tests/orchestrator::TestSandboxMemoryIntegrity

Flake rate in main: 57.78% (Passed 735 times, Failed 1006 times)

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

Flake rate in main: 57.90% (Passed 725 times, Failed 997 times)

Stack Traces | 200s 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:1250}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stdout:"Total memory: 985 MB\nUsed memory before tmpfs mount: 192 MB\nFree memory before tmpfs mount: 792 MB\nMemory to use in integrity test (60% of free, min 64MB): 475 MB\n"}}
Executing command bash in sandbox ijpf3cr7t0z5dw5j3z1gw (user: root)
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"475+0 records in\n475+0 records out\n498073600 bytes (498 MB, 475 MiB) copied, 1.79998 s, 277 MB/s\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"C"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"o"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"m"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"m"}}
    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:"n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"d"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"b"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"i"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"g"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"i"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"m"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"d"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:":"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\""}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"dd"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"if=/dev/urandom"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"of=/mnt/testfile"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"bs=1M"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"count=475"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\""}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"U"}}
    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:"e"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"r"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"i"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"m"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:" "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"("}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"sec"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"onds): "}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"0.00"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\n"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"\t"}}
    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:"y"}}
    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:"t"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"em time (seconds): 1.79\n\tPercent of CPU this job got: 99%\n\tElapsed (wall clock) time (h:mm:ss or m:ss): 0:01.80\n\tAverage shared text size (kbytes): 0\n\tAverage unshared data size (kbytes): 0\n\tAverage stack size (kbyte"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"s): 0\n\tAverag"}}
    sandbox_memory_integrity_test.go:70: Command [bash] output: event:{data:{stderr:"e total size (kbytes): 0\n\tMaximum resident set size (kbytes): 2736\n\tAverage resident set size (kbytes): 0\n\tMajor (requiring I/O) page faults: 3\n\tMinor (reclaiming a frame) page faults: 346\n\tVoluntary context switches: 4\n\tInvoluntary context switches: 75\n\tSwaps: 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: 670 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 ilwxh9vuli5hv4ucimhbt
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1267}}
Executing command bash in sandbox i1otzm6t41kqgshc0ost6 (user: root)
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{data:{stdout:"1293c3af24d6e50f3c6d1b99c69183bd35bd3913b7eaae5e0074ca871d6d0571\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 ilwxh9vuli5hv4ucimhbt
    sandbox_memory_integrity_test.go:80: Command [bash] output: event:{start:{pid:1271}}
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (user: root)
Executing command bash in sandbox ilwxh9vuli5hv4ucimhbt (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 ilwxh9vuli5hv4ucimhbt: 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 (199.55s)
github.com/e2b-dev/infra/tests/integration/internal/tests/proxies::TestSandboxAutoResumeViaProxy

Flake rate in main: 43.71% (Passed 729 times, Failed 566 times)

Stack Traces | 13s run time
=== RUN   TestSandboxAutoResumeViaProxy
=== PAUSE TestSandboxAutoResumeViaProxy
=== CONT  TestSandboxAutoResumeViaProxy
    auto_resume_test.go:116: 
        	Error Trace:	.../tests/proxies/auto_resume_test.go:116
        	Error:      	Received unexpected error:
        	            	Get "http://localhost:3002": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
        	Test:       	TestSandboxAutoResumeViaProxy
--- FAIL: TestSandboxAutoResumeViaProxy (13.01s)

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

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