@cryptotaxi247 / kubo / commits / 34e06f6c9

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