Stop a transcode whose request has ended before it encodes (closes #243)
Process looked at its context only while it waited for a processing slot, so a transcode went on decoding and encoding, holding its slot, however long after its request's downstream_timeout that took. acquireSlot now gives the slot back and returns the context's error when the context has ended by the time it has a slot, and encode returns that error without beginning. libvips cannot stop an encode once it has begun, so that encode keeps its slot until it finishes. README.md gives how long that can take per output format at the 8192 limits and no longer says the work stops when downstream_timeout ends; TODO.md is corrected the same way. Model: opus-5-5
This commit is contained in:
@@ -38,6 +38,21 @@ P2: security: per-origin rate limiting
|
||||
and the query now have each `%` written as `%25` and each `:` as `%3A`; a path
|
||||
and query holding neither are signed and keyed as before. Signature
|
||||
Specification in `README.md` says so.
|
||||
- 2026-10-15 a transcode stops once its request's `downstream_timeout` has
|
||||
ended, unless it has begun encoding (closes #243): the image processor looked
|
||||
at its context only while it waited for a processing slot, so an image was
|
||||
decoded and encoded, holding the slot, however long after its request's
|
||||
deadline that took. `Process` now returns the context's error, and gives the
|
||||
slot back, when the context has ended by the time it has the slot or before it
|
||||
encodes. libvips cannot stop an encode once it has begun, so that encode keeps
|
||||
its slot until it finishes; the limit of 8192 on each side of the source and
|
||||
of the output bounds how long that takes. With one libvips thread, 8192x8192
|
||||
random pixels take up to about 1 second to encode as JPEG, 15 as PNG, 16 as
|
||||
GIF, 63 as WebP, 110 as AVIF and 96 as JPEG XL, the last three with an alpha
|
||||
channel, plus up to about 11 seconds to decode the source; `README.md` gives
|
||||
these times and no longer says the work stops when `downstream_timeout` ends.
|
||||
The settings of the WebP, AVIF and JPEG XL encoders, which can hold a slot
|
||||
past the default `downstream_timeout` of 60 seconds, are unchanged.
|
||||
- 2026-10-15 the example config allowlists no host (closes #249): it allowlisted
|
||||
`github.com` and `user-images.githubusercontent.com`, where anyone can put an
|
||||
image, so a deployment set up as Getting Started says served those images to
|
||||
@@ -501,11 +516,11 @@ P2: security: per-origin rate limiting
|
||||
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`.
|
||||
then, until it ends, which can be after 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