[Bug Bash] Guest operations (read/write/shell/MCP) on a deleted or non-existent environment fail with Unimplemented instead of NotFound
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 74/100
Línea de trabajo
Start in internal/apiservice/wakeretry.go, especially ensureAwake around lines 80–92, and trace how the wake probe handles gRPC status codes and deleting actor state. Reproduce with a deleted or non-existent environment using read, write, shell, or MCP tools/call; finish when these requests report NotFound and deleting actors fail without waiting for the full wake budget.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary & Root Cause
Running read, write, shell, or MCP tools/call against a deleted or non-existent environment fails with gRPC code Unimplemented (ate-env: env: rpc error: code = Unimplemented desc = actor ate-env/<id> not found) instead of NotFound (ate-env: env: not found: ...).
Root Cause
- In
internal/apiservice/wakeretry.go:80-89,ensureAwakeprobes the guest viaatenet-routerand assumes any error code other thancodes.Unavailablecame from a live guest:_, err := probe.GetProcess(ctx, &ateenvv1alpha.GetProcessRequest{ProcessId: "ate-env-wake-probe"}) if status.Code(err) != codes.Unavailable { // Anything else, NotFound for the probe id included, came from // the guest itself. return nil } state, serr := s.actorState(ctx, atespace, id) - When an actor does not exist (or has finished deleting),
atenet-routerresponds with a plain HTTP404 Not Found(actor <atespace>/<id> not found) without agrpc-statustrailer. - Per the gRPC over HTTP/2 specification,
grpc-gomaps an HTTP404response withoutgrpc-statustocodes.Unimplemented(12), notcodes.Unavailableorcodes.NotFound. - Because
status.Code(err) == codes.Unimplemented != codes.Unavailable,ensureAwakereturnsnilimmediately without callings.actorState(ctx, atespace, id)(whose doc comment at:122-124explicitly notes: "A deleted environment surfaces here as NotFound (through toGRPCError), which is the right answer to a caller still holding its handle"). - The caller's subsequent RPC (
ReadFile,WriteFile,StartProcess) then hits the same HTTP404fromatenet-routerand surfaces rawcodes.Unimplementedto the client.
Versions
agent-substrate/env:40a6c63(also present onmain@d579fd0)agent-substrate/substrate:ddb46651
Steps to Reproduce
Test Case 1: Read from a deleted environment (Bug Bash Flow — Step 9: Delete)
ate-env create $USER
echo "hello $(date)" | ate-env $USER write /data/note.txt
# Step 9 from the bug bash doc:
ate-env delete $USER
ate-env $USER read /data/note.txt
- Expected: Fails with
NotFound:ate-env: env: not found: environment "chenyiwang" not found - Actual: Fails with
codes.Unimplemented(exit code 1):ate-env: env: rpc error: code = Unimplemented desc = actor ate-env/chenyiwang not found
Test Case 2: Run read, write, or shell on a non-existent environment (Bad Inputs)
ate-env does-not-exist read /data/note.txt
echo "hi" | ate-env does-not-exist write /data/note.txt
ate-env does-not-exist shell 'echo hi'
- Expected: All three commands fail with
NotFound(ate-env: env: not found: ...). - Actual: All three commands fail with
codes.Unimplemented(exit code 1):ate-env: env: rpc error: code = Unimplemented desc = actor ate-env/does-not-exist not found
Test Case 3: Call MCP tools/call on a deleted or non-existent environment
curl -s http://localhost:7777/v1alpha/envs/does-not-exist/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"shell","arguments":{"command":"echo hi"}}}'
- Expected: Error message indicates the environment was not found (
not found). - Actual: Tool result reports
code = Unimplemented:{"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"env: rpc error: code = Unimplemented desc = actor ate-env/does-not-exist not found"}],"isError":true}}
Suggested Fix
- In
ensureAwake(internal/apiservice/wakeretry.go:80-89), do not treatcodes.Unimplementedfrom the wake probe as a live guest response (sinceatenet-routerreturns HTTP 404 ->codes.Unimplementedwhen the target actor is unknown, andGetProcessis implemented byate-env-guest), or fall through tos.actorState(ctx, atespace, id)so a missing/deleted actor surfaces ascodes.NotFound. - In
ensureAwake(internal/apiservice/wakeretry.go:90-92), also fail fast whenstate == ateapipb.ActorState_ACTOR_STATE_DELETINGinstead of polling untilDefaultWakeBudget(2m) expires.
- Lenguaje dominante
- Go
- Estrellas
- 71
- Forks
- 17
- Merge medio
- 21 h 36 min
- PR fusionados (30 d)
- 19
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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 agent-substrate/env
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
agent-substrate/env#123 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
agent-substrate/env#119 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
agent-substrate/env#118 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 57/100
agent-substrate/env#117 ·
Los mantenedores suelen responder en 1 día
-
bug substrate
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
agent-substrate/env#115 ·
Los mantenedores suelen responder en 1 día
Todos los issues de agent-substrate/env
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
SAP/crossplane-provider-btp#1175 ·
Los mantenedores suelen responder en 1 día
-
adk: stream concatenation errors bypass retry and failoverPosiblemente ocupada @OUAO-FRANK la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
google/osv-scalibr#2586 ·
Los mantenedores suelen responder en 2 días
-
Add an MCP server: imageatAbiertoneeds-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
stacklok/toolhive-catalog#1890 ·
Los mantenedores suelen responder en 1 día
-
heap: pushing an item that is already queued corrupts the indexPosiblemente ocupada @lbarrosby la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
kubernetes-sigs/kwok#1800 ·
Los mantenedores suelen responder en 1 día