Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
d5331e7d
提交
d5331e7d
authored
1月 28, 2015
作者:
Brian Tiger Chow
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(gcr/s) add eventlogs
上级
f17ede83
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
32 行增加
和
8 行删除
+32
-8
client.go
routing/grandcentral/client.go
+6
-0
standard.go
routing/grandcentral/proxy/standard.go
+22
-8
server.go
routing/grandcentral/server.go
+4
-0
没有找到文件。
routing/grandcentral/client.go
浏览文件 @
d5331e7d
...
...
@@ -36,6 +36,7 @@ func NewClient(px proxy.Proxy, h host.Host, ps peer.Peerstore, local peer.ID) (*
}
func
(
c
*
Client
)
FindProvidersAsync
(
ctx
context
.
Context
,
k
u
.
Key
,
max
int
)
<-
chan
peer
.
PeerInfo
{
defer
log
.
EventBegin
(
ctx
,
"findProviders"
,
&
k
)
.
Done
()
ch
:=
make
(
chan
peer
.
PeerInfo
)
go
func
()
{
defer
close
(
ch
)
...
...
@@ -58,6 +59,7 @@ func (c *Client) FindProvidersAsync(ctx context.Context, k u.Key, max int) <-cha
}
func
(
c
*
Client
)
PutValue
(
ctx
context
.
Context
,
k
u
.
Key
,
v
[]
byte
)
error
{
defer
log
.
EventBegin
(
ctx
,
"putValue"
,
&
k
)
.
Done
()
r
,
err
:=
makeRecord
(
c
.
peerstore
,
c
.
local
,
k
,
v
)
if
err
!=
nil
{
return
err
...
...
@@ -68,6 +70,7 @@ func (c *Client) PutValue(ctx context.Context, k u.Key, v []byte) error {
}
func
(
c
*
Client
)
GetValue
(
ctx
context
.
Context
,
k
u
.
Key
)
([]
byte
,
error
)
{
defer
log
.
EventBegin
(
ctx
,
"getValue"
,
&
k
)
.
Done
()
msg
:=
pb
.
NewMessage
(
pb
.
Message_GET_VALUE
,
string
(
k
),
0
)
response
,
err
:=
c
.
proxy
.
SendRequest
(
ctx
,
msg
)
// TODO wrap to hide the remote
if
err
!=
nil
{
...
...
@@ -77,6 +80,7 @@ func (c *Client) GetValue(ctx context.Context, k u.Key) ([]byte, error) {
}
func
(
c
*
Client
)
Provide
(
ctx
context
.
Context
,
k
u
.
Key
)
error
{
defer
log
.
EventBegin
(
ctx
,
"provide"
,
&
k
)
.
Done
()
msg
:=
pb
.
NewMessage
(
pb
.
Message_ADD_PROVIDER
,
string
(
k
),
0
)
// FIXME how is connectedness defined for the local node
pri
:=
[]
pb
.
PeerRoutingInfo
{
...
...
@@ -92,6 +96,7 @@ func (c *Client) Provide(ctx context.Context, k u.Key) error {
}
func
(
c
*
Client
)
FindPeer
(
ctx
context
.
Context
,
id
peer
.
ID
)
(
peer
.
PeerInfo
,
error
)
{
defer
log
.
EventBegin
(
ctx
,
"findPeer"
,
id
)
.
Done
()
request
:=
pb
.
NewMessage
(
pb
.
Message_FIND_NODE
,
string
(
id
),
0
)
response
,
err
:=
c
.
proxy
.
SendRequest
(
ctx
,
request
)
// hide remote
if
err
!=
nil
{
...
...
@@ -121,6 +126,7 @@ func makeRecord(ps peer.Peerstore, p peer.ID, k u.Key, v []byte) (*pb.Record, er
}
func
(
c
*
Client
)
Ping
(
ctx
context
.
Context
,
id
peer
.
ID
)
(
time
.
Duration
,
error
)
{
defer
log
.
EventBegin
(
ctx
,
"ping"
,
id
)
.
Done
()
return
time
.
Nanosecond
,
errors
.
New
(
"grandcentral routing does not support the ping method"
)
}
...
...
routing/grandcentral/proxy/standard.go
浏览文件 @
d5331e7d
...
...
@@ -13,10 +13,10 @@ import (
errors
"github.com/jbenet/go-ipfs/util/debugerror"
)
var
log
=
eventlog
.
Logger
(
"proxy"
)
const
ProtocolGCR
=
"/ipfs/grandcentral"
var
log
=
eventlog
.
Logger
(
"grandcentral/proxy"
)
type
Proxy
interface
{
HandleStream
(
inet
.
Stream
)
SendMessage
(
ctx
context
.
Context
,
m
*
dhtpb
.
Message
)
error
...
...
@@ -48,8 +48,15 @@ func (px *standard) SendMessage(ctx context.Context, m *dhtpb.Message) error {
return
err
// NB: returns the last error
}
func
(
px
*
standard
)
sendMessage
(
ctx
context
.
Context
,
m
*
dhtpb
.
Message
,
remote
peer
.
ID
)
error
{
if
err
:=
px
.
Host
.
Connect
(
ctx
,
peer
.
PeerInfo
{
ID
:
remote
});
err
!=
nil
{
func
(
px
*
standard
)
sendMessage
(
ctx
context
.
Context
,
m
*
dhtpb
.
Message
,
remote
peer
.
ID
)
(
err
error
)
{
e
:=
log
.
EventBegin
(
ctx
,
"sendRoutingMessage"
,
px
.
Host
.
ID
(),
remote
,
m
)
defer
func
()
{
if
err
!=
nil
{
e
.
SetError
(
err
)
}
e
.
Done
()
}()
if
err
=
px
.
Host
.
Connect
(
ctx
,
peer
.
PeerInfo
{
ID
:
remote
});
err
!=
nil
{
return
err
}
s
,
err
:=
px
.
Host
.
NewStream
(
ProtocolGCR
,
remote
)
...
...
@@ -78,8 +85,15 @@ func (px *standard) SendRequest(ctx context.Context, m *dhtpb.Message) (*dhtpb.M
return
nil
,
err
// NB: returns the last error
}
func
(
px
*
standard
)
sendRequest
(
ctx
context
.
Context
,
m
*
dhtpb
.
Message
,
remote
peer
.
ID
)
(
*
dhtpb
.
Message
,
error
)
{
if
err
:=
px
.
Host
.
Connect
(
ctx
,
peer
.
PeerInfo
{
ID
:
remote
});
err
!=
nil
{
func
(
px
*
standard
)
sendRequest
(
ctx
context
.
Context
,
m
*
dhtpb
.
Message
,
remote
peer
.
ID
)
(
_
*
dhtpb
.
Message
,
err
error
)
{
e
:=
log
.
EventBegin
(
ctx
,
"sendRoutingRequest"
,
px
.
Host
.
ID
(),
remote
,
m
)
defer
func
()
{
if
err
!=
nil
{
e
.
SetError
(
err
)
}
e
.
Done
()
}()
if
err
=
px
.
Host
.
Connect
(
ctx
,
peer
.
PeerInfo
{
ID
:
remote
});
err
!=
nil
{
return
nil
,
err
}
s
,
err
:=
px
.
Host
.
NewStream
(
ProtocolGCR
,
remote
)
...
...
@@ -89,12 +103,12 @@ func (px *standard) sendRequest(ctx context.Context, m *dhtpb.Message, remote pe
defer
s
.
Close
()
r
:=
ggio
.
NewDelimitedReader
(
s
,
inet
.
MessageSizeMax
)
w
:=
ggio
.
NewDelimitedWriter
(
s
)
if
err
:
=
w
.
WriteMsg
(
m
);
err
!=
nil
{
if
err
=
w
.
WriteMsg
(
m
);
err
!=
nil
{
return
nil
,
err
}
var
reply
dhtpb
.
Message
if
err
:
=
r
.
ReadMsg
(
&
reply
);
err
!=
nil
{
if
err
=
r
.
ReadMsg
(
&
reply
);
err
!=
nil
{
return
nil
,
err
}
// need ctx expiration?
...
...
routing/grandcentral/server.go
浏览文件 @
d5331e7d
...
...
@@ -42,6 +42,8 @@ func (s *Server) HandleRequest(ctx context.Context, p peer.ID, req *dhtpb.Messag
func
(
s
*
Server
)
handleMessage
(
ctx
context
.
Context
,
p
peer
.
ID
,
req
*
dhtpb
.
Message
)
(
peer
.
ID
,
*
dhtpb
.
Message
)
{
log
.
EventBegin
(
ctx
,
"routingMessageReceived"
,
req
,
p
,
s
.
local
)
.
Done
()
// TODO may need to differentiate between local and remote
// FIXME threw everything into this switch statement to get things going.
// Once each operation is well-defined, extract pluggable backend so any
// database may be used.
...
...
@@ -131,6 +133,7 @@ func putRoutingRecord(ds datastore.Datastore, k util.Key, value *dhtpb.Record) e
}
func
putRoutingProviders
(
ds
datastore
.
Datastore
,
k
util
.
Key
,
providers
[]
*
dhtpb
.
Message_Peer
)
error
{
log
.
Event
(
context
.
Background
(),
"putRoutingProviders"
,
&
k
)
pkey
:=
datastore
.
KeyWithNamespaces
([]
string
{
"routing"
,
"providers"
,
k
.
String
()})
if
v
,
err
:=
ds
.
Get
(
pkey
);
err
==
nil
{
if
msg
,
ok
:=
v
.
([]
byte
);
ok
{
...
...
@@ -166,6 +169,7 @@ func storeProvidersToPeerstore(ps peer.Peerstore, p peer.ID, providers []*dhtpb.
}
func
getRoutingProviders
(
local
peer
.
ID
,
ds
datastore
.
Datastore
,
k
util
.
Key
)
([]
*
dhtpb
.
Message_Peer
,
error
)
{
log
.
Event
(
context
.
Background
(),
"getProviders"
,
local
,
&
k
)
var
providers
[]
*
dhtpb
.
Message_Peer
exists
,
err
:=
ds
.
Has
(
k
.
DsKey
())
// TODO store values in a local datastore?
if
err
==
nil
&&
exists
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论