use proper batching for filestore puts
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Jan 24, 2017 at 14:17 UTC
e12adeca2be1797d7eca0749512b43b0ab9718d8
1 file changed
+17
-4
filestore/fsrefstore.go
+17
-4
@@ -142,7 +142,15 @@ func (f *FileManager) Has(c *cid.Cid) (bool, error) {
142
return f.ds.Has(dsk)
143
}
144
145
+type putter interface {
146
+ Put(ds.Key, interface{}) error
147
+}
148
+
149
func (f *FileManager) Put(b *posinfo.FilestoreNode) error {
150
+ return f.putTo(b, f.ds)
151
+}
152
+
153
+func (f *FileManager) putTo(b *posinfo.FilestoreNode, to putter) error {
154
var dobj pb.DataObj
155
156
if !filepath.HasPrefix(b.PosInfo.FullPath, f.root) {
@@ -163,15 +171,20 @@ func (f *FileManager) Put(b *posinfo.FilestoreNode) error {
171
return err
172
}
173
166
- return f.ds.Put(dshelp.CidToDsKey(b.Cid()), data)
174
+ return to.Put(dshelp.CidToDsKey(b.Cid()), data)
175
}
176
177
func (f *FileManager) PutMany(bs []*posinfo.FilestoreNode) error {
170
- // TODO: this better
178
+ batch, err := f.ds.Batch()
179
+ if err != nil {
180
+ return err
181
+ }
182
+
183
for _, b := range bs {
172
- if err := f.Put(b); err != nil {
184
+ if err := f.putTo(b, batch); err != nil {
185
return err
186
}
187
}
176
- return nil
188
+
189
+ return batch.Commit()
190
}