Skip to content

Commit

Permalink
Merge pull request #4730 from schomatis/fix/dag/trickle
Browse files Browse the repository at this point in the history
Refactor trickle DAG builder
  • Loading branch information
whyrusleeping authored Mar 23, 2018
2 parents 61544ac + 9eb864a commit b8e7b63
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions importer/trickle/trickledag.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,9 @@ const layerRepeat = 4
// explanation.
func Layout(db *h.DagBuilderHelper) (ipld.Node, error) {
root := db.NewUnixfsNode()
if err := db.FillNodeLayer(root); err != nil {
if err := fillTrickleRec(db, root, -1); err != nil {
return nil, err
}
for level := 1; !db.Done(); level++ {
for i := 0; i < layerRepeat && !db.Done(); i++ {
next := db.NewUnixfsNode()
if err := fillTrickleRec(db, next, level); err != nil {
return nil, err
}
if err := root.AddChild(next, db); err != nil {
return nil, err
}
}
}

out, err := db.Add(root)
if err != nil {
Expand All @@ -65,25 +54,35 @@ func Layout(db *h.DagBuilderHelper) (ipld.Node, error) {
return out, nil
}

func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, depth int) error {
// fillTrickleRec creates a trickle (sub-)tree with an optional maximum specified depth
// in the case maxDepth is greater than zero, or with unlimited depth otherwise
// (where the DAG builder will signal the end of data to end the function).
func fillTrickleRec(db *h.DagBuilderHelper, node *h.UnixfsNode, maxDepth int) error {
// Always do this, even in the base case
if err := db.FillNodeLayer(node); err != nil {
return err
}

for i := 1; i < depth && !db.Done(); i++ {
for j := 0; j < layerRepeat && !db.Done(); j++ {
next := db.NewUnixfsNode()
if err := fillTrickleRec(db, next, i); err != nil {
for depth := 1; ; depth++ {
// Apply depth limit only if the parameter is set (> 0).
if maxDepth > 0 && depth == maxDepth {
return nil
}
for layer := 0; layer < layerRepeat; layer++ {
if db.Done() {
return nil
}

nextChild := db.NewUnixfsNode()
if err := fillTrickleRec(db, nextChild, depth); err != nil {
return err
}

if err := node.AddChild(next, db); err != nil {
if err := node.AddChild(nextChild, db); err != nil {
return err
}
}
}
return nil
}

// Append appends the data in `db` to the dag, using the Trickledag format
Expand Down

0 comments on commit b8e7b63

Please sign in to comment.