Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

fix(api): GetSandboxesSandboxID omits VolumeMounts and sets empty string Alias for paused sandboxes

Aperta Adatta ai principianti
#3,575 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
go
Ambito
api

Direzione di ricerca

Inizia da packages/api/internal/handlers/sandbox_get.go, in particolare dal mapping dei sandbox in pausa intorno alle righe 235-265, e confronta la gestione di VolumeMounts e Alias con quella di sandboxes_list.go. Aggiungi la protezione per un orchestrator nil e copri il caso di uno snapshot in pausa in sandbox_get_test.go. Il lavoro è completo quando le risposte in pausa preservano i volume mounts, omettono un alias vuoto e non causano un panic con un orchestrator nil.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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:

  1. Missing VolumeMounts in Paused Sandbox Response:
    When a sandbox is paused, lastSnapshot.Snapshot.Config.VolumeMounts contains all persistent volume mount mappings. However, GetSandboxesSandboxID constructs api.SandboxDetail without populating the VolumeMounts field, resulting in "volume_mounts": null or omission in the JSON response. In contrast, the list endpoint GET /v2/sandboxes (packages/api/internal/handlers/sandboxes_list.go:L292) correctly maps VolumeMounts for paused sandboxes via convertFromDBMountsToAPIMounts.

  2. Malformed Alias Serialized as "" (Empty String) instead of null / Omission:
    When a paused sandbox has no aliases, pausedAlias := firstAlias(lastSnapshot.Aliases) returns "" (empty string). sandbox.Alias = &pausedAlias then assigns a non-nil pointer to "". When serialized to JSON, this emits "alias": "" instead of null or omitting the property, violating the OpenAPI schema contract for optional string fields.

  3. Potential Nil Pointer Panic on a.orchestrator:
    GetSandboxesSandboxID attempts to call a.orchestrator.GetSandbox without verifying a.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

  1. Create a sandbox with persistent volume mounts: POST /sandboxes with volume_mounts: [{"name": "my-vol", "path": "/mnt/data"}].
  2. Pause the sandbox: POST /sandboxes/{id}/pause.
  3. Query the paused sandbox: GET /sandboxes/{id}.
  4. Observed:
    • volume_mounts is null or missing from the JSON payload.
    • alias is "" (empty string) if no alias was assigned.
  5. Expected:
    • volume_mounts contains [{"name": "my-vol", "path": "/mnt/data"}].
    • alias is null or 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
Lingua principale
Go
Stelle
1.6k
Fork
438
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di e2b-dev/runtime

Tutte le issue di e2b-dev/runtime

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.