Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
a865fde2
提交
a865fde2
authored
8月 03, 2017
作者:
Łukasz Magiera
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
reprovider: make reprovide cmd error if reprovider is active
License: MIT Signed-off-by:
Łukasz Magiera
<
magik6k@gmail.com
>
上级
0f692baf
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
35 行增加
和
6 行删除
+35
-6
reprovide.go
exchange/reprovide/reprovide.go
+35
-6
没有找到文件。
exchange/reprovide/reprovide.go
浏览文件 @
a865fde2
...
...
@@ -14,10 +14,11 @@ import (
var
log
=
logging
.
Logger
(
"reprovider"
)
type
keyChanFunc
func
(
context
.
Context
)
(
<-
chan
*
cid
.
Cid
,
error
)
type
doneFunc
func
(
error
)
type
Reprovider
struct
{
ctx
context
.
Context
trigger
chan
context
.
Cancel
Func
trigger
chan
done
Func
// The routing system to provide values through
rsys
routing
.
ContentRouting
...
...
@@ -29,7 +30,7 @@ type Reprovider struct {
func
NewReprovider
(
ctx
context
.
Context
,
rsys
routing
.
ContentRouting
,
keyProvider
keyChanFunc
)
*
Reprovider
{
return
&
Reprovider
{
ctx
:
ctx
,
trigger
:
make
(
chan
context
.
Cancel
Func
),
trigger
:
make
(
chan
done
Func
),
rsys
:
rsys
,
keyProvider
:
keyProvider
,
...
...
@@ -42,7 +43,7 @@ func (rp *Reprovider) ProvideEvery(tick time.Duration) {
// 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
.
Cancel
Func
var
done
done
Func
for
{
select
{
case
<-
rp
.
ctx
.
Done
()
:
...
...
@@ -51,14 +52,19 @@ func (rp *Reprovider) ProvideEvery(tick time.Duration) {
case
<-
after
:
}
unmute
:=
rp
.
muteTrigger
()
err
:=
rp
.
Reprovide
()
if
err
!=
nil
{
log
.
Debug
(
err
)
}
if
done
!=
nil
{
done
()
done
(
err
)
}
unmute
()
after
=
time
.
After
(
tick
)
}
}
...
...
@@ -93,13 +99,36 @@ func (rp *Reprovider) Reprovide() error {
func
(
rp
*
Reprovider
)
Trigger
(
ctx
context
.
Context
)
error
{
progressCtx
,
done
:=
context
.
WithCancel
(
ctx
)
var
err
error
df
:=
func
(
e
error
)
{
err
=
e
done
()
}
select
{
case
<-
rp
.
ctx
.
Done
()
:
return
context
.
Canceled
case
<-
ctx
.
Done
()
:
return
context
.
Canceled
case
rp
.
trigger
<-
d
one
:
case
rp
.
trigger
<-
d
f
:
<-
progressCtx
.
Done
()
return
nil
return
err
}
}
func
(
rp
*
Reprovider
)
muteTrigger
()
context
.
CancelFunc
{
ctx
,
cf
:=
context
.
WithCancel
(
rp
.
ctx
)
go
func
()
{
defer
cf
()
for
{
select
{
case
<-
ctx
.
Done
()
:
return
case
done
:=
<-
rp
.
trigger
:
done
(
fmt
.
Errorf
(
"reprovider is already running"
))
}
}
}()
return
cf
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论