feat(registry): run the seanfarm fork of zot with a bounded S3 retry #17

Merged
binjovi-bot merged 1 commit from feat/zot-seanfarm-fork into trunk 2026-09-02 11:20:46 +00:00
Owner

The registry now runs the seanfarm fork of zot: codeberg.org/someara/zot:v2.1.15-seanfarm.1@sha256:8963f24d2bac6e0d346292f15f95174d4a92cd3d72c68ba93b94cc100f3defc5.

Why: in-cluster pushes fail a few times a day with blob upload unknown. MinIO answers a request with HTTP 499 / ClientDisconnected while the request context is still alive; aws-sdk-go v1 makes zero retries for that class, and zot v2.1.15 then removes the whole upload session.

The fork is upstream v2.1.15 plus a bounded retry (3 attempts, ~0.5 s worst case) around the idempotent s3 driver calls (Reader, GetContent, Stat, List, Writer(append=true)), retried only for code ClientDisconnected or status 499. Source: codeberg someara/zot-src (Forgejo mirror sean/zot-src), tag v2.1.15-seanfarm.1, commit 97d35c01. Built in-cluster by seanfarm Shipwright Build zot (BuildRun zot-build-v2115-seanfarm1, Succeeded, retry tests pass in the test stage). Digest verified equal from the BuildRun status and skopeo; labels, entrypoint, cmd, port and --version (commit, full binary-type) checked.

Base stays v2.1.15 because of project-zot/zot#4336. Pulled from codeberg, never registry.sean.farm (the registry cannot pull itself).

Files: manifests/registry/manifest.yaml (image + comment), tests/zot-binjovi-publisher.sh (digest pin, rejects the upstream image and a self-pull), docs/REGISTRY-AVAILABILITY.md (S3 transient errors section). bash tests/check.sh passes.

Rollback: revert this PR and release zot again.

Verification over 3-7 days in Loki (namespace registry, container zot): transient s3 error, retrying about equal to the ClientDisconnected control; unexpected error, removing .uploads/ files == 0; client blob upload unknown == 0.

https://claude.ai/code/session_01LeVatedQ4sCA1u6LHjo7B5

The registry now runs the seanfarm fork of zot: `codeberg.org/someara/zot:v2.1.15-seanfarm.1@sha256:8963f24d2bac6e0d346292f15f95174d4a92cd3d72c68ba93b94cc100f3defc5`. Why: in-cluster pushes fail a few times a day with `blob upload unknown`. MinIO answers a request with HTTP 499 / `ClientDisconnected` while the request context is still alive; aws-sdk-go v1 makes zero retries for that class, and zot v2.1.15 then removes the whole upload session. The fork is upstream v2.1.15 plus a bounded retry (3 attempts, ~0.5 s worst case) around the idempotent s3 driver calls (`Reader`, `GetContent`, `Stat`, `List`, `Writer(append=true)`), retried only for code `ClientDisconnected` or status 499. Source: codeberg `someara/zot-src` (Forgejo mirror `sean/zot-src`), tag `v2.1.15-seanfarm.1`, commit 97d35c01. Built in-cluster by seanfarm Shipwright Build `zot` (BuildRun `zot-build-v2115-seanfarm1`, Succeeded, retry tests pass in the test stage). Digest verified equal from the BuildRun status and skopeo; labels, entrypoint, cmd, port and `--version` (commit, full binary-type) checked. Base stays v2.1.15 because of project-zot/zot#4336. Pulled from codeberg, never registry.sean.farm (the registry cannot pull itself). Files: `manifests/registry/manifest.yaml` (image + comment), `tests/zot-binjovi-publisher.sh` (digest pin, rejects the upstream image and a self-pull), `docs/REGISTRY-AVAILABILITY.md` (S3 transient errors section). `bash tests/check.sh` passes. Rollback: revert this PR and release zot again. Verification over 3-7 days in Loki (namespace registry, container zot): `transient s3 error, retrying` about equal to the `ClientDisconnected` control; `unexpected error, removing .uploads/ files` == 0; client `blob upload unknown` == 0. https://claude.ai/code/session_01LeVatedQ4sCA1u6LHjo7B5
feat(registry): run the seanfarm fork of zot with a bounded S3 retry
All checks were successful
binjovi/ci Binjovi completed the frozen plan
d210701be3
In-cluster pushes fail a few times a day with `blob upload unknown`. MinIO
answers a request with HTTP 499 / ClientDisconnected while the request
context is still alive; aws-sdk-go v1 makes zero retries for that class, and
zot v2.1.15 then removes the whole upload session.

The registry now runs codeberg.org/someara/zot:v2.1.15-seanfarm.1, pinned by
digest. It is upstream v2.1.15 plus a bounded retry (3 attempts, about 0.5 s
worst case) around the idempotent s3 driver calls, retried only for code
ClientDisconnected or status 499. Source: codeberg someara/zot-src, branch
seanfarm, tag v2.1.15-seanfarm.1 (commit 97d35c01). Built in-cluster by the
seanfarm Shipwright Build `zot`; its Dockerfile runs the retry tests in a
build stage.

The base stays v2.1.15 because of project-zot/zot#4336. The image is pulled
from codeberg, never from registry.sean.farm: the registry cannot pull
itself. tests/zot-binjovi-publisher.sh pins the digest and rejects the
upstream image and a self-pull. docs/REGISTRY-AVAILABILITY.md gets a section
on the chain, the predicate, the log line to count, and the rebuild path.

Claude-Session: https://claude.ai/code/session_01LeVatedQ4sCA1u6LHjo7B5
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/zot!17
No description provided.