From 0559807783fd307c5b825b92653412e82b239c01 Mon Sep 17 00:00:00 2001 From: Jakob van Santen Date: Wed, 11 Feb 2026 17:46:08 +0100 Subject: [PATCH] Always write complete files in sidecar meta provider Some filesystems like dCache don't allow file truncation --- backend/meta/sidecar.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/backend/meta/sidecar.go b/backend/meta/sidecar.go index 1d6a6b4f..a713b115 100644 --- a/backend/meta/sidecar.go +++ b/backend/meta/sidecar.go @@ -75,11 +75,22 @@ func (s SideCar) StoreAttribute(_ *os.File, bucket, object, attribute string, va } attr := filepath.Join(metadir, attribute) - err = os.WriteFile(attr, value, 0666) + tempfile, err := os.CreateTemp(metadir, attribute) + if err != nil { + return fmt.Errorf("failed to create temporary file: %v", err) + } + defer os.Remove(tempfile.Name()) + defer tempfile.Close() + + _, err = tempfile.Write(value) if err != nil { return fmt.Errorf("failed to write attribute: %v", err) } + err = os.Rename(tempfile.Name(), attr) + if err != nil { + return fmt.Errorf("failed to rename temporary file: %v", err) + } return nil }