Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
e539024e
提交
e539024e
authored
3月 07, 2015
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
some code cleanup
上级
298305e4
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
41 行增加
和
36 行删除
+41
-36
trickledag.go
importer/trickle/trickledag.go
+41
-36
没有找到文件。
importer/trickle/trickledag.go
浏览文件 @
e539024e
...
...
@@ -68,7 +68,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
}
// Get depth of this 'tree'
n
,
j
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
n
,
layerProgress
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
if
n
==
0
{
// If direct blocks not filled...
err
:=
db
.
FillNodeLayer
(
ufsn
)
...
...
@@ -84,7 +84,8 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
n
++
}
err
=
appendFillLastChild
(
ufsn
,
n
-
1
,
j
,
db
)
// Last child in this node may not be a full tree, lets file it up
err
=
appendFillLastChild
(
ufsn
,
n
-
1
,
layerProgress
,
db
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -113,41 +114,44 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (*dag.Node, error) {
return
ufsn
.
GetDagNode
()
}
// 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
func
appendFillLastChild
(
ufsn
*
h
.
UnixfsNode
,
depth
int
,
layerFill
int
,
db
*
h
.
DagBuilderHelper
)
error
{
if
ufsn
.
NumChildren
()
>
db
.
Maxlinks
()
{
// Recursive step, grab last child
last
:=
ufsn
.
NumChildren
()
-
1
lastChild
,
err
:=
ufsn
.
GetChild
(
last
,
db
.
GetDagServ
())
if
err
!=
nil
{
return
err
}
if
ufsn
.
NumChildren
()
<=
db
.
Maxlinks
()
{
return
nil
}
// Recursive step, grab last child
last
:=
ufsn
.
NumChildren
()
-
1
lastChild
,
err
:=
ufsn
.
GetChild
(
last
,
db
.
GetDagServ
())
if
err
!=
nil
{
return
err
}
// Fill out last child (may not be full tree)
nchild
,
err
:=
trickleAppendRec
(
lastChild
,
db
,
depth
-
1
)
if
err
!=
nil
{
return
err
}
// Fill out last child (may not be full tree)
nchild
,
err
:=
trickleAppendRec
(
lastChild
,
db
,
depth
-
1
)
if
err
!=
nil
{
return
err
}
// Update changed child in parent node
ufsn
.
RemoveChild
(
last
)
err
=
ufsn
.
AddChild
(
nchild
,
db
)
if
err
!=
nil
{
return
err
}
// Update changed child in parent node
ufsn
.
RemoveChild
(
last
)
err
=
ufsn
.
AddChild
(
nchild
,
db
)
if
err
!=
nil
{
return
err
}
// Partially filled depth layer
if
layerFill
!=
0
{
for
;
layerFill
<
layerRepeat
&&
!
db
.
Done
();
layerFill
++
{
next
:=
h
.
NewUnixfsNode
()
err
:=
fillTrickleRec
(
db
,
next
,
depth
)
if
err
!=
nil
{
return
err
}
// Partially filled depth layer
if
layerFill
!=
0
{
for
;
layerFill
<
layerRepeat
&&
!
db
.
Done
();
layerFill
++
{
next
:=
h
.
NewUnixfsNode
()
err
:=
fillTrickleRec
(
db
,
next
,
depth
)
if
err
!=
nil
{
return
err
}
err
=
ufsn
.
AddChild
(
next
,
db
)
if
err
!=
nil
{
return
err
}
err
=
ufsn
.
AddChild
(
next
,
db
)
if
err
!=
nil
{
return
err
}
}
}
...
...
@@ -155,13 +159,14 @@ func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.Dag
return
nil
}
// recursive call for TrickleAppend
func
trickleAppendRec
(
ufsn
*
h
.
UnixfsNode
,
db
*
h
.
DagBuilderHelper
,
depth
int
)
(
*
h
.
UnixfsNode
,
error
)
{
if
depth
==
0
||
db
.
Done
()
{
return
ufsn
,
nil
}
// Get depth of this 'tree'
n
,
j
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
n
,
layerProgress
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
if
n
==
0
{
// If direct blocks not filled...
err
:=
db
.
FillNodeLayer
(
ufsn
)
...
...
@@ -176,7 +181,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
return
ufsn
,
nil
}
err
:=
appendFillLastChild
(
ufsn
,
n
,
j
,
db
)
err
:=
appendFillLastChild
(
ufsn
,
n
,
layerProgress
,
db
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -242,7 +247,7 @@ func verifyTDagRec(nd *dag.Node, depth, direct, layerRepeat int, ds dag.DAGServi
for
i
:=
0
;
i
<
len
(
nd
.
Links
);
i
++
{
child
,
err
:=
nd
.
Links
[
i
]
.
GetNode
(
ds
)
if
err
!=
nil
{
return
nil
return
err
}
if
i
<
direct
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论