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
store/s3: superseded export generations are never swept #183
store/s3's SweepGenerations is return nil (sandboxd/store/s3/s3.go), while the dir backend ages out superseded export generations about an hour after a re-publish. On S3 a re-publish keeps every prior generation until the whole id is deleted, and docs/deploy.md documents exactly that ("Re-publish retains prior export generations until Delete").
That is unbounded for the one workflow that re-publishes by design: a promoted template name (tp_ id) that a team re-promotes daily keeps a full VM export per promote, forever, unless someone deletes the template. Checkpoints (ck_ ids) are published once and are not affected.
Fix shape: the same grace-then-sweep contract the dir backend has, over object keys under <prefix>/<id>/exports/<gen>/: list generations, keep the current one and anything younger than the grace, delete the rest; run from the hourly sweep that already calls SweepGenerations. storetest should gain a retention test both backends run, since today only the dir behaviour is pinned. In-flight fetches that resolved an older generation are covered by the same grace the dir backend relies on.
Until then operators can bound growth with an S3 lifecycle rule on exports/ prefixes, which the deploy page should say explicitly alongside the existing rule for orphan uploads.
Closing by decision: sandboxd will not reclaim S3 checkpoint storage itself. #364 replaced per-generation export prefixes with content-addressed chunks shared within a claim's lineage, and its Delete is soft: chunks and manifests stay until an operator removes them. The offline reclamation procedure (stop every node on the prefix, inventory the live metas' manifests, delete everything else and unreferenced chunks) is documented in docs/deploy.md, Reclaiming S3 storage. A bucket lifecycle expiry rule is unsafe with chunks and should not be used.
Activity
CMGS commentedon Oct 18, 2026
Closing by decision: sandboxd will not reclaim S3 checkpoint storage itself. #364 replaced per-generation export prefixes with content-addressed chunks shared within a claim's lineage, and its Delete is soft: chunks and manifests stay until an operator removes them. The offline reclamation procedure (stop every node on the prefix, inventory the live metas' manifests, delete everything else and unreferenced chunks) is documented in docs/deploy.md, Reclaiming S3 storage. A bucket lifecycle expiry rule is unsafe with chunks and should not be used.