@@ -34,18 +34,20 @@ type Datastore struct {
34
34
path string
35
35
// length of the dir splay prefix, in bytes of hex digits
36
36
hexPrefixLen int
37
+ sync bool
37
38
}
38
39
39
40
var _ datastore.Datastore = (* Datastore )(nil )
40
41
41
- func New (path string , prefixLen int ) (* Datastore , error ) {
42
+ func New (path string , prefixLen int , sync bool ) (* Datastore , error ) {
42
43
if prefixLen <= 0 || prefixLen > maxPrefixLen {
43
44
return nil , ErrBadPrefixLen
44
45
}
45
46
fs := & Datastore {
46
47
path : path ,
47
48
// convert from binary bytes to bytes of hex encoding
48
49
hexPrefixLen : prefixLen * hex .EncodedLen (1 ),
50
+ sync : sync ,
49
51
}
50
52
return fs , nil
51
53
}
@@ -77,12 +79,12 @@ func (fs *Datastore) makePrefixDir(dir string) error {
77
79
return err
78
80
}
79
81
80
- // In theory, if we create a new prefix dir and add a file to
81
- // it, the creation of the prefix dir itself might not be
82
- // durable yet. Sync the root dir after a successful mkdir of
83
- // a prefix dir, just to be paranoid.
84
- if err := syncDir ( fs . path ); err != nil {
85
- return err
82
+ if fs . sync {
83
+ // In theory, if we create a new prefix dir and add a file to
84
+ // it, the creation of the prefix dir itself might not be
85
+ // durable yet. Sync the root dir after a successful mkdir of
86
+ // a prefix dir, just to be paranoid.
87
+ return syncDir ( fs . path )
86
88
}
87
89
return nil
88
90
}
@@ -149,8 +151,10 @@ func (fs *Datastore) doPut(key datastore.Key, val []byte) error {
149
151
if _ , err := tmp .Write (val ); err != nil {
150
152
return err
151
153
}
152
- if err := tmp .Sync (); err != nil {
153
- return err
154
+ if fs .sync {
155
+ if err := tmp .Sync (); err != nil {
156
+ return err
157
+ }
154
158
}
155
159
if err := tmp .Close (); err != nil {
156
160
return err
@@ -163,8 +167,8 @@ func (fs *Datastore) doPut(key datastore.Key, val []byte) error {
163
167
}
164
168
removed = true
165
169
166
- if err := syncDir ( dir ); err != nil {
167
- return err
170
+ if fs . sync {
171
+ return syncDir ( dir )
168
172
}
169
173
return nil
170
174
}
@@ -214,8 +218,10 @@ func (fs *Datastore) putMany(data map[datastore.Key]interface{}) error {
214
218
// Now we sync everything
215
219
// sync and close files
216
220
for fi , _ := range files {
217
- if err := fi .Sync (); err != nil {
218
- return err
221
+ if fs .sync {
222
+ if err := fi .Sync (); err != nil {
223
+ return err
224
+ }
219
225
}
220
226
221
227
if err := fi .Close (); err != nil {
@@ -237,15 +243,15 @@ func (fs *Datastore) putMany(data map[datastore.Key]interface{}) error {
237
243
}
238
244
239
245
// now sync the dirs for those files
240
- for _ , dir := range dirsToSync {
241
- if err := syncDir (dir ); err != nil {
242
- return err
246
+ if fs .sync {
247
+ for _ , dir := range dirsToSync {
248
+ if err := syncDir (dir ); err != nil {
249
+ return err
250
+ }
243
251
}
244
- }
245
252
246
- // sync top flatfs dir
247
- if err := syncDir (fs .path ); err != nil {
248
- return err
253
+ // sync top flatfs dir
254
+ return syncDir (fs .path )
249
255
}
250
256
251
257
return nil
0 commit comments