Commit 82c23336 authored by Aarsh Shah's avatar Aarsh Shah

fix bug in periodic peer pinging

parent 0d1a917f
...@@ -108,10 +108,9 @@ type IpfsDHT struct { ...@@ -108,10 +108,9 @@ type IpfsDHT struct {
// networks). // networks).
enableProviders, enableValues bool enableProviders, enableValues bool
// maxLastSuccessfulOutboundThreshold is the max threshold/upper limit for the value of "lastSuccessfulOutboundQuery" // maxLastSuccessfulOutboundThreshold is the max threshold/upper limit on the time duration
// of the peer in the bucket above which we will evict it to make place for a new peer if the bucket // between the current time and the last time a peer was useful to us.
// is full maxLastSuccessfulOutboundThreshold float64
maxLastSuccessfulOutboundThreshold time.Duration
fixLowPeersChan chan struct{} fixLowPeersChan chan struct{}
} }
...@@ -294,6 +293,7 @@ func makeRoutingTable(dht *IpfsDHT, cfg config) (*kb.RoutingTable, error) { ...@@ -294,6 +293,7 @@ func makeRoutingTable(dht *IpfsDHT, cfg config) (*kb.RoutingTable, error) {
self := kb.ConvertPeerID(dht.host.ID()) self := kb.ConvertPeerID(dht.host.ID())
rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, dht.host.Peerstore(), maxLastSuccessfulOutboundThreshold) rt, err := kb.NewRoutingTable(cfg.bucketSize, self, time.Minute, dht.host.Peerstore(), maxLastSuccessfulOutboundThreshold)
dht.maxLastSuccessfulOutboundThreshold = maxLastSuccessfulOutboundThreshold
cmgr := dht.host.ConnManager() cmgr := dht.host.ConnManager()
rt.PeerAdded = func(p peer.ID) { rt.PeerAdded = func(p peer.ID) {
......
...@@ -128,7 +128,7 @@ func (dht *IpfsDHT) startRefreshing() { ...@@ -128,7 +128,7 @@ func (dht *IpfsDHT) startRefreshing() {
// ping Routing Table peers that haven't been hear of/from in the interval they should have been. // ping Routing Table peers that haven't been hear of/from in the interval they should have been.
for _, ps := range dht.routingTable.GetPeerInfos() { for _, ps := range dht.routingTable.GetPeerInfos() {
// ping the peer if it's due for a ping and evict it if the ping fails // ping the peer if it's due for a ping and evict it if the ping fails
if time.Since(ps.LastSuccessfulOutboundQuery) > dht.maxLastSuccessfulOutboundThreshold { if float64(time.Since(ps.LastSuccessfulOutboundQuery)) > dht.maxLastSuccessfulOutboundThreshold {
livelinessCtx, cancel := context.WithTimeout(ctx, peerPingTimeout) livelinessCtx, cancel := context.WithTimeout(ctx, peerPingTimeout)
if err := dht.host.Connect(livelinessCtx, peer.AddrInfo{ID: ps.Id}); err != nil { if err := dht.host.Connect(livelinessCtx, peer.AddrInfo{ID: ps.Id}); err != nil {
logger.Debugw("evicting peer after failed ping", "peer", ps.Id, "error", err) logger.Debugw("evicting peer after failed ping", "peer", ps.Id, "error", err)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment