dag: batch multiple files
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Sep 21, 2017 at 23:22 UTC
f5cbc4c896c5f48b7cd9a3555471e3adcd390371
1 file changed
+24
-24
core/commands/dag/dag.go
+24
-24
@@ -96,6 +96,9 @@ into an object of the specified format.
96
res.SetOutput((<-chan interface{})(outChan))
97
98
addAllAndPin := func(f files.File) error {
99
+ cids := cid.NewSet()
100
+ b := n.DAG.Batch()
101
+
102
for {
103
file, err := f.NextFile()
104
if err == io.EOF {
@@ -113,37 +116,34 @@ into an object of the specified format.
116
return fmt.Errorf("no node returned from ParseInputs")
117
}
118
116
- var cid *cid.Cid
117
- err = func() error {
118
- if dopin {
119
- defer n.Blockstore.PinLock().Unlock()
119
+ for _, nd := range nds {
120
+ _, err := b.Add(nd)
121
+ if err != nil {
122
+ return err
123
}
124
+ }
125
122
- b := n.DAG.Batch()
123
- for _, nd := range nds {
124
- _, err := b.Add(nd)
125
- if err != nil {
126
- return err
127
- }
128
- }
126
+ cid := nds[0].Cid()
127
+ cids.Add(cid)
128
+ outChan <- &OutputObject{Cid: cid}
129
+ }
130
130
- if err := b.Commit(); err != nil {
131
- return err
132
- }
131
+ if err := b.Commit(); err != nil {
132
+ return err
133
+ }
134
134
- cid = nds[0].Cid()
135
- if dopin {
136
- n.Pinning.PinWithMode(cid, pin.Recursive)
135
+ if dopin {
136
+ defer n.Blockstore.PinLock().Unlock()
137
138
- err := n.Pinning.Flush()
139
- if err != nil {
140
- return err
141
- }
142
- }
138
+ cids.ForEach(func(c *cid.Cid) error {
139
+ n.Pinning.PinWithMode(c, pin.Recursive)
140
return nil
144
- }()
141
+ })
142
146
- outChan <- &OutputObject{Cid: cid}
143
+ err := n.Pinning.Flush()
144
+ if err != nil {
145
+ return err
146
+ }
147
}
148
149
return nil