@@ -68,7 +68,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
68
68
}
69
69
70
70
// Get depth of this 'tree'
71
- n , j := trickleDepthInfo (ufsn , db .Maxlinks ())
71
+ n , layerProgress := trickleDepthInfo (ufsn , db .Maxlinks ())
72
72
if n == 0 {
73
73
// If direct blocks not filled...
74
74
err := db .FillNodeLayer (ufsn )
@@ -84,7 +84,8 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
84
84
n ++
85
85
}
86
86
87
- err = appendFillLastChild (ufsn , n - 1 , j , db )
87
+ // Last child in this node may not be a full tree, lets file it up
88
+ err = appendFillLastChild (ufsn , n - 1 , layerProgress , db )
88
89
if err != nil {
89
90
return nil , err
90
91
}
@@ -113,55 +114,59 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
113
114
return ufsn .GetDagNode ()
114
115
}
115
116
117
+ // appendFillLastChild will take in an incomplete trickledag node (uncomplete meaning, not full) and
118
+ // fill it out to the specified depth with blocks from the given DagBuilderHelper
116
119
func appendFillLastChild (ufsn * h.UnixfsNode , depth int , layerFill int , db * h.DagBuilderHelper ) error {
117
- if ufsn .NumChildren () > db .Maxlinks () {
118
- // Recursive step, grab last child
119
- last := ufsn .NumChildren () - 1
120
- lastChild , err := ufsn .GetChild (last , db .GetDagServ ())
121
- if err != nil {
122
- return err
123
- }
120
+ if ufsn .NumChildren () <= db .Maxlinks () {
121
+ return nil
122
+ }
123
+ // Recursive step, grab last child
124
+ last := ufsn .NumChildren () - 1
125
+ lastChild , err := ufsn .GetChild (last , db .GetDagServ ())
126
+ if err != nil {
127
+ return err
128
+ }
124
129
125
- // Fill out last child (may not be full tree)
126
- nchild , err := trickleAppendRec (lastChild , db , depth - 1 )
127
- if err != nil {
128
- return err
129
- }
130
+ // Fill out last child (may not be full tree)
131
+ nchild , err := trickleAppendRec (lastChild , db , depth - 1 )
132
+ if err != nil {
133
+ return err
134
+ }
130
135
131
- // Update changed child in parent node
132
- ufsn .RemoveChild (last )
133
- err = ufsn .AddChild (nchild , db )
134
- if err != nil {
135
- return err
136
- }
136
+ // Update changed child in parent node
137
+ ufsn .RemoveChild (last )
138
+ err = ufsn .AddChild (nchild , db )
139
+ if err != nil {
140
+ return err
141
+ }
142
+
143
+ // Partially filled depth layer
144
+ if layerFill != 0 {
145
+ for ; layerFill < layerRepeat && ! db .Done (); layerFill ++ {
146
+ next := h .NewUnixfsNode ()
147
+ err := fillTrickleRec (db , next , depth )
148
+ if err != nil {
149
+ return err
150
+ }
137
151
138
- // Partially filled depth layer
139
- if layerFill != 0 {
140
- for ; layerFill < layerRepeat && ! db .Done (); layerFill ++ {
141
- next := h .NewUnixfsNode ()
142
- err := fillTrickleRec (db , next , depth )
143
- if err != nil {
144
- return err
145
- }
146
-
147
- err = ufsn .AddChild (next , db )
148
- if err != nil {
149
- return err
150
- }
152
+ err = ufsn .AddChild (next , db )
153
+ if err != nil {
154
+ return err
151
155
}
152
156
}
153
157
}
154
158
155
159
return nil
156
160
}
157
161
162
+ // recursive call for TrickleAppend
158
163
func trickleAppendRec (ufsn * h.UnixfsNode , db * h.DagBuilderHelper , depth int ) (* h.UnixfsNode , error ) {
159
164
if depth == 0 || db .Done () {
160
165
return ufsn , nil
161
166
}
162
167
163
168
// Get depth of this 'tree'
164
- n , j := trickleDepthInfo (ufsn , db .Maxlinks ())
169
+ n , layerProgress := trickleDepthInfo (ufsn , db .Maxlinks ())
165
170
if n == 0 {
166
171
// If direct blocks not filled...
167
172
err := db .FillNodeLayer (ufsn )
@@ -176,7 +181,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
176
181
return ufsn , nil
177
182
}
178
183
179
- err := appendFillLastChild (ufsn , n , j , db )
184
+ err := appendFillLastChild (ufsn , n , layerProgress , db )
180
185
if err != nil {
181
186
return nil , err
182
187
}
@@ -242,7 +247,7 @@ func verifyTDagRec(nd *dag.Node, depth, direct, layerRepeat int, ds dag.DAGServi
242
247
for i := 0 ; i < len (nd .Links ); i ++ {
243
248
child , err := nd .Links [i ].GetNode (ds )
244
249
if err != nil {
245
- return nil
250
+ return err
246
251
}
247
252
248
253
if i < direct {
0 commit comments