From f3d91f8c69cc0006ee64c355ac9392d709d4ac6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Pablo=20Villaf=C3=A1=C3=B1ez?= Date: Tue, 3 Dec 2024 10:52:05 +0100 Subject: [PATCH] fix: ensure thumbnail is written into disk --- .../thumbnails/pkg/thumbnail/storage/filesystem.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/services/thumbnails/pkg/thumbnail/storage/filesystem.go b/services/thumbnails/pkg/thumbnail/storage/filesystem.go index 621b2194fb7..8f2f561fb0e 100644 --- a/services/thumbnails/pkg/thumbnail/storage/filesystem.go +++ b/services/thumbnails/pkg/thumbnail/storage/filesystem.go @@ -66,25 +66,28 @@ func (s FileSystem) Put(key string, img []byte) error { if err != nil { return errors.Wrapf(err, "could not create temporary file for \"%s\"", key) } - - _, writeErr := f.Write(img) // write the thumbnail in the temporary file - f.Close() // close the file regardless of the error + defer f.Close() // if there was a problem writing, remove the temporary file - if writeErr != nil { + if _, writeErr := f.Write(img); writeErr != nil { if remErr := os.Remove(f.Name()); remErr != nil { return errors.Wrapf(remErr, "could not cleanup temporary file for \"%s\"", key) } return errors.Wrapf(writeErr, "could not write to temporary file for \"%s\"", key) } + // if there wasn't a problem, ensure the data is written into disk + if synErr := f.Sync(); synErr != nil { + return errors.Wrapf(synErr, "could not sync temporary file data into the disk for \"%s\"", key) + } + // rename the temporary file to the final file if renErr := os.Rename(f.Name(), imgPath); renErr != nil { // if we couldn't rename, remove the temporary file if remErr := os.Remove(f.Name()); remErr != nil { return errors.Wrapf(remErr, "rename failed and could not cleanup temporary file for \"%s\"", key) } - return errors.Wrapf(err, "could not rename temporary file to \"%s\"", key) + return errors.Wrapf(renErr, "could not rename temporary file to \"%s\"", key) } }