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