diff options
Diffstat (limited to 'weed/storage/backend/disk_file_darwin.go')
| -rw-r--r-- | weed/storage/backend/disk_file_darwin.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/weed/storage/backend/disk_file_darwin.go b/weed/storage/backend/disk_file_darwin.go new file mode 100644 index 000000000..76be810db --- /dev/null +++ b/weed/storage/backend/disk_file_darwin.go @@ -0,0 +1,43 @@ +//go:build darwin +// +build darwin + +package backend + +import ( + "syscall" + + "golang.org/x/sys/unix" +) + +const ( + // Using default File.Sync function, same as fcntl(fd, F_FULLFSYNC) + DM_SYNC = 1 + + // Using syscall.Fsync function, for MacOS this is not safe but is very fast. + DM_FSYNC = 2 + + // Using fcntl with F_BARRIERFSYNC parameter, for more details please refer: + // https://developer.apple.com/documentation/xcode/reducing-disk-writes + DM_BFSYNC = 3 + + F_BARRIERFSYNC = 85 +) + +var ( + // By default using F_BARRIERFSYNC + DarwinSyncMode = DM_BFSYNC +) + +func (df *DiskFile) Sync() error { + switch DarwinSyncMode { + case DM_SYNC: + return df.File.Sync() + case DM_BFSYNC: + fd := df.File.Fd() + _, err := unix.FcntlInt(fd, F_BARRIERFSYNC, 0) + return err + default: + fd := df.File.Fd() + return syscall.Fsync(int(fd)) + } +} |
