Share one fetch and transcode among concurrent misses (closes #65)
check / check (push) Successful in 6m19s
check / check (push) Successful in 6m19s
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 ignores its cancellation but keeps its deadline; 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, up to its deadline. Each request counts one miss; the processing counts its fetch and transcode once. A panic while processing is reported through the request's Sentry hub, when there is one, and becomes an error instead of stopping pixad. Model: opus-5-5
This commit was merged in pull request #160.
This commit is contained in:
@@ -29,6 +29,18 @@ 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 ignores its
|
||||
cancellation but keeps its deadline, 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, up to its deadline; 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 is reported to Sentry when
|
||||
`sentry_dsn` is set and becomes an error for every waiting request instead of
|
||||
stopping pixad; documented in `README.md`.
|
||||
- 2026-09-29 only the image routes send CORS headers (closes #98): the CORS
|
||||
middleware, with the `access_control_allow_origin` origin, moved from the
|
||||
router root onto a `/v1` subrouter holding `/v1/image/` and `/v1/e/`, where it
|
||||
|
||||
Reference in New Issue
Block a user