Add batching when Adding.
License: MIT Signed-off-by: Hector Sanjuan <hector@protocol.ai>
Hector Sanjuan committed
Oct 26, 2018 at 17:46 UTC
8709e55b85c64bd6b82fb9c584f0cf537c31bbae
2 files changed
+9
-2
core/commands/dag/dag.go
+1
-1
@@ -110,7 +110,7 @@ into an object of the specified format.
110
}
111
112
for _, nd := range nds {
113
- err := b.Add(nd)
113
+ err := b.Add(req.Context, nd)
114
if err != nil {
115
return err
116
}
core/coreunix/add.go
+8
-1
@@ -49,11 +49,14 @@ type Object struct {
49
50
// NewAdder Returns a new Adder used for a file add operation.
51
func NewAdder(ctx context.Context, p pin.Pinner, bs bstore.GCBlockstore, ds ipld.DAGService) (*Adder, error) {
52
+ bufferedDS := ipld.NewBufferedDAG(ctx, ds)
53
+
54
return &Adder{
55
ctx: ctx,
56
pinning: p,
57
blockstore: bs,
58
dagService: ds,
59
+ bufferedDS: bufferedDS,
60
Progress: false,
61
Hidden: true,
62
Pin: true,
@@ -69,6 +72,7 @@ type Adder struct {
72
pinning pin.Pinner
73
blockstore bstore.GCBlockstore
74
dagService ipld.DAGService
75
+ bufferedDS *ipld.BufferedDAG
76
Out chan<- interface{}
77
Progress bool
78
Hidden bool
@@ -114,8 +118,11 @@ func (adder *Adder) add(reader io.Reader) (ipld.Node, error) {
118
return nil, err
119
}
120
121
+ // Make sure all added nodes are written when done.
122
+ defer adder.bufferedDS.Commit()
123
+
124
params := ihelper.DagBuilderParams{
118
- Dagserv: adder.dagService,
125
+ Dagserv: adder.bufferedDS,
126
RawLeaves: adder.RawLeaves,
127
Maxlinks: ihelper.DefaultLinksPerBlock,
128
NoCopy: adder.NoCopy,