fix: close temp file before rename in sidecar StoreAttribute

On Windows, a file apparently cannot be renamed while an open
handle to it exists.
The previous code used defer tempfile.Close(), which meant the
handle was still open when os.Rename was called, producing:

  failed to rename temporary file: The process cannot access
  the file because it is being used by another process.

Fix by closing the file explicitly before the rename.

Fixes #2021
This commit is contained in:
Ben McClelland
2026-04-14 11:19:18 -07:00
parent 393477aafd
commit 81f0158a48
+7 -1
View File
@@ -80,13 +80,19 @@ func (s SideCar) StoreAttribute(_ *os.File, bucket, object, attribute string, va
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 {
tempfile.Close()
return fmt.Errorf("failed to write attribute: %v", err)
}
// Close explicitly before rename to prevent error on Windows:
// The process cannot access the file because it is being used by another process.
if err = tempfile.Close(); err != nil {
return fmt.Errorf("failed to close temporary file: %v", err)
}
err = os.Rename(tempfile.Name(), attr)
if err != nil {
return fmt.Errorf("failed to rename temporary file: %v", err)