fix(api): GetSandboxesSandboxID omits VolumeMounts and sets empty string Alias for paused sandboxes
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en packages/api/internal/handlers/sandbox_get.go, especialmente en el mapeo de sandboxes pausados alrededor de las líneas 235-265, y compara su manejo de VolumeMounts y Alias con sandboxes_list.go. Añade la protección frente a un orchestrator nil y cubre el caso de un snapshot pausado en sandbox_get_test.go. Se considera terminado cuando las respuestas pausadas conservan los volume mounts, omiten un alias vacío y no provocan un panic con un orchestrator nil.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
When querying sandbox metadata via GET /sandboxes/{sandboxID} (packages/api/internal/handlers/sandbox_get.go), paused or stopped sandboxes loaded from lastSnapshot exhibit two payload inconsistencies with the OpenAPI specification and list endpoints:
-
Missing
VolumeMountsin Paused Sandbox Response:
When a sandbox is paused,lastSnapshot.Snapshot.Config.VolumeMountscontains all persistent volume mount mappings. However,GetSandboxesSandboxIDconstructsapi.SandboxDetailwithout populating theVolumeMountsfield, resulting in"volume_mounts": nullor omission in the JSON response. In contrast, the list endpointGET /v2/sandboxes(packages/api/internal/handlers/sandboxes_list.go:L292) correctly mapsVolumeMountsfor paused sandboxes viaconvertFromDBMountsToAPIMounts. -
Malformed
AliasSerialized as""(Empty String) instead ofnull/ Omission:
When a paused sandbox has no aliases,pausedAlias := firstAlias(lastSnapshot.Aliases)returns""(empty string).sandbox.Alias = &pausedAliasthen assigns a non-nil pointer to"". When serialized to JSON, this emits"alias": ""instead ofnullor omitting the property, violating the OpenAPI schema contract for optional string fields. -
Potential Nil Pointer Panic on
a.orchestrator:
GetSandboxesSandboxIDattempts to calla.orchestrator.GetSandboxwithout verifyinga.orchestrator != nil, causing panics in isolated unit tests and environments where the orchestrator client is nil.
Root Cause
In packages/api/internal/handlers/sandbox_get.go:L235-L265:
// Current implementation for paused sandboxes:
pausedAlias := firstAlias(lastSnapshot.Aliases)
sandbox = api.SandboxDetail{
// VolumeMounts is omitted completely
Alias: &pausedAlias, // Points to "" when len(Aliases) == 0
...
}
Comparison of metadata mapping across endpoints:
| Endpoint | Paused Sandbox VolumeMounts |
Empty Alias Representation |
|---|---|---|
GET /v2/sandboxes (sandboxes_list.go) |
Populated via convertFromDBMountsToAPIMounts |
nil (omitted) |
GET /sandboxes/{id} (Current) |
nil (omitted) |
&"" (serialized as "") |
GET /sandboxes/{id} (Expected) |
Populated from Config.VolumeMounts |
nil (omitted) |
Reproduction Steps
- Create a sandbox with persistent volume mounts:
POST /sandboxeswithvolume_mounts: [{"name": "my-vol", "path": "/mnt/data"}]. - Pause the sandbox:
POST /sandboxes/{id}/pause. - Query the paused sandbox:
GET /sandboxes/{id}. - Observed:
volume_mountsisnullor missing from the JSON payload.aliasis""(empty string) if no alias was assigned.
- Expected:
volume_mountscontains[{"name": "my-vol", "path": "/mnt/data"}].aliasisnullor omitted when no alias exists.
Technical Context
- File affected:
packages/api/internal/handlers/sandbox_get.go - Subsystem: Control Plane API / Sandboxes
- Impact: Medium (API Schema compliance, client SDK consistency, and paused sandbox metadata fidelity)
Proposed Changes
| # | Change | File(s) Affected | Complexity |
|---|---|---|---|
| 1 | Add nil check on a.orchestrator != nil before calling GetSandbox |
sandbox_get.go |
Trivial |
| 2 | Extract volumeMounts from lastSnapshot.Snapshot.Config.VolumeMounts and pass to api.SandboxDetail |
sandbox_get.go |
Low |
| 3 | Populate sandbox.Alias only when len(lastSnapshot.Aliases) > 0, leaving it nil otherwise |
sandbox_get.go |
Trivial |
| 4 | Add unit test asserting VolumeMounts and nil alias on paused snapshot |
sandbox_get_test.go |
Low |
- Lenguaje dominante
- Go
- Estrellas
- 1.6k
- Forks
- 438
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de e2b-dev/runtime
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
sandbox cache: StartRemoving state transition not broadcast, all allocations see stale Running state Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Todos los issues de e2b-dev/runtime
Issues similares
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
microsoft/agent-framework-go#1179 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
[Bug]: OLLAMA_KEEP_ALIVE="5m" / "24h" crashes Ollama embedding and vision models with ValueError Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
infiniflow/ragflow#20223 · 1 reacción ·
-
bug needs triage pkg/translator/faro
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
open-telemetry/opentelemetry-collector-contrib#51484 · 1 comentario ·