From 87f0e3ea25d4c5c6f7ce0b3016f805edab9063e7 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Fri, 20 Jan 2023 15:57:09 +0300 Subject: [PATCH] [#2208] fstree: Rename file after write Signed-off-by: Evgenii Stratonikov --- pkg/local_object_storage/blobstor/fstree/fstree.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/local_object_storage/blobstor/fstree/fstree.go b/pkg/local_object_storage/blobstor/fstree/fstree.go index a51acbbc6..08ec75ace 100644 --- a/pkg/local_object_storage/blobstor/fstree/fstree.go +++ b/pkg/local_object_storage/blobstor/fstree/fstree.go @@ -239,16 +239,17 @@ func (t *FSTree) Put(prm common.PutPrm) (common.PutRes, error) { prm.RawData = t.Compress(prm.RawData) } - err := t.writeFile(p, prm.RawData) + tmpPath := p + "#" + err := t.writeFile(tmpPath, prm.RawData) if err != nil { var pe *fs.PathError if errors.As(err, &pe) && pe.Err == syscall.ENOSPC { err = common.ErrNoSpace - _ = os.RemoveAll(p) + _ = os.RemoveAll(tmpPath) } } - return common.PutRes{StorageID: []byte{}}, err + return common.PutRes{StorageID: []byte{}}, os.Rename(tmpPath, p) } func (t *FSTree) writeFlags() int {