feat(rustfs): deliver the zot key and mirror the registry bucket #508

Merged
binjovi-bot merged 1 commit from sean/rustfs-zot into trunk 2026-09-09 21:05:19 +00:00 AGit
Owner

Stage 4 source side: 165 GiB in 21,490 objects, 95% of everything left to move. Delivery chain plus mirror; sean/zot is repointed once the copy is green. Pruning is deliberately not a prerequisite -- inline GC blocks registry reads, so the bucket moves at its present size. Capacity lands near 79% and the mirror cannot gate on it, so watch df during the first pass. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76

Stage 4 source side: 165 GiB in 21,490 objects, 95% of everything left to move. Delivery chain plus mirror; sean/zot is repointed once the copy is green. Pruning is deliberately not a prerequisite -- inline GC blocks registry reads, so the bucket moves at its present size. Capacity lands near 79% and the mirror cannot gate on it, so watch df during the first pass. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
feat(rustfs): deliver the zot key and mirror the registry bucket
All checks were successful
binjovi/ci Binjovi completed the frozen plan
cf1571bd2e
Stage 4, and the last bucket that carries real volume. Source side only: this
delivers the scoped credential to namespace registry and copies the bucket.
sean/zot still reads MinIO after this lands and is repointed once the mirror
is green.

THE BIG ONE. MEASURED 2026-09-09: 165 GiB in 21,490 objects, an average object
of 7.9 MiB -- 95% of everything left to move, and it is the container registry
every node pulls from, including during a kernel roll. At the ~85 MiB/s
measured on forgejo's copy the bulk transfer is roughly 35 minutes. This is the
byte case; the object count is trivial beside it.

CAPACITY IS NOT COMFORTABLE AND THE MIRROR CANNOT CHECK IT. RustFS has about
422 GiB raw free, and 165 GiB at the measured 2.004x erasure ratio needs
~331 GiB, landing near 79% full. The ratio was measured on large objects like
these so it should hold, but anything above 2.56x does not fit at all, and
`mc mirror` has no capacity gate -- a full pool fails writes mid-transfer.
Watch df on the drives during the first pass instead of trusting arithmetic.

PRUNING IS NOT A PREREQUISITE, which is why this proceeds now. Pruning would
have made the copy three times faster, but inline collection holds zot's single
image-store write lock and blocks registry reads, so it stays disabled until
collection has a bounded lock duration. The bucket moves at its present size
and pruning becomes a question RustFS inherits.

The residual bound means something different here. Zot's own garbage collection
is off, so almost nothing disappears from under the mirror; objects arrive from
image pushes. A single push writes tens of blobs, so the bound of 64 is roughly
a couple of builds in flight during a 35-minute pass -- and the cutover run,
with pushes paused, must still reach zero.

Both class guards cover the new files on arrival: 5 identities, 5 mirrors, 40
behaviours executed against stubbed binaries.

Claude-Session: https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/seanfarm!508
No description provided.