Skip to content

Commit f547358

Browse files
committed
drop O_SYNC|O_DIRECT in favour of fsync call, also sync dir
1 parent d6bf5e5 commit f547358

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

backends/fs/fs.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,11 @@ func (b *Backend) Store(ctx context.Context, name string, data []byte) error {
7373
}
7474
fullPath := filepath.Join(b.rootPath, name)
7575
tmpPath := fullPath + ".tmp" // ignored by List()
76-
flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC | os.O_SYNC | syscall.O_DIRECT
77-
f, err := os.OpenFile(tmpPath, flags, 0644)
78-
if err != nil {
76+
if err := writeFile(tmpPath, data); err != nil {
7977
return err
8078
}
81-
_, err = f.Write(data)
82-
if err1 := f.Close(); err1 != nil && err == nil {
83-
err = err1
79+
if err := syncDir(b.rootPath); err != nil {
80+
return err
8481
}
8582
return os.Rename(tmpPath, fullPath)
8683
}
@@ -130,3 +127,27 @@ func init() {
130127
return New(opt)
131128
})
132129
}
130+
131+
func writeFile(name string, data []byte) error {
132+
f, err := os.Create(name)
133+
if err != nil {
134+
return err
135+
}
136+
defer f.Close()
137+
if _, err = f.Write(data); err != nil {
138+
return err
139+
}
140+
if err = f.Sync(); err != nil {
141+
return err
142+
}
143+
return nil
144+
}
145+
146+
func syncDir(name string) error {
147+
dir, err := os.Open(name)
148+
if err != nil {
149+
return err
150+
}
151+
defer dir.Close()
152+
return dir.Sync()
153+
}

0 commit comments

Comments
 (0)