提交 34e06f6c 作者: rht

Wire a context down to (n *helpers.UnixfsNode) GetChild

License: MIT
Signed-off-by: 's avatarrht <rhtbot@gmail.com>
上级 5d8e1504
...@@ -77,8 +77,8 @@ func (n *UnixfsNode) NumChildren() int { ...@@ -77,8 +77,8 @@ func (n *UnixfsNode) NumChildren() int {
return n.ufmt.NumChildren() return n.ufmt.NumChildren()
} }
func (n *UnixfsNode) GetChild(i int, ds dag.DAGService) (*UnixfsNode, error) { func (n *UnixfsNode) GetChild(ctx context.Context, i int, ds dag.DAGService) (*UnixfsNode, error) {
ctx, cancel := context.WithTimeout(context.TODO(), time.Minute) ctx, cancel := context.WithTimeout(ctx, time.Minute)
defer cancel() defer cancel()
nd, err := n.node.Links[i].GetNode(ctx, ds) nd, err := n.node.Links[i].GetNode(ctx, ds)
......
...@@ -443,7 +443,8 @@ func TestAppend(t *testing.T) { ...@@ -443,7 +443,8 @@ func TestAppend(t *testing.T) {
r := bytes.NewReader(should[nbytes/2:]) r := bytes.NewReader(should[nbytes/2:])
blks, errs := chunk.Chan(chunk.NewSizeSplitter(r, 500)) blks, errs := chunk.Chan(chunk.NewSizeSplitter(r, 500))
nnode, err := TrickleAppend(nd, dbp.New(blks, errs)) ctx := context.TODO()
nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -453,7 +454,7 @@ func TestAppend(t *testing.T) { ...@@ -453,7 +454,7 @@ func TestAppend(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
fread, err := uio.NewDagReader(context.TODO(), nnode, ds) fread, err := uio.NewDagReader(ctx, nnode, ds)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -491,10 +492,11 @@ func TestMultipleAppends(t *testing.T) { ...@@ -491,10 +492,11 @@ func TestMultipleAppends(t *testing.T) {
spl := chunk.SizeSplitterGen(500) spl := chunk.SizeSplitterGen(500)
ctx := context.TODO()
for i := 0; i < len(should); i++ { for i := 0; i < len(should); i++ {
blks, errs := chunk.Chan(spl(bytes.NewReader(should[i : i+1]))) blks, errs := chunk.Chan(spl(bytes.NewReader(should[i : i+1])))
nnode, err := TrickleAppend(nd, dbp.New(blks, errs)) nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -504,7 +506,7 @@ func TestMultipleAppends(t *testing.T) { ...@@ -504,7 +506,7 @@ func TestMultipleAppends(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
fread, err := uio.NewDagReader(context.TODO(), nnode, ds) fread, err := uio.NewDagReader(ctx, nnode, ds)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -538,19 +540,20 @@ func TestAppendSingleBytesToEmpty(t *testing.T) { ...@@ -538,19 +540,20 @@ func TestAppendSingleBytesToEmpty(t *testing.T) {
blks, errs := chunk.Chan(spl(bytes.NewReader(data[:1]))) blks, errs := chunk.Chan(spl(bytes.NewReader(data[:1])))
nnode, err := TrickleAppend(nd, dbp.New(blks, errs)) ctx := context.TODO()
nnode, err := TrickleAppend(ctx, nd, dbp.New(blks, errs))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
blks, errs = chunk.Chan(spl(bytes.NewReader(data[1:]))) blks, errs = chunk.Chan(spl(bytes.NewReader(data[1:])))
nnode, err = TrickleAppend(nnode, dbp.New(blks, errs)) nnode, err = TrickleAppend(ctx, nnode, dbp.New(blks, errs))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
fread, err := uio.NewDagReader(context.TODO(), nnode, ds) fread, err := uio.NewDagReader(ctx, nnode, ds)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
...@@ -18,19 +18,16 @@ const layerRepeat = 4 ...@@ -18,19 +18,16 @@ const layerRepeat = 4
func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) { func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
root := h.NewUnixfsNode() root := h.NewUnixfsNode()
err := db.FillNodeLayer(root) if err := db.FillNodeLayer(root); err != nil {
if err != nil {
return nil, err return nil, err
} }
for level := 1; !db.Done(); level++ { for level := 1; !db.Done(); level++ {
for i := 0; i < layerRepeat && !db.Done(); i++ { for i := 0; i < layerRepeat && !db.Done(); i++ {
next := h.NewUnixfsNode() next := h.NewUnixfsNode()
err := fillTrickleRec(db, next, level) if err := fillTrickleRec(db, next, level); err != nil {
if err != nil {
return nil, err return nil, err
} }
err = root.AddChild(next, db) if err := root.AddChild(next, db); err != nil {
if err != nil {
return nil, err return nil, err
} }
} }
...@@ -41,8 +38,7 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) { ...@@ -41,8 +38,7 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
return nil, err return nil, err
} }
err = db.Close() if err := db.Close(); err != nil {
if err != nil {
return nil, err return nil, err
} }
...@@ -51,21 +47,18 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) { ...@@ -51,21 +47,18 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error { func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error {
// Always do this, even in the base case // Always do this, even in the base case
err := db.FillNodeLayer(node) if err := db.FillNodeLayer(node); err != nil {
if err != nil {
return err return err
} }
for i := 1; i < depth && !db.Done(); i++ { for i := 1; i < depth && !db.Done(); i++ {
for j := 0; j < layerRepeat && !db.Done(); j++ { for j := 0; j < layerRepeat && !db.Done(); j++ {
next := h.NewUnixfsNode() next := h.NewUnixfsNode()
err := fillTrickleRec(db, next, i) if err := fillTrickleRec(db, next, i); err != nil {
if err != nil {
return err return err
} }
err = node.AddChild(next, db) if err := node.AddChild(next, db); err != nil {
if err != nil {
return err return err
} }
} }
...@@ -74,11 +67,10 @@ func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error ...@@ -74,11 +67,10 @@ func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error
} }
// TrickleAppend appends the data in `db` to the dag, using the Trickledag format // TrickleAppend appends the data in `db` to the dag, using the Trickledag format
func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_out error) { func TrickleAppend(ctx context.Context, base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_out error) {
defer func() { defer func() {
if err_out == nil { if err_out == nil {
err := db.Close() if err := db.Close(); err != nil {
if err != nil {
err_out = err err_out = err
} }
} }
...@@ -94,8 +86,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o ...@@ -94,8 +86,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks()) n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks())
if n == 0 { if n == 0 {
// If direct blocks not filled... // If direct blocks not filled...
err := db.FillNodeLayer(ufsn) if err := db.FillNodeLayer(ufsn); err != nil {
if err != nil {
return nil, err return nil, err
} }
...@@ -108,7 +99,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o ...@@ -108,7 +99,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
} }
// Last child in this node may not be a full tree, lets file it up // Last child in this node may not be a full tree, lets file it up
if err := appendFillLastChild(ufsn, n-1, layerProgress, db); err != nil { if err := appendFillLastChild(ctx, ufsn, n-1, layerProgress, db); err != nil {
return nil, err return nil, err
} }
...@@ -138,19 +129,19 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o ...@@ -138,19 +129,19 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
// appendFillLastChild will take in an incomplete trickledag node (uncomplete meaning, not full) and // appendFillLastChild will take in an incomplete trickledag node (uncomplete meaning, not full) and
// fill it out to the specified depth with blocks from the given DagBuilderHelper // fill it out to the specified depth with blocks from the given DagBuilderHelper
func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.DagBuilderHelper) error { func appendFillLastChild(ctx context.Context, ufsn *h.UnixfsNode, depth int, layerFill int, db *h.DagBuilderHelper) error {
if ufsn.NumChildren() <= db.Maxlinks() { if ufsn.NumChildren() <= db.Maxlinks() {
return nil return nil
} }
// Recursive step, grab last child // Recursive step, grab last child
last := ufsn.NumChildren() - 1 last := ufsn.NumChildren() - 1
lastChild, err := ufsn.GetChild(last, db.GetDagServ()) lastChild, err := ufsn.GetChild(ctx, last, db.GetDagServ())
if err != nil { if err != nil {
return err return err
} }
// Fill out last child (may not be full tree) // Fill out last child (may not be full tree)
nchild, err := trickleAppendRec(lastChild, db, depth-1) nchild, err := trickleAppendRec(ctx, lastChild, db, depth-1)
if err != nil { if err != nil {
return err return err
} }
...@@ -182,7 +173,7 @@ func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.Dag ...@@ -182,7 +173,7 @@ func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.Dag
} }
// recursive call for TrickleAppend // recursive call for TrickleAppend
func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h.UnixfsNode, error) { func trickleAppendRec(ctx context.Context, ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h.UnixfsNode, error) {
if depth == 0 || db.Done() { if depth == 0 || db.Done() {
return ufsn, nil return ufsn, nil
} }
...@@ -191,8 +182,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h ...@@ -191,8 +182,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks()) n, layerProgress := trickleDepthInfo(ufsn, db.Maxlinks())
if n == 0 { if n == 0 {
// If direct blocks not filled... // If direct blocks not filled...
err := db.FillNodeLayer(ufsn) if err := db.FillNodeLayer(ufsn); err != nil {
if err != nil {
return nil, err return nil, err
} }
n++ n++
...@@ -203,8 +193,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h ...@@ -203,8 +193,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
return ufsn, nil return ufsn, nil
} }
err := appendFillLastChild(ufsn, n, layerProgress, db) if err := appendFillLastChild(ctx, ufsn, n, layerProgress, db); err != nil {
if err != nil {
return nil, err return nil, err
} }
...@@ -217,13 +206,11 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h ...@@ -217,13 +206,11 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
for i := n; i < depth && !db.Done(); i++ { for i := n; i < depth && !db.Done(); i++ {
for j := 0; j < layerRepeat && !db.Done(); j++ { for j := 0; j < layerRepeat && !db.Done(); j++ {
next := h.NewUnixfsNode() next := h.NewUnixfsNode()
err := fillTrickleRec(db, next, i) if err := fillTrickleRec(db, next, i); err != nil {
if err != nil {
return nil, err return nil, err
} }
err = ufsn.AddChild(next, db) if err := ufsn.AddChild(next, db); err != nil {
if err != nil {
return nil, err return nil, err
} }
} }
......
...@@ -312,7 +312,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte, errs <-ch ...@@ -312,7 +312,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte, errs <-ch
NodeCB: imp.BasicPinnerCB(dm.mp), NodeCB: imp.BasicPinnerCB(dm.mp),
} }
return trickle.TrickleAppend(node, dbp.New(blks, errs)) return trickle.TrickleAppend(dm.ctx, node, dbp.New(blks, errs))
} }
// Read data from this dag starting at the current offset // Read data from this dag starting at the current offset
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论