Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
34e06f6c
提交
34e06f6c
authored
8月 20, 2015
作者:
rht
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Wire a context down to (n *helpers.UnixfsNode) GetChild
License: MIT Signed-off-by:
rht
<
rhtbot@gmail.com
>
上级
5d8e1504
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
32 行增加
和
42 行删除
+32
-42
helpers.go
importer/helpers/helpers.go
+2
-2
trickle_test.go
importer/trickle/trickle_test.go
+10
-7
trickledag.go
importer/trickle/trickledag.go
+19
-32
dagmodifier.go
unixfs/mod/dagmodifier.go
+1
-1
没有找到文件。
importer/helpers/helpers.go
浏览文件 @
34e06f6c
...
...
@@ -77,8 +77,8 @@ func (n *UnixfsNode) NumChildren() int {
return
n
.
ufmt
.
NumChildren
()
}
func
(
n
*
UnixfsNode
)
GetChild
(
i
int
,
ds
dag
.
DAGService
)
(
*
UnixfsNode
,
error
)
{
ctx
,
cancel
:=
context
.
WithTimeout
(
c
ontext
.
TODO
()
,
time
.
Minute
)
func
(
n
*
UnixfsNode
)
GetChild
(
ctx
context
.
Context
,
i
int
,
ds
dag
.
DAGService
)
(
*
UnixfsNode
,
error
)
{
ctx
,
cancel
:=
context
.
WithTimeout
(
c
tx
,
time
.
Minute
)
defer
cancel
()
nd
,
err
:=
n
.
node
.
Links
[
i
]
.
GetNode
(
ctx
,
ds
)
...
...
importer/trickle/trickle_test.go
浏览文件 @
34e06f6c
...
...
@@ -443,7 +443,8 @@ func TestAppend(t *testing.T) {
r
:=
bytes
.
NewReader
(
should
[
nbytes
/
2
:
])
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
{
t
.
Fatal
(
err
)
}
...
...
@@ -453,7 +454,7 @@ func TestAppend(t *testing.T) {
t
.
Fatal
(
err
)
}
fread
,
err
:=
uio
.
NewDagReader
(
c
ontext
.
TODO
()
,
nnode
,
ds
)
fread
,
err
:=
uio
.
NewDagReader
(
c
tx
,
nnode
,
ds
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
@@ -491,10 +492,11 @@ func TestMultipleAppends(t *testing.T) {
spl
:=
chunk
.
SizeSplitterGen
(
500
)
ctx
:=
context
.
TODO
()
for
i
:=
0
;
i
<
len
(
should
);
i
++
{
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
{
t
.
Fatal
(
err
)
}
...
...
@@ -504,7 +506,7 @@ func TestMultipleAppends(t *testing.T) {
t
.
Fatal
(
err
)
}
fread
,
err
:=
uio
.
NewDagReader
(
c
ontext
.
TODO
()
,
nnode
,
ds
)
fread
,
err
:=
uio
.
NewDagReader
(
c
tx
,
nnode
,
ds
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
@@ -538,19 +540,20 @@ func TestAppendSingleBytesToEmpty(t *testing.T) {
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
{
t
.
Fatal
(
err
)
}
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
{
t
.
Fatal
(
err
)
}
fread
,
err
:=
uio
.
NewDagReader
(
c
ontext
.
TODO
()
,
nnode
,
ds
)
fread
,
err
:=
uio
.
NewDagReader
(
c
tx
,
nnode
,
ds
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
importer/trickle/trickledag.go
浏览文件 @
34e06f6c
...
...
@@ -18,19 +18,16 @@ const layerRepeat = 4
func
TrickleLayout
(
db
*
h
.
DagBuilderHelper
)
(
*
dag
.
Node
,
error
)
{
root
:=
h
.
NewUnixfsNode
()
err
:=
db
.
FillNodeLayer
(
root
)
if
err
!=
nil
{
if
err
:=
db
.
FillNodeLayer
(
root
);
err
!=
nil
{
return
nil
,
err
}
for
level
:=
1
;
!
db
.
Done
();
level
++
{
for
i
:=
0
;
i
<
layerRepeat
&&
!
db
.
Done
();
i
++
{
next
:=
h
.
NewUnixfsNode
()
err
:=
fillTrickleRec
(
db
,
next
,
level
)
if
err
!=
nil
{
if
err
:=
fillTrickleRec
(
db
,
next
,
level
);
err
!=
nil
{
return
nil
,
err
}
err
=
root
.
AddChild
(
next
,
db
)
if
err
!=
nil
{
if
err
:=
root
.
AddChild
(
next
,
db
);
err
!=
nil
{
return
nil
,
err
}
}
...
...
@@ -41,8 +38,7 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
return
nil
,
err
}
err
=
db
.
Close
()
if
err
!=
nil
{
if
err
:=
db
.
Close
();
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -51,21 +47,18 @@ func TrickleLayout(db *h.DagBuilderHelper) (*dag.Node, error) {
func
fillTrickleRec
(
db
*
h
.
DagBuilderHelper
,
node
*
h
.
UnixfsNode
,
depth
int
)
error
{
// Always do this, even in the base case
err
:=
db
.
FillNodeLayer
(
node
)
if
err
!=
nil
{
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
:=
h
.
NewUnixfsNode
()
err
:=
fillTrickleRec
(
db
,
next
,
i
)
if
err
!=
nil
{
if
err
:=
fillTrickleRec
(
db
,
next
,
i
);
err
!=
nil
{
return
err
}
err
=
node
.
AddChild
(
next
,
db
)
if
err
!=
nil
{
if
err
:=
node
.
AddChild
(
next
,
db
);
err
!=
nil
{
return
err
}
}
...
...
@@ -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
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
()
{
if
err_out
==
nil
{
err
:=
db
.
Close
()
if
err
!=
nil
{
if
err
:=
db
.
Close
();
err
!=
nil
{
err_out
=
err
}
}
...
...
@@ -94,8 +86,7 @@ func TrickleAppend(base *dag.Node, db *h.DagBuilderHelper) (out *dag.Node, err_o
n
,
layerProgress
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
if
n
==
0
{
// If direct blocks not filled...
err
:=
db
.
FillNodeLayer
(
ufsn
)
if
err
!=
nil
{
if
err
:=
db
.
FillNodeLayer
(
ufsn
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -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
if
err
:=
appendFillLastChild
(
ufsn
,
n
-
1
,
layerProgress
,
db
);
err
!=
nil
{
if
err
:=
appendFillLastChild
(
ctx
,
ufsn
,
n
-
1
,
layerProgress
,
db
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -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
// 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
()
{
return
nil
}
// Recursive step, grab last child
last
:=
ufsn
.
NumChildren
()
-
1
lastChild
,
err
:=
ufsn
.
GetChild
(
last
,
db
.
GetDagServ
())
lastChild
,
err
:=
ufsn
.
GetChild
(
ctx
,
last
,
db
.
GetDagServ
())
if
err
!=
nil
{
return
err
}
// 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
{
return
err
}
...
...
@@ -182,7 +173,7 @@ func appendFillLastChild(ufsn *h.UnixfsNode, depth int, layerFill int, db *h.Dag
}
// 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
()
{
return
ufsn
,
nil
}
...
...
@@ -191,8 +182,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
n
,
layerProgress
:=
trickleDepthInfo
(
ufsn
,
db
.
Maxlinks
())
if
n
==
0
{
// If direct blocks not filled...
err
:=
db
.
FillNodeLayer
(
ufsn
)
if
err
!=
nil
{
if
err
:=
db
.
FillNodeLayer
(
ufsn
);
err
!=
nil
{
return
nil
,
err
}
n
++
...
...
@@ -203,8 +193,7 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
return
ufsn
,
nil
}
err
:=
appendFillLastChild
(
ufsn
,
n
,
layerProgress
,
db
)
if
err
!=
nil
{
if
err
:=
appendFillLastChild
(
ctx
,
ufsn
,
n
,
layerProgress
,
db
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -217,13 +206,11 @@ func trickleAppendRec(ufsn *h.UnixfsNode, db *h.DagBuilderHelper, depth int) (*h
for
i
:=
n
;
i
<
depth
&&
!
db
.
Done
();
i
++
{
for
j
:=
0
;
j
<
layerRepeat
&&
!
db
.
Done
();
j
++
{
next
:=
h
.
NewUnixfsNode
()
err
:=
fillTrickleRec
(
db
,
next
,
i
)
if
err
!=
nil
{
if
err
:=
fillTrickleRec
(
db
,
next
,
i
);
err
!=
nil
{
return
nil
,
err
}
err
=
ufsn
.
AddChild
(
next
,
db
)
if
err
!=
nil
{
if
err
:=
ufsn
.
AddChild
(
next
,
db
);
err
!=
nil
{
return
nil
,
err
}
}
...
...
unixfs/mod/dagmodifier.go
浏览文件 @
34e06f6c
...
...
@@ -312,7 +312,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte, errs <-ch
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
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论