Share one fetch and transcode among concurrent misses (closes #65)
check / check (push) Successful in 5m13s

Requests that missed the same variant at once each fetched and
transcoded it. They now share one call through
golang.org/x/sync/singleflight, keyed on the variant cache key. The
first request processes the variant with a context that does not end
with its own; the others wait for its result, holding no connection or
processing slot, and return as soon as their own context ends. The
processing request waits even then, as before. Each request counts one
miss; the processing counts its fetch and transcode once. A panic
while processing becomes an error instead of stopping pixad.

Model: opus-5-5
This commit is contained in:
2026-10-03 12:42:03 +00:00
committed by sneak
parent df3b0ae12c
commit 082c17ef95
5 changed files with 152 additions and 41 deletions
+11
View File
@@ -29,6 +29,17 @@ P2: security: referer blacklist
# Completed Steps
- 2026-09-29 share concurrent misses (closes #65): requests that miss the same
variant at once (the same cache key, so quality and fit included) share one
upstream fetch or cached source read and one transcode through
`golang.org/x/sync/singleflight`; the first request's processing runs with a
context that does not end with its own, and the others wait for its image or
error holding no upstream connection or processing slot, and stop waiting
when their own context ends; the request doing the processing waits for it
even then, as before; a request whose context has already ended starts
nothing; each request counts one miss, and the processing counts its fetch
and transcode once; a panic while processing becomes an error for every
waiting request instead of stopping pixad; documented in `README.md`.
- 2026-10-02 a plain `docker build .` stamps the tag or short commit, not
`dev` (closes #166): `.dockerignore` lets `.git` into the build context,
without `.git/config`; with no `VERSION` build argument the `Dockerfile`