You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ateom-gvisor: runsc delete fails after most checkpoints because cleanup runs before the sentry is reaped #2180
After runsc checkpoint, cleaning up the actor's containers often fails with the error:
runsc ... delete -force glutton
W container.go:1001] stopping container: destroying container "glutton":
connecting to control server at PID <pid>: connection refused
WARN failed to terminate workload after checkpoint
err: ... while deleting "glutton" container: while running `runsc delete`: exit status 128
#2107 stops leaking actor cgroups after checkpoint and delete. However, that change only contains the damage: the delete still fails and logs a WARN, and the race below is still there.
Cause
runsc checkpoint _pause makes the sentry exit and close its control socket.
The sentry is a child of ateom, which runs as the pod's init process. It stays a zombie until ateom's reaper (internal/childreap) collects it.
The reaper never reaps while a reaper.RunCommand subcommand is running, so it can't steal that subcommand's exit status.
terminateWorkload runs about ten runsc subcommands back to back, roughly 8 ms apart, so the reaper often gets no chance to run.
Each subcommand gets connection refused and then checks whether the sandbox PID exists. A zombie's PID still exists, so runsc decides the sandbox is running. delete -force <app container> then tries to destroy the container through the dead socket and exits with status 128.
When the reaper does get a turn before the delete, the log shows Sandbox isn't running anymore and every delete succeeds.
Reproduce
Suspend a few running gVisor actors, then count cleanup failures in each worker's log:
kubectl ate suspend actor <actor> -a <atespace>
kubectl -n <ns> logs <worker> --since=3m | grep -c 'failed to terminate workload after checkpoint'
Activity
haiyanmeng commentedon Oct 4, 2026
Benjamin Elder (@BenTheElder) , please take a look at the
TODOsin the issue and help decide whether any of them should be GA blockers. Thanks!haiyanmeng commentedon Oct 5, 2026
Per my offline sync with Benjamin Elder (@BenTheElder) , this should be a GA blocker. Benjamin Elder (@BenTheElder) is going to looking into this.
BenTheElder commentedon Oct 9, 2026
I will submit a fix next week, definitely before GA.
run ateom under minimal init (agent-substrate#2626)
BenTheElder commentedon Oct 20, 2026
#2695 follow-up