Skip to content

Commit

Permalink
add option to disable syncing
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Nov 9, 2015
1 parent 3488e4d commit b72b00c
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 32 deletions.
45 changes: 29 additions & 16 deletions flatfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@ type Datastore struct {
path string
// length of the dir splay prefix, in bytes of hex digits
hexPrefixLen int

// sychronize all writes and directory changes for added safety
sync bool
}

var _ datastore.Datastore = (*Datastore)(nil)

func New(path string, prefixLen int) (*Datastore, error) {
func New(path string, prefixLen int, sync bool) (*Datastore, error) {
if prefixLen <= 0 || prefixLen > maxPrefixLen {
return nil, ErrBadPrefixLen
}
Expand Down Expand Up @@ -81,8 +84,10 @@ func (fs *Datastore) makePrefixDir(dir string) error {
// it, the creation of the prefix dir itself might not be
// durable yet. Sync the root dir after a successful mkdir of
// a prefix dir, just to be paranoid.
if err := syncDir(fs.path); err != nil {
return err
if fs.sync {
if err := syncDir(fs.path); err != nil {
return err
}
}
return nil
}
Expand Down Expand Up @@ -149,8 +154,10 @@ func (fs *Datastore) doPut(key datastore.Key, val []byte) error {
if _, err := tmp.Write(val); err != nil {
return err
}
if err := tmp.Sync(); err != nil {
return err
if fs.sync {
if err := tmp.Sync(); err != nil {
return err
}
}
if err := tmp.Close(); err != nil {
return err
Expand All @@ -163,8 +170,10 @@ func (fs *Datastore) doPut(key datastore.Key, val []byte) error {
}
removed = true

if err := syncDir(dir); err != nil {
return err
if fs.sync {
if err := syncDir(dir); err != nil {
return err
}
}
return nil
}
Expand Down Expand Up @@ -214,8 +223,10 @@ func (fs *Datastore) putMany(data map[datastore.Key]interface{}) error {
// Now we sync everything
// sync and close files
for fi, _ := range files {
if err := fi.Sync(); err != nil {
return err
if fs.sync {
if err := fi.Sync(); err != nil {
return err
}
}

if err := fi.Close(); err != nil {
Expand All @@ -237,15 +248,17 @@ func (fs *Datastore) putMany(data map[datastore.Key]interface{}) error {
}

// now sync the dirs for those files
for _, dir := range dirsToSync {
if err := syncDir(dir); err != nil {
return err
if fs.sync {
for _, dir := range dirsToSync {
if err := syncDir(dir); err != nil {
return err
}
}
}

// sync top flatfs dir
if err := syncDir(fs.path); err != nil {
return err
// sync top flatfs dir
if err := syncDir(fs.path); err != nil {
return err
}
}

return nil
Expand Down
32 changes: 16 additions & 16 deletions flatfs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func TestBadPrefixLen(t *testing.T) {
defer cleanup()

for i := 0; i > -3; i-- {
_, err := flatfs.New(temp, 0)
_, err := flatfs.New(temp, i, false)
if g, e := err, flatfs.ErrBadPrefixLen; g != e {
t.Errorf("expected ErrBadPrefixLen, got: %v", g)
}
Expand All @@ -46,7 +46,7 @@ func TestPutBadValueType(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -61,7 +61,7 @@ func TestPut(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -76,7 +76,7 @@ func TestGet(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand Down Expand Up @@ -104,7 +104,7 @@ func TestPutOverwrite(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand Down Expand Up @@ -136,7 +136,7 @@ func TestGetNotFoundError(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -154,7 +154,7 @@ func TestStorage(t *testing.T) {
const prefixLen = 2
const prefix = "7175"
const target = prefix + string(os.PathSeparator) + "71757578.data"
fs, err := flatfs.New(temp, prefixLen)
fs, err := flatfs.New(temp, prefixLen, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand Down Expand Up @@ -209,7 +209,7 @@ func TestHasNotFound(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -227,7 +227,7 @@ func TestHasFound(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -249,7 +249,7 @@ func TestDeleteNotFound(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -264,7 +264,7 @@ func TestDeleteFound(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -289,7 +289,7 @@ func TestQuerySimple(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand Down Expand Up @@ -325,7 +325,7 @@ func TestBatchPut(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -337,7 +337,7 @@ func TestBatchDelete(t *testing.T) {
temp, cleanup := tempdir(t)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
t.Fatalf("New fail: %v\n", err)
}
Expand All @@ -360,7 +360,7 @@ func BenchmarkConsecutivePut(b *testing.B) {
temp, cleanup := tempdir(b)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
b.Fatalf("New fail: %v\n", err)
}
Expand Down Expand Up @@ -390,7 +390,7 @@ func BenchmarkBatchedPut(b *testing.B) {
temp, cleanup := tempdir(b)
defer cleanup()

fs, err := flatfs.New(temp, 2)
fs, err := flatfs.New(temp, 2, false)
if err != nil {
b.Fatalf("New fail: %v\n", err)
}
Expand Down

0 comments on commit b72b00c

Please sign in to comment.