@@ -101,7 +101,9 @@ const (
101101const maxFailedAttempts = 5
102102const prunePeerStoreInterval = 10 * time .Minute
103103const peerConnectivityLoopSecs = 15
104- const maxConnsToPeerRatio = 5
104+ const maxConnsToPeerRatio = 3
105+ const badPeersCleanupInterval = 1 * time .Minute
106+ const maxDialFailures = 2
105107
106108// 80% relay peers 20% service peers
107109func relayAndServicePeers (maxConnections int ) (int , int ) {
@@ -256,16 +258,32 @@ func (pm *PeerManager) Start(ctx context.Context) {
256258 }
257259}
258260
261+ func (pm * PeerManager ) removeBadPeers () {
262+ if ! pm .RelayEnabled {
263+ for _ , peerID := range pm .host .Peerstore ().Peers () {
264+ if pm .host .Peerstore ().(wps.WakuPeerstore ).ConnFailures (peerID ) > maxDialFailures {
265+ //delete peer from peerStore
266+ pm .logger .Debug ("removing bad peer due to recurring dial failures" , zap .Stringer ("peerID" , peerID ))
267+ pm .RemovePeer (peerID )
268+ }
269+ }
270+ }
271+ }
272+
259273func (pm * PeerManager ) peerStoreLoop (ctx context.Context ) {
260274 defer utils .LogOnPanic ()
261275 t := time .NewTicker (prunePeerStoreInterval )
276+ t1 := time .NewTicker (badPeersCleanupInterval )
262277 defer t .Stop ()
278+ defer t1 .Stop ()
263279 for {
264280 select {
265281 case <- ctx .Done ():
266282 return
267283 case <- t .C :
268284 pm .prunePeerStore ()
285+ case <- t1 .C :
286+ pm .removeBadPeers ()
269287 }
270288 }
271289}
@@ -744,4 +762,9 @@ func (pm *PeerManager) HandleDialError(err error, peerID peer.ID) {
744762 pm .logger .Error ("failed to emit DialError" , zap .Error (emitterErr ))
745763 }
746764 }
765+ if ! pm .RelayEnabled && pm .host .Peerstore ().(wps.WakuPeerstore ).ConnFailures (peerID ) >= maxDialFailures {
766+ //delete peer from peerStore
767+ pm .logger .Debug ("removing bad peer due to recurring dial failures" , zap .Stringer ("peerID" , peerID ))
768+ pm .RemovePeer (peerID )
769+ }
747770}
0 commit comments