Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
17ae331b
提交
17ae331b
authored
8月 01, 2017
作者:
Łukasz Magiera
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reprovider: Implement 'bitswap reprovide' command
License: MIT Signed-off-by:
Łukasz Magiera
<
magik6k@gmail.com
>
上级
bb7aee57
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
70 行增加
和
15 行删除
+70
-15
bitswap.go
core/commands/bitswap.go
+32
-4
core.go
core/core.go
+2
-2
providers.go
exchange/reprovide/providers.go
+1
-0
reprovide.go
exchange/reprovide/reprovide.go
+35
-9
没有找到文件。
core/commands/bitswap.go
浏览文件 @
17ae331b
...
...
@@ -21,10 +21,11 @@ var BitswapCmd = &cmds.Command{
ShortDescription
:
``
,
},
Subcommands
:
map
[
string
]
*
cmds
.
Command
{
"wantlist"
:
showWantlistCmd
,
"stat"
:
bitswapStatCmd
,
"unwant"
:
unwantCmd
,
"ledger"
:
ledgerCmd
,
"wantlist"
:
showWantlistCmd
,
"stat"
:
bitswapStatCmd
,
"unwant"
:
unwantCmd
,
"ledger"
:
ledgerCmd
,
"reprovide"
:
reprovideCmd
,
},
}
...
...
@@ -242,3 +243,30 @@ prints the ledger associated with a given peer.
},
},
}
var
reprovideCmd
=
&
cmds
.
Command
{
Helptext
:
cmds
.
HelpText
{
Tagline
:
"Trigger reprovider."
,
ShortDescription
:
`
Trigger reprovider to announce our data to network.
`
,
},
Run
:
func
(
req
cmds
.
Request
,
res
cmds
.
Response
)
{
nd
,
err
:=
req
.
InvocContext
()
.
GetNode
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
if
!
nd
.
OnlineMode
()
{
res
.
SetError
(
errNotOnline
,
cmds
.
ErrClient
)
return
}
err
=
nd
.
Reprovider
.
Trigger
(
req
.
Context
())
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
},
}
core/core.go
浏览文件 @
17ae331b
...
...
@@ -277,7 +277,7 @@ func (n *IpfsNode) startLateOnlineServices(ctx context.Context) error {
default
:
return
fmt
.
Errorf
(
"unknown reprovider strtaegy '%s'"
,
cfg
.
Reprovider
.
Strategy
)
}
n
.
Reprovider
=
rp
.
NewReprovider
(
n
.
Routing
,
keyProvider
)
n
.
Reprovider
=
rp
.
NewReprovider
(
ctx
,
n
.
Routing
,
keyProvider
)
if
cfg
.
Reprovider
.
Interval
!=
"0"
{
interval
:=
kReprovideFrequency
...
...
@@ -290,7 +290,7 @@ func (n *IpfsNode) startLateOnlineServices(ctx context.Context) error {
interval
=
dur
}
go
n
.
Reprovider
.
ProvideEvery
(
ctx
,
interval
)
go
n
.
Reprovider
.
ProvideEvery
(
interval
)
}
return
nil
...
...
exchange/reprovide/providers.go
浏览文件 @
17ae331b
...
...
@@ -26,6 +26,7 @@ func NewPinnedProvider(pinning pin.Pinner, dag merkledag.DAGService, onlyRoots b
outCh
:=
make
(
chan
*
cid
.
Cid
)
go
func
()
{
defer
close
(
outCh
)
set
.
ForEach
(
func
(
c
*
cid
.
Cid
)
error
{
select
{
case
<-
ctx
.
Done
()
:
...
...
exchange/reprovide/reprovide.go
浏览文件 @
17ae331b
...
...
@@ -16,35 +16,48 @@ var log = logging.Logger("reprovider")
type
KeyChanFunc
func
(
context
.
Context
)
(
<-
chan
*
cid
.
Cid
,
error
)
type
Reprovider
struct
{
ctx
context
.
Context
trigger
chan
context
.
CancelFunc
// The routing system to provide values through
rsys
routing
.
ContentRouting
keyProvider
KeyChanFunc
}
func
NewReprovider
(
rsys
routing
.
ContentRouting
,
keyProvider
KeyChanFunc
)
*
Reprovider
{
func
NewReprovider
(
ctx
context
.
Context
,
rsys
routing
.
ContentRouting
,
keyProvider
KeyChanFunc
)
*
Reprovider
{
return
&
Reprovider
{
rsys
:
rsys
,
ctx
:
ctx
,
trigger
:
make
(
chan
context
.
CancelFunc
),
rsys
:
rsys
,
keyProvider
:
keyProvider
,
}
}
func
(
rp
*
Reprovider
)
ProvideEvery
(
ctx
context
.
Context
,
tick
time
.
Duration
)
{
func
(
rp
*
Reprovider
)
ProvideEvery
(
tick
time
.
Duration
)
{
// dont reprovide immediately.
// may have just started the daemon and shutting it down immediately.
// probability( up another minute | uptime ) increases with uptime.
after
:=
time
.
After
(
time
.
Minute
)
var
done
context
.
CancelFunc
for
{
select
{
case
<-
ctx
.
Done
()
:
case
<-
rp
.
ctx
.
Done
()
:
return
case
done
=
<-
rp
.
trigger
:
case
<-
after
:
err
:=
rp
.
Reprovide
(
ctx
)
if
err
!=
nil
{
log
.
Debug
(
err
)
}
after
=
time
.
After
(
tick
)
}
err
:=
rp
.
Reprovide
(
rp
.
ctx
)
if
err
!=
nil
{
log
.
Debug
(
err
)
}
if
done
!=
nil
{
done
()
}
after
=
time
.
After
(
tick
)
}
}
...
...
@@ -72,3 +85,16 @@ func (rp *Reprovider) Reprovide(ctx context.Context) error {
}
return
nil
}
func
(
rp
*
Reprovider
)
Trigger
(
ctx
context
.
Context
)
error
{
progressCtx
,
done
:=
context
.
WithCancel
(
ctx
)
select
{
case
<-
rp
.
ctx
.
Done
()
:
return
context
.
Canceled
case
<-
ctx
.
Done
()
:
return
context
.
Canceled
case
rp
.
trigger
<-
done
:
<-
progressCtx
.
Done
()
return
nil
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论