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:
@@ -660,10 +660,10 @@ func (c *Cache) readHitAndMissCounts(ctx context.Context, stats *CacheStats) err
|
||||
// hold: it reads the content type from the variant's .meta file and
|
||||
// keeps it in metaCache, unless a StoreVariant has put one there
|
||||
// meanwhile, as the store's is newer. A read that finds no .meta file,
|
||||
// as one can between a store's writing of the variant file and of its
|
||||
// .meta file, serves application/octet-stream and keeps nothing, so
|
||||
// metaCache only ever holds a type read from a .meta file or passed to
|
||||
// StoreVariant.
|
||||
// as one can when the store's .meta write failed or an eviction removed
|
||||
// the file after the read opened the variant, serves
|
||||
// application/octet-stream and keeps nothing, so metaCache only ever
|
||||
// holds a type read from a .meta file or passed to StoreVariant.
|
||||
func (c *Cache) loadVariantWithMeta(
|
||||
cacheKey VariantKey,
|
||||
) (io.ReadCloser, int64, string, error) {
|
||||
|
||||
Reference in New Issue
Block a user