fileutil: Sync on HFS/OSX needs to be handled differently.

A call file.Sync on OSX doesn't guarantee actual persistence on
physical drive media as the data can be cached in physical drive's
buffers. Hence calls to file.Sync need to be replaced with
fcntl(F_FULLFSYNC).
This commit is contained in:
Ajit Yagaty
2016-04-18 00:25:21 -07:00
parent ea6a747fc1
commit 8b6de5f85d
7 changed files with 59 additions and 8 deletions

View File

@ -21,6 +21,11 @@ import (
"syscall"
)
// Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform.
func Fsync(f *os.File) error {
return f.Sync()
}
// Fdatasync is similar to fsync(), but does not flush modified metadata
// unless that metadata is needed in order to allow a subsequent data retrieval
// to be correctly handled.