Merge pull request #415 from ehang-io/dev

fix file not close before rename
pull/446/head v0.26.3
ffdfgdfg 2020-02-19 23:51:16 +08:00 committed by GitHub
commit 2f9ee7130f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 1 deletions

View File

@ -3,6 +3,7 @@ package file
import (
"encoding/json"
"errors"
"github.com/astaxie/beego/logs"
"os"
"path/filepath"
"strings"
@ -151,7 +152,6 @@ func storeSyncMapToFile(m sync.Map, filePath string) {
if err != nil {
panic(err)
}
defer file.Close()
m.Range(func(key, value interface{}) bool {
var b []byte
var err error
@ -191,6 +191,11 @@ func storeSyncMapToFile(m sync.Map, filePath string) {
return true
})
_ = file.Sync()
_ = file.Close()
// must close file first, then rename it
err = os.Rename(filePath+".tmp", filePath)
if err != nil {
logs.Error(err, "store to file err, data will lost")
}
// replace the file, maybe provides atomic operation
}