From e12adeca2be1797d7eca0749512b43b0ab9718d8 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Tue, 24 Jan 2017 14:17:29 -0800 Subject: [PATCH] use proper batching for filestore puts License: MIT Signed-off-by: Jeromy --- filestore/fsrefstore.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/filestore/fsrefstore.go b/filestore/fsrefstore.go index 351c81124..7b63a039e 100644 --- a/filestore/fsrefstore.go +++ b/filestore/fsrefstore.go @@ -142,7 +142,15 @@ func (f *FileManager) Has(c *cid.Cid) (bool, error) { return f.ds.Has(dsk) } +type putter interface { + Put(ds.Key, interface{}) error +} + func (f *FileManager) Put(b *posinfo.FilestoreNode) error { + return f.putTo(b, f.ds) +} + +func (f *FileManager) putTo(b *posinfo.FilestoreNode, to putter) error { var dobj pb.DataObj if !filepath.HasPrefix(b.PosInfo.FullPath, f.root) { @@ -163,15 +171,20 @@ func (f *FileManager) Put(b *posinfo.FilestoreNode) error { return err } - return f.ds.Put(dshelp.CidToDsKey(b.Cid()), data) + return to.Put(dshelp.CidToDsKey(b.Cid()), data) } func (f *FileManager) PutMany(bs []*posinfo.FilestoreNode) error { - // TODO: this better + batch, err := f.ds.Batch() + if err != nil { + return err + } + for _, b := range bs { - if err := f.Put(b); err != nil { + if err := f.putTo(b, batch); err != nil { return err } } - return nil + + return batch.Commit() }