Sync cached files and refuse ones left empty or partial (closes #252)
check / check (push) Waiting to run
check / check (push) Waiting to run
A crash could leave a cached source or transformed image empty or cut short, and pixa then served it, or fetched it again forever. Source and transformed image files, and the .meta file beside each transformed image, are now written under a temporary name, synced, renamed into place and their directory synced; a failed directory sync removes the renamed file. The reconciliation pass compares each cached file's size with the size its row records and removes a file that is empty or of another size, with its rows and a warning. Requests compare no sizes. Not verified by a test: the syncs, and the removal after a failed sync. Model: opus-5-5
This commit was merged in pull request #263.
This commit is contained in:
@@ -30,6 +30,18 @@ P2: security: per-origin rate limiting
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-10-15 a cached file left empty or partial is no longer served, or fetched
|
||||
again on every request (closes #252). Source and transformed image files, and
|
||||
each transformed image's `.meta` file, are synced to disk before they are
|
||||
renamed into place, and their directory after; the `.meta` file is written
|
||||
before the image, and a failed directory sync removes the renamed file. The
|
||||
reconciliation pass, at startup and every five minutes, removes a cached
|
||||
source or transformed image whose file is empty, or not the size the database
|
||||
records for it, with its rows and a warning naming the file, so the next
|
||||
request fetches the source or converts the image again; requests compare no
|
||||
sizes. Storing a source over a file of another size replaces that file. A
|
||||
source that fails to decode is not removed for that alone: a damaged upstream
|
||||
image would then be fetched on every request.
|
||||
- 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
|
||||
|
||||
Reference in New Issue
Block a user