change peer validation func

This commit is contained in:
Aarsh Shah 2020-03-19 18:27:06 +05:30
parent 7c27400a1e
commit d7b6b1b091
3 changed files with 24 additions and 12 deletions

32
dht.go
View File

@ -202,10 +202,6 @@ func NewDHTClient(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT
}
func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
rt, err := makeRoutingTable(h, cfg)
if err != nil {
return nil, fmt.Errorf("failed to construct routing table,err=%s", err)
}
protocols := []protocol.ID{cfg.protocolPrefix + kad2}
serverProtocols := []protocol.ID{cfg.protocolPrefix + kad2, cfg.protocolPrefix + kad1}
@ -228,7 +224,6 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
strmap: make(map[peer.ID]*messageSender),
birth: time.Now(),
rng: rand.New(rand.NewSource(rand.Int63())),
routingTable: rt,
protocols: protocols,
serverProtocols: serverProtocols,
bucketSize: cfg.bucketSize,
@ -238,6 +233,13 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
triggerSelfLookup: make(chan chan<- error),
}
// construct routing table
rt, err := makeRoutingTable(dht, cfg)
if err != nil {
return nil, fmt.Errorf("failed to construct routing table,err=%s", err)
}
dht.routingTable = rt
// create a DHT proc with the given context
dht.proc = goprocessctx.WithContext(ctx)
@ -251,15 +253,23 @@ func makeDHT(ctx context.Context, h host.Host, cfg config) (*IpfsDHT, error) {
return dht, nil
}
func makeRoutingTable(h host.Host, cfg config) (*kb.RoutingTable, error) {
self := kb.ConvertPeerID(h.ID())
func makeRoutingTable(dht *IpfsDHT, cfg config) (*kb.RoutingTable, error) {
self := kb.ConvertPeerID(dht.host.ID())
// construct the routing table with a peer validation function
pvF := func(c context.Context, p peer.ID) bool {
if err := h.Connect(c, peer.AddrInfo{ID: p}); err != nil {
// connect should work
if err := dht.host.Connect(c, peer.AddrInfo{ID: p}); err != nil {
rtPvLogger.Infof("failed to connect to peer %s for validation, err=%s", p, err)
return false
}
return true
// peer should support the DHT protocol
b, err := dht.validRTPeer(p)
if err != nil {
rtPvLogger.Errorf("failed to check if peer %s supports DHT protocol, err=%s", p, err)
}
return b
}
rtOpts := []kb.Option{kb.PeerValidationFnc(pvF)}
@ -267,9 +277,9 @@ func makeRoutingTable(h host.Host, cfg config) (*kb.RoutingTable, error) {
rtOpts = append(rtOpts, kb.TableCleanupInterval(cfg.routingTable.checkInterval))
}
rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, h.Peerstore(),
rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, dht.host.Peerstore(),
rtOpts...)
cmgr := h.ConnManager()
cmgr := dht.host.ConnManager()
rt.PeerAdded = func(p peer.ID) {
commonPrefixLen := kb.CommonPrefixLen(self, kb.ConvertPeerID(p))

2
go.mod
View File

@ -14,7 +14,7 @@ require (
github.com/libp2p/go-eventbus v0.1.0
github.com/libp2p/go-libp2p v0.5.3-0.20200221174525-7ba322244e0a
github.com/libp2p/go-libp2p-core v0.3.2-0.20200305051524-d143201d83c2
github.com/libp2p/go-libp2p-kbucket v0.3.1
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec
github.com/libp2p/go-libp2p-peerstore v0.1.4
github.com/libp2p/go-libp2p-record v0.1.2
github.com/libp2p/go-libp2p-swarm v0.2.2

2
go.sum
View File

@ -197,6 +197,8 @@ github.com/libp2p/go-libp2p-kbucket v0.2.3 h1:XtNfN4WUy0cfeJoJgWCf1lor4Pp3kBkFJ9
github.com/libp2p/go-libp2p-kbucket v0.2.3/go.mod h1:opWrBZSWnBYPc315q497huxY3sz1t488X6OiXUEYWKA=
github.com/libp2p/go-libp2p-kbucket v0.3.1 h1:aHSdqYBAyExg2xir/VN7B2myIN6yxUuDG0FeyrZpBQE=
github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec h1:TzGGI4zuTxJxobJyAxwfjm05aFJW6kanlni5snT7k6Q=
github.com/libp2p/go-libp2p-kbucket v0.3.2-0.20200319122627-7fa6dacb57ec/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8=
github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90=
github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo=