Browse Source

sync call to write file, avoid vif loading error

fix https://github.com/chrislusf/seaweedfs/issues/2633
pull/2643/head
chrislu 3 years ago
parent
commit
76e297d64f
  1. 2
      weed/storage/volume_info/volume_info.go
  2. 17
      weed/util/file_util.go

2
weed/storage/volume_info/volume_info.go

@ -75,7 +75,7 @@ func SaveVolumeInfo(fileName string, volumeInfo *volume_server_pb.VolumeInfo) er
return fmt.Errorf("marshal to %s: %v", fileName, marshalErr)
}
writeErr := os.WriteFile(fileName, []byte(text), 0755)
writeErr := util.WriteFile(fileName, []byte(text), 0755)
if writeErr != nil {
return fmt.Errorf("fail to write %s : %v", fileName, writeErr)
}

17
weed/util/file_util.go

@ -95,3 +95,20 @@ func FileNameBase(filename string) string {
}
return filename[:lastDotIndex]
}
// Copied from os.WriteFile(), adding file sync.
// see https://github.com/golang/go/issues/20599
func WriteFile(name string, data []byte, perm os.FileMode) error {
f, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
return err
}
_, err = f.Write(data)
if err1 := f.Sync(); err1 != nil && err == nil {
err = err1
}
if err1 := f.Close(); err1 != nil && err == nil {
err = err1
}
return err
}
Loading…
Cancel
Save