Commit 1c9ae2b7 authored by Ajit Jagtap's avatar Ajit Jagtap
Browse files

Merge branch 'ab_Fix_AtomicFileWrite' into 'devbranch'

Fix: File is being used by another process error on atomic write.

See merge request !131
parents 47629f92 e76d3161
2 merge requests!134Mep release271219,!131Fix: File is being used by another process error on atomic write.
Showing with 14 additions and 2 deletions
...@@ -644,7 +644,13 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error { ...@@ -644,7 +644,13 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error {
return err return err
} }
defer tmpFile.Close() closeTempFile := true
defer func() {
if closeTempFile {
tmpFile.Close()
}
}()
n, err := tmpFile.Write(data) n, err := tmpFile.Write(data)
if err != nil { if err != nil {
...@@ -671,7 +677,13 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error { ...@@ -671,7 +677,13 @@ func writeFileSafely(filePath string, data []byte, perm os.FileMode) error {
return errormdl.Wrap("can't set filemode on tempfile: " + tmpFileName + ", error: " + err.Error()) return errormdl.Wrap("can't set filemode on tempfile: " + tmpFileName + ", error: " + err.Error())
} }
} }
loggermdl.LogError(tmpFileName) // loggermdl.LogError(tmpFileName)
// set closeTempFile to false and close the tempFile. The file will be opened in AtomicReplaceFile function.
// If we don't close the file here, we will get "file is being used by another process" error
closeTempFile = false
tmpFile.Close()
if err := AtomicReplaceFile(tmpFileName, filePath); err != nil { if err := AtomicReplaceFile(tmpFileName, filePath); err != nil {
loggermdl.LogError("Atomic replace failed - ", err) loggermdl.LogError("Atomic replace failed - ", err)
return errormdl.Wrap("cannot replace " + filePath + " with " + tmpFileName) return errormdl.Wrap("cannot replace " + filePath + " with " + tmpFileName)
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment