Skip to content

Commit c78b09d

Browse files
fix: filter stats mismatch and add bad peer check for light mode (#1241)
1 parent fdb3c3d commit c78b09d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

waku/v2/api/filter/filter_manager.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ func (mgr *FilterManager) UnsubscribeFilter(filterID string) {
230230
}
231231
if len(af.sub.ContentFilter.ContentTopics) == 0 {
232232
af.cancel()
233+
delete(mgr.filterSubscriptions, filterConfig.ID)
233234
} else {
234235
go af.sub.Unsubscribe(filterConfig.contentFilter)
235236
}

waku/v2/peermanager/peer_manager.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ const (
101101
const maxFailedAttempts = 5
102102
const prunePeerStoreInterval = 10 * time.Minute
103103
const 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
107109
func 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+
259273
func (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

Comments
 (0)