aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-03-23 09:42:21 -0600
committerBen Johnson <benbjohnson@yahoo.com>2014-03-23 09:42:21 -0600
commitfd8a13e837f23972abb72bb6b462e53ff7c717ae (patch)
tree724643c895e3be7f6078b2284513b78f5d07bf0a
parentMerge pull request #75 from Slacken/32bit_build_fails_bucket_go_67 (diff)
parentCall fdatasync/fsync after writing out non-meta pages (diff)
downloaddedo-fd8a13e837f23972abb72bb6b462e53ff7c717ae.tar.gz
dedo-fd8a13e837f23972abb72bb6b462e53ff7c717ae.tar.xz
Merge branch 'fdatasync' of https://github.com/tv42/bolt into fsync
-rw-r--r--sync_linux.go10
-rw-r--r--sync_std.go10
-rw-r--r--tx.go3
3 files changed, 23 insertions, 0 deletions
diff --git a/sync_linux.go b/sync_linux.go
new file mode 100644
index 0000000..351b65a
--- /dev/null
+++ b/sync_linux.go
@@ -0,0 +1,10 @@
+package bolt
+
+import (
+ "os"
+ "syscall"
+)
+
+func fdatasync(f *os.File) error {
+ return syscall.Fdatasync(int(f.Fd()))
+}
diff --git a/sync_std.go b/sync_std.go
new file mode 100644
index 0000000..d858b23
--- /dev/null
+++ b/sync_std.go
@@ -0,0 +1,10 @@
+// +build !linux
+
+package bolt
+
+import "os"
+
+// Fall back to syncing metadata too.
+func fdatasync(f *os.File) error {
+ return f.Sync()
+}
diff --git a/tx.go b/tx.go
index 5b2b14d..181444e 100644
--- a/tx.go
+++ b/tx.go
@@ -329,6 +329,9 @@ func (t *Tx) write() error {
return err
}
}
+ if err := fdatasync(t.db.file); err != nil {
+ return err
+ }
// Clear out page cache.
t.pages = make(map[pgid]*page)