mirror of
https://github.com/versity/versitygw.git
synced 2026-09-07 08:36:54 +00:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user