filecachegc.runPass suppresses eviction logs when FreedBytes < target and consecutiveShortfalls > 3
Los mantenedores suelen responder en 1 día
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
Lee cmd/atelet/internal/filecachegc/filecachegc.go, especialmente la rama de shortfall en las líneas 298–313 y los cálculos del pass en las líneas 274–293. Sigue cómo los recuentos de eviction llegan al registro de shortfall y a la métrica recordPass, y luego revisa las pruebas existentes de file cache GC. El trabajo estará hecho cuando un pass que elimine entradas emita un registro de eviction incluso cuando se limiten las notificaciones de shortfall, y una prueba cubra este comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary & Root Cause
The shortfall check (FreedBytes < target) comes before any eviction-specific logging, and the throttle covers the whole branch. When --sandbox-asset-cache-max-bytes is smaller than the pinned entries, every pass is a shortfall. After the third pass, a pass that does evict an entry (here a 164.9 MiB gVisor runtime) logs nothing unless its counter happens to be a multiple of 12. The eviction is visible only in the recordPass metric.
Affected Code Locations
cmd/atelet/internal/filecachegc/filecachegc.go:43-48:shortfallWarnLimit = 3,shortfallReminderEvery = 12cmd/atelet/internal/filecachegc/filecachegc.go:274-293: the pass computesstatsandevictedcmd/atelet/internal/filecachegc/filecachegc.go:298-313: the shortfall branch logs only whenconsecutiveShortfalls <= 3orconsecutiveShortfalls%12 == 0, whether or notevicted > 0. Then it returnscmd/atelet/internal/filecachegc/filecachegc.go:311: the eviction is still counted in therecordPassmetric
if stats.FreedBytes < target {
g.consecutiveShortfalls++
switch {
case g.consecutiveShortfalls <= shortfallWarnLimit:
slog.WarnContext(ctx, "File cache GC could not reach its budget", ...)
case g.consecutiveShortfalls%shortfallReminderEvery == 0:
slog.WarnContext(ctx, "File cache GC still over its budget; ...", ...)
}
g.instruments.recordPass(ctx, g.name, ateattr.FileCacheGCOutcomeShortfall, evicted)
return
}
Detailed Reproduction Guide
- Run atelet with a cache budget smaller than one runtime (see the patch in S-12):
--sandbox-asset-cache-max-bytes=1048576,--sandbox-asset-cache-gc-period=5s,--sandbox-asset-cache-min-age=0s. - Wait for more than 3 consecutive shortfall passes while two runtimes are linked (
skipped_linked: 2). - Unlink one runtime, for example by switching the default (
kubectl patch sandboxconfig gvisor-default --type=merge -p '{"spec":{"defaultVersion":"v5"}}'), and follow the GC log:
kubectl logs -n ate-system <atelet-pod> -c atelet -f | grep -E 'File cache GC|Wrote worker sandbox runtimes'
Expected vs. Actual Behavior
- Expected: Any pass that actually evicts entries (
evicted > 0) logs the eviction, whatever the shortfall throttle says. - Actual: The evicting pass emits no log line.
cache_bytessimply drops between two throttled reminders.
Observed Output & Logs
{"time":"2026-10-27T00:53:53.659828907Z","level":"WARN","msg":"File cache GC still over its budget; what remains is linked by a consumer, younger than the min age, or busy","cache":"sandbox_asset","cache_bytes":329842688,"max_bytes":1048576,"target_bytes":328898970,"freed_bytes":0,"evicted":0,"skipped_linked":2,"skipped_young":0,"skipped_busy":0,"dry_run":false,"took":169717,"consecutive":12}
{"time":"2026-10-27T00:53:59.09342848Z","level":"INFO","msg":"Wrote worker sandbox runtimes","pod_uid":"b30f8613-ad63-401f-9753-68c97bbe9dbd","sandbox_config":"gvisor-default","sandbox_class":"gvisor","default_bundle_hash":"sha256:078445e3672a4bad894f713a43f519e50bff3b9b09a257b8b30a1ecc6ebb5b58","restorable_runtimes":1}
{"time":"2026-10-27T00:54:53.659679459Z","level":"WARN","msg":"File cache GC still over its budget; what remains is linked by a consumer, younger than the min age, or busy","cache":"sandbox_asset","cache_bytes":164921344,"max_bytes":1048576,"target_bytes":163977626,"freed_bytes":0,"evicted":0,"skipped_linked":1,"skipped_young":0,"skipped_busy":0,"dry_run":false,"took":114997,"consecutive":24}
{"time":"2026-10-27T02:24:22.658293993Z","msg":"File cache GC still over its budget; …","cache_bytes":164921344,"freed_bytes":0,"evicted":0,"skipped_linked":1,"consecutive":12}
{"time":"2026-10-27T02:25:22.658130264Z","msg":"File cache GC still over its budget; …","cache_bytes":164921344,"freed_bytes":0,"evicted":0,"skipped_linked":1,"consecutive":24}
- Lenguaje dominante
- Go
- Estrellas
- 5.9k
- Forks
- 637
- Merge medio
- 2 d 10 h
- PR fusionados (30 d)
- 556
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la 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 agent-substrate/substrate
-
area/cli kind/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
agent-substrate/substrate#3406 ·
Los mantenedores suelen responder en 1 día
-
k8s-credential-provider manifest is missing ate-otel-config envFrom, failing OTLP metric exports to [::1]:4317 / 127.0.0.1:4317 every 60sPosiblemente ocupada @ericcurtin la tomó hoy. Abiertoarea/dev-infra area/observability area/security kind/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
agent-substrate/substrate#3282 ·
Los mantenedores suelen responder en 1 día
-
docs/egress-trust-bundle.md documents ActorTemplate as a Kubernetes CRD rejected by kubectl ate create actor-template and uses mismatched trust-bundle mount pathsPosiblemente ocupada @moficodes la tomó hace 1 día. Abiertoarea/network area/security kind/docs
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
agent-substrate/substrate#3278 ·
Los mantenedores suelen responder en 1 día
-
[bug bash] Actor logs are controlled by Kubernetes RBAC on the pool namespace, not atespace rolesAbiertoarea/cli area/security bug-bash kind/docs
Dificultad 1/5 1-3 horas Aptitud para principiantes 80/100
agent-substrate/substrate#3242 ·
Los mantenedores suelen responder en 1 día
-
area/security bug-bash kind/docs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 83/100
agent-substrate/substrate#3235 ·
Los mantenedores suelen responder en 1 día
Todos los issues de agent-substrate/substrate
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 2 días
-
test-failure
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
teramoby/speedle-plus#129 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
containerd/containerd#14485 ·
Los mantenedores suelen responder en 1 día
-
bug needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día