Skip to content

Commit e3ef7c6

Browse files
svallerue2b-bot[bot]
authored andcommitted
build(embed): pin the platform builds that refuse a pause the disk cannot hold
GitOrigin-RevId: 12d33afd170f6bb7a9bcd2c8ea30a97e114261bb
1 parent 2ae80b7 commit e3ef7c6

4 files changed

Lines changed: 50 additions & 22 deletions

File tree

‎embed/compose/.env‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
# is tagged, and each Embed release moves these lines to it: the trailing
33
# marker is what the release tooling rewrites. Everything without a marker is
44
# pinned by hand.
5-
E2B_API_IMAGE=us-docker.pkg.dev/e2b-artifacts/api/api:v0.14.202609170000-908833e4c12 # x-release-please-version
6-
E2B_DB_MIGRATOR_IMAGE=us-docker.pkg.dev/e2b-artifacts/api/db-migrator:v0.14.202609170000-908833e4c12 # x-release-please-version
7-
E2B_CLIENT_PROXY_IMAGE=us-docker.pkg.dev/e2b-artifacts/client-proxy/client-proxy:v0.3.202609130627-59497eb9134 # x-release-please-version
8-
E2B_CLICKHOUSE_MIGRATOR_IMAGE=us-docker.pkg.dev/e2b-artifacts/clickhouse-migrator/clickhouse-migrator:v0.4.202609130627-59497eb9134 # x-release-please-version
5+
E2B_API_IMAGE=us-docker.pkg.dev/e2b-artifacts/api/api:v0.14.202610051633-d1cd3db3890 # x-release-please-version
6+
E2B_DB_MIGRATOR_IMAGE=us-docker.pkg.dev/e2b-artifacts/api/db-migrator:v0.14.202610051633-d1cd3db3890 # x-release-please-version
7+
E2B_CLIENT_PROXY_IMAGE=us-docker.pkg.dev/e2b-artifacts/client-proxy/client-proxy:v0.3.202610051633-d1cd3db3890 # x-release-please-version
8+
E2B_CLICKHOUSE_MIGRATOR_IMAGE=us-docker.pkg.dev/e2b-artifacts/clickhouse-migrator/clickhouse-migrator:v0.4.202610051633-d1cd3db3890 # x-release-please-version
99
# dashboard-api is a platform image and moves with the release like the api it
1010
# serves; it must come from the same source commit as the api and db-migrator.
11-
E2B_DASHBOARD_API_IMAGE=us-docker.pkg.dev/e2b-artifacts/dashboard-api/dashboard-api:v0.7.202609170000-908833e4c12 # x-release-please-version
11+
E2B_DASHBOARD_API_IMAGE=us-docker.pkg.dev/e2b-artifacts/dashboard-api/dashboard-api:v0.7.202610051633-d1cd3db3890 # x-release-please-version
1212
# The dashboard has its own release line (github.com/e2b-dev/dashboard) and is
1313
# pinned by hand.
1414
E2B_DASHBOARD_IMAGE=us-docker.pkg.dev/e2b-artifacts/dashboard/dashboard:v0.2.1
15-
E2B_ORCHESTRATOR_VERSION=v0.16.202609212023-35cc85a6c61 # x-release-please-version
15+
E2B_ORCHESTRATOR_VERSION=v0.16.202610051633-d1cd3db3890 # x-release-please-version
1616
# envd has its own release line; the kernel, Firecracker and BusyBox are not
1717
# released here at all. Bumping one adds its checksum row to
1818
# scripts/fetch-artifacts.sh first.

‎embed/compose/README.md‎

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@ the hub is [`../README.md`](../README.md).
5151
show what you have; an
5252
older Compose rejects the compose file with an error on `required:` before
5353
anything starts.
54-
- 12 GiB RAM recommended and 20 GiB free disk. With an orchestrator release that
55-
reads `PAUSE_ADMISSION_DISK_HEADROOM_MIB` (the pin here predates it), a pause
56-
the disk cannot hold is refused before it starts, keeping 1 GiB free, instead
57-
of failing midway. `HUGEPAGES=2048` reserves
54+
- 12 GiB RAM recommended and 20 GiB free disk. A pause the disk cannot hold is
55+
refused before it starts, keeping 1 GiB free
56+
(`PAUSE_ADMISSION_DISK_HEADROOM_MIB`), instead of failing midway; the
57+
estimate counts the sandbox's whole memory, so a large sandbox needs that
58+
much free disk to pause. `HUGEPAGES=2048` reserves
5859
4 GiB of that RAM for sandboxes, and `preflight` does not check RAM, so on
5960
a smaller host the first signal is `host-setup` failing with `FIX: give the
6061
host more memory (12 GiB recommended) or lower HUGEPAGES`. Lower
@@ -391,12 +392,9 @@ restarts; a single machine has nowhere to drain them to.
391392
- The team API key rotates only through the seed (set `TEAM_API_KEY`, or
392393
remove the key file, then `up`), not through an API call, and the old key
393394
keeps working for up to five minutes afterwards.
394-
- With an api release that reads `PAUSE_REFUSAL_RESTORE` (the pin here
395-
predates it), a pause the node refuses — it is still persisting the
396-
sandbox's parent — leaves the sandbox running and answers 503; retry it.
397-
Until then a refused pause ends the old way, with the sandbox killed and a
398-
500. A full disk is not a refusal in the pinned orchestrator: that pause
399-
fails after it has started and ends the same old way.
395+
- A pause the node refuses — it is still persisting the sandbox's parent, or
396+
the disk cannot hold the capture — leaves the sandbox running and answers
397+
503 (`PAUSE_REFUSAL_RESTORE`); retry it.
400398
- Container logs are capped: every service keeps at most five 50 MiB log
401399
files (`x-logging` in `compose.yaml`), so `docker compose logs` shows about
402400
the last 250 MiB per service and older lines are gone. Without the cap a

‎embed/kubernetes/kustomization.yaml‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ resources:
1212
images:
1313
- name: E2B_API_IMAGE
1414
newName: us-docker.pkg.dev/e2b-artifacts/api/api
15-
newTag: v0.14.202609170000-908833e4c12 # x-release-please-version
15+
newTag: v0.14.202610051633-d1cd3db3890 # x-release-please-version
1616
- name: E2B_DB_MIGRATOR_IMAGE
1717
newName: us-docker.pkg.dev/e2b-artifacts/api/db-migrator
18-
newTag: v0.14.202609170000-908833e4c12 # x-release-please-version
18+
newTag: v0.14.202610051633-d1cd3db3890 # x-release-please-version
1919
- name: E2B_CLIENT_PROXY_IMAGE
2020
newName: us-docker.pkg.dev/e2b-artifacts/client-proxy/client-proxy
21-
newTag: v0.3.202609130627-59497eb9134 # x-release-please-version
21+
newTag: v0.3.202610051633-d1cd3db3890 # x-release-please-version
2222
- name: E2B_CLICKHOUSE_MIGRATOR_IMAGE
2323
newName: us-docker.pkg.dev/e2b-artifacts/clickhouse-migrator/clickhouse-migrator
24-
newTag: v0.4.202609130627-59497eb9134 # x-release-please-version
24+
newTag: v0.4.202610051633-d1cd3db3890 # x-release-please-version
2525
- name: E2B_DASHBOARD_API_IMAGE
2626
newName: us-docker.pkg.dev/e2b-artifacts/dashboard-api/dashboard-api
27-
newTag: v0.7.202609170000-908833e4c12 # x-release-please-version
27+
newTag: v0.7.202610051633-d1cd3db3890 # x-release-please-version
2828
- name: E2B_DASHBOARD_IMAGE
2929
newName: us-docker.pkg.dev/e2b-artifacts/dashboard/dashboard
3030
newTag: v0.2.1
@@ -44,7 +44,7 @@ images:
4444
configMapGenerator:
4545
- name: e2b-versions
4646
literals:
47-
- E2B_ORCHESTRATOR_VERSION=v0.16.202609212023-35cc85a6c61 # x-release-please-version
47+
- E2B_ORCHESTRATOR_VERSION=v0.16.202610051633-d1cd3db3890 # x-release-please-version
4848
- E2B_ENVD_VERSION=v0.9.202609130627-59497eb9134
4949
- E2B_KERNEL_VERSION=vmlinux-6.1.177_5008931
5050
- E2B_FIRECRACKER_VERSION=v1.14-0.2.0

‎embed/tests/pins.bats‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,36 @@ setup() {
2222
fi
2323
}
2424

25+
# A refused pause keeps the sandbox running only once the api reads
26+
# PAUSE_REFUSAL_RESTORE, and a pause the disk cannot hold is refused up front
27+
# only once the orchestrator reads PAUSE_ADMISSION_DISK_HEADROOM_MIB; both
28+
# shipped in the builds of 2026-10-05, which compose.yaml sets both variables
29+
# for. Older pins ignore the variables and a refusal kills the sandbox, so
30+
# the pins must not slide back below those builds.
31+
@test "api pin is at least the build that reads PAUSE_REFUSAL_RESTORE" {
32+
grep -q 'PAUSE_REFUSAL_RESTORE: "true"' compose/compose.yaml
33+
api_tag="$(sed -n 's/^E2B_API_IMAGE=.*:\(v[^ #]*\).*/\1/p' compose/.env)"
34+
[ -n "$api_tag" ]
35+
min=v0.14.202610051633
36+
lowest="$(printf '%s\n%s\n' "$min" "$api_tag" | sort -V | head -1)"
37+
if [ "$lowest" != "$min" ]; then
38+
echo "E2B_API_IMAGE is $api_tag; PAUSE_REFUSAL_RESTORE is read from api build $min on" >&2
39+
return 1
40+
fi
41+
}
42+
43+
@test "orchestrator pin is at least the build that reads PAUSE_ADMISSION_DISK_HEADROOM_MIB" {
44+
grep -q 'PAUSE_ADMISSION_DISK_HEADROOM_MIB: "1024"' compose/compose.yaml
45+
orch_tag="$(sed -n 's/^E2B_ORCHESTRATOR_VERSION=\(v[^ #]*\).*/\1/p' compose/.env)"
46+
[ -n "$orch_tag" ]
47+
min=v0.16.202610051633
48+
lowest="$(printf '%s\n%s\n' "$min" "$orch_tag" | sort -V | head -1)"
49+
if [ "$lowest" != "$min" ]; then
50+
echo "E2B_ORCHESTRATOR_VERSION is $orch_tag; PAUSE_ADMISSION_DISK_HEADROOM_MIB is read from orchestrator build $min on" >&2
51+
return 1
52+
fi
53+
}
54+
2555
# The whole tag, not the SemVer prefix: an auto-deploy tag carries the commit
2656
# after a hyphen, and two images from different commits must not compare equal.
2757
@test "api and db-migrator pins move together" {

0 commit comments

Comments
 (0)