Wire a context down to (n *helpers.UnixfsNode) GetChild
License: MIT Signed-off-by: rht <rhtbot@gmail.com>
rht committed
Aug 20, 2015 at 07:59 UTC
34e06f6c95a5475c00743f72b5b5e56ddf747116
4 files changed
+32
-42
importer/helpers/helpers.go
+2
-2
@@ -77,8 +77,8 @@ func (n *UnixfsNode) NumChildren() int {
77
return n.ufmt.NumChildren()
78
}
79
80
-func (n *UnixfsNode) GetChild(i int, ds dag.DAGService) (*UnixfsNode, error) {
81
- ctx, cancel := context.WithTimeout(context.TODO(), time.Minute)
80
+func (n *UnixfsNode) GetChild(ctx context.Context, i int, ds dag.DAGService) (*UnixfsNode, error) {
81
+ ctx, cancel := context.WithTimeout(ctx, time.Minute)
82
defer cancel()
83
84
nd, err := n.node.Links[i].GetNode(ctx, ds)
importer/trickle/trickle_test.go
+10
-7
@@ -443,7 +443,8 @@ func TestAppend(t *testing.T) {
443
r := bytes.NewReader(should[nbytes/2:])
444
blks, errs := chunk.Chan(chunk.NewSizeSplitter(r, 500))
445
446
- nnode, err := TrickleAppend(nd, dbp.New(blks, errs))
446
+ ctx := context.TODO()
447
+ nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
448
if err != nil {
449
t.Fatal(err)
450
}
@@ -453,7 +454,7 @@ func TestAppend(t *testing.T) {
454
t.Fatal(err)
455
}
456
456
- fread, err := uio.NewDagReader(context.TODO(), nnode, ds)
457
+ fread, err := uio.NewDagReader(ctx, nnode, ds)
458
if err != nil {
459
t.Fatal(err)
460
}
@@ -491,10 +492,11 @@ func TestMultipleAppends(t *testing.T) {
492
493
spl := chunk.SizeSplitterGen(500)
494
495
+ ctx := context.TODO()
496
for i := 0; i < len(should); i++ {
497
blks, errs := chunk.Chan(spl(bytes.NewReader(should[i : i+1])))
498
497
- nnode, err := TrickleAppend(nd, dbp.New(blks, errs))
499
+ nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
500
if err != nil {
501
t.Fatal(err)
502
}
@@ -504,7 +506,7 @@ func TestMultipleAppends(t *testing.T) {
506
t.Fatal(err)
507
}
508
507
- fread, err := uio.NewDagReader(context.TODO(), nnode, ds)
509
+ fread, err := uio.NewDagReader(ctx, nnode, ds)
510
if err != nil {
511
t.Fatal(err)
512
}
@@ -538,19 +540,20 @@ func TestAppendSingleBytesToEmpty(t *testing.T) {
540
541
blks, errs := chunk.Chan(spl(bytes.NewReader(data[:1])))
542
541
- nnode, err := TrickleAppend(nd, dbp.New(blks, errs))
543
+ ctx := context.TODO()
544
+ nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
545
if err != nil {
546
t.Fatal(err)
547
}
548
549
blks, errs = chunk.Chan(spl(bytes.NewReader(data[1:])))
550
548
- nnode, err = TrickleAppend(nnode, dbp.New(blks, errs))
551
+ nnode, err = TrickleAppend(ctx, nnode, dbp.New(blks, errs))
552
if err != nil {
553
t.Fatal(err)
554
}
555
553
- fread, err := uio.NewDagReader(context.TODO(), nnode, ds)
556
+ fread, err := uio.NewDagReader(ctx, nnode, ds)
557
if err != nil {
558
t.Fatal(err)
559
}
importer/trickle/trickledag.go
+19
-32
@@ -18,19 +18,16 @@ const layerRepeat = 4
18
19
func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
20
root := h.NewUnixfsNode()
21
- err := db.FillNodeLayer(root)
22
- if err != nil {
21
+ if err := db.FillNodeLayer(root); err != nil {
22
return nil, err
23
}
24
for level := 1; !db.Done(); level++ {
25
for i := 0; i < layerRepeat && !db.Done(); i++ {
26
next := h.NewUnixfsNode()
28
- err := fillTrickleRec(db, next, level)
29
- if err != nil {
27
+ if err := fillTrickleRec(db, next, level); err != nil {
28
return nil, err
29
}
32
- err = root.AddChild(next, db)
33
- if err != nil {
30
+ if err := root.AddChild(next, db); err != nil {
31
return nil, err
32
}
33
}
@@ -41,8 +38,7 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
38
return nil, err
39
}
40
44
- err = db.Close()
45
- if err != nil {
41
+ if err := db.Close(); err != nil {
42
return nil, err
43
}
44
@@ -51,21 +47,18 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
47
48
func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error {
49
// Always do this, even in the base case
54
- err := db.FillNodeLayer(node)
55
- if err != nil {
50
+ if err := db.FillNodeLayer(node); err != nil {
51
return err
52
}
53
54
for i := 1; i < depth && !db.Done(); i++ {
55
for j := 0; j < layerRepeat && !db.Done(); j++ {
56
next := h.NewUnixfsNode()
62
- err := fillTrickleRec(db, next, i)
63
- if err != nil {
57
+ if err := fillTrickleRec(db, next, i); err != nil {
58
return err
59
}
60
67
- err = node.AddChild(next, db)
68
- if err != nil {
61
+ if err := node.AddChild(next, db); err != nil {
62
return err
63
}
64
}
@@ -74,11 +67,10 @@ func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error
67
}
68
69
// TrickleAppend appends the data in `db` to the dag, using the Trickledag format
77
-func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_out error) {
70
+func TrickleAppend(ctx context.Context, base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_out error) {
71
defer func() {
72
if err_out == nil {
80
- err := db.Close()
81
- if err != nil {
73
+ if err := db.Close(); err != nil {
74
err_out = err
75
}
76
}
@@ -94,8 +86,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
86
n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks())
87
if n == 0 {
88
// If direct blocks not filled...
97
- err := db.FillNodeLayer(ufsn)
98
- if err != nil {
89
+ if err := db.FillNodeLayer(ufsn); err != nil {
90
return nil, err
91
}
92
@@ -108,7 +99,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
99
}
100
101
// Last child in this node may not be a full tree, lets file it up
111
- if err := appendFillLastChild(ufsn, n-1, layerProgress, db); err != nil {
102
+ if err := appendFillLastChild(ctx, ufsn, n-1, layerProgress, db); err != nil {
103
return nil, err
104
}
105
@@ -138,19 +129,19 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
129
130
// appendFillLastChild will take in an incomplete trickledag node (uncomplete meaning, not full) and
131
// fill it out to the specified depth with blocks from the given DagBuilderHelper
141
-func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.DagBuilderHelper) error {
132
+func appendFillLastChild(ctx context.Context, ufsn *h.UnixfsNode, depth int, layerFill int, db *h.DagBuilderHelper) error {
133
if ufsn.NumChildren() <= db.Maxlinks() {
134
return nil
135
}
136
// Recursive step, grab last child
137
last := ufsn.NumChildren() - 1
147
- lastChild, err := ufsn.GetChild(last, db.GetDagServ())
138
+ lastChild, err := ufsn.GetChild(ctx, last, db.GetDagServ())
139
if err != nil {
140
return err
141
}
142
143
// Fill out last child (may not be full tree)
153
- nchild, err := trickleAppendRec(lastChild, db, depth-1)
144
+ nchild, err := trickleAppendRec(ctx, lastChild, db, depth-1)
145
if err != nil {
146
return err
147
}
@@ -182,7 +173,7 @@ func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.Dag
173
}
174
175
// recursive call for TrickleAppend
185
-func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h.UnixfsNode, error) {
176
+func trickleAppendRec(ctx context.Context, ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h.UnixfsNode, error) {
177
if depth == 0 || db.Done() {
178
return ufsn, nil
179
}
@@ -191,8 +182,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
182
n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks())
183
if n == 0 {
184
// If direct blocks not filled...
194
- err := db.FillNodeLayer(ufsn)
195
- if err != nil {
185
+ if err := db.FillNodeLayer(ufsn); err != nil {
186
return nil, err
187
}
188
n++
@@ -203,8 +193,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
193
return ufsn, nil
194
}
195
206
- err := appendFillLastChild(ufsn, n, layerProgress, db)
207
- if err != nil {
196
+ if err := appendFillLastChild(ctx, ufsn, n, layerProgress, db); err != nil {
197
return nil, err
198
}
199
@@ -217,13 +206,11 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
206
for i := n; i < depth && !db.Done(); i++ {
207
for j := 0; j < layerRepeat && !db.Done(); j++ {
208
next := h.NewUnixfsNode()
220
- err := fillTrickleRec(db, next, i)
221
- if err != nil {
209
+ if err := fillTrickleRec(db, next, i); err != nil {
210
return nil, err
211
}
212
225
- err = ufsn.AddChild(next, db)
226
- if err != nil {
213
+ if err := ufsn.AddChild(next, db); err != nil {
214
return nil, err
215
}
216
}
unixfs/mod/dagmodifier.go
+1
-1
@@ -312,7 +312,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte, errs <-ch
312
NodeCB: imp.BasicPinnerCB(dm.mp),
313
}
314
315
- return trickle.TrickleAppend(node, dbp.New(blks, errs))
315
+ return trickle.TrickleAppend(dm.ctx, node, dbp.New(blks, errs))
316
}
317
318
// Read data from this dag starting at the current offset