Issue 108: the registry has no garbage collection, and two doors make it harder to add #91
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
status: open
|
||||
opened: 2026-09-23
|
||||
located-in: []
|
||||
fixed-by:
|
||||
amended-design:
|
||||
---
|
||||
|
||||
# 108 — The registry has no garbage collection, and two doors make it harder to add
|
||||
|
||||
## What was observed
|
||||
|
||||
Reviewing the conversion that gives the mesh's image registry its public, authenticated name,
|
||||
2026-09-23. The predecessor's registry module ran a maintenance routine on a timer: stop the
|
||||
registry, `garbage-collect --delete-untagged`, restart, with a tag-retention step in front. The
|
||||
mesh's registry has no such routine — it never did — and the conversion carried the settings the
|
||||
routine depends on but not the routine.
|
||||
|
||||
The conversion also settled the public door as a **second registry process** on the same
|
||||
filesystem, because the store's own door must stay account-free inside the mesh
|
||||
([ADR 0082](../../02-DECISIONS/0082-the-registry-is-reached-by-name-and-trusted-by-the-overlay.md)).
|
||||
The registry's garbage collector requires every writer stopped while it runs. There are now two.
|
||||
Nothing in the mesh's vocabulary says *stop these two containers, run a one-shot against their
|
||||
shared volume, start them again*; a `run-once` step runs beside containers, not instead of them.
|
||||
|
||||
Meanwhile the merged store holds 53 repositories and every build the mesh will ever make pushes
|
||||
another layer set into it. Disk grows without bound.
|
||||
|
||||
## Why it matters beyond this instance
|
||||
|
||||
A registry without garbage collection is a slow leak that presents as a full disk on a node that
|
||||
serves everything else. The predecessor knew this and scheduled for it; the mesh forgot it in the
|
||||
conversion because the routine was a script beside the module, not a resource in it — the shape
|
||||
[issue 098](../098-taking-a-module-replaces-a-configuration-nobody-compared/00-report.md) describes
|
||||
for configuration, here for behaviour.
|
||||
|
||||
It also asks something of the module system: a maintenance window over several containers is a
|
||||
real thing services need, and the mesh cannot express one.
|
||||
|
||||
## Open questions
|
||||
|
||||
- Should the module system gain a maintenance step — a one-shot that quiesces named containers,
|
||||
runs, and restores them — or is this better solved by a registry that does not need its writers
|
||||
stopped (a storage backend the mesh does not run today)?
|
||||
- Tag retention before GC: the predecessor kept the last N tags per repository; the mesh names
|
||||
images by digest and moves by version — is retention "the digests no recorded build names"?
|
||||
- Who owns the routine when the store and its public door are two modules — the store, since the
|
||||
volume is its?
|
||||
Reference in New Issue
Block a user