From 81291ef86271bb3ebeff4f6abc041a354b082e14 Mon Sep 17 00:00:00 2001 From: Kirill Blinichkin Date: Mon, 15 Jun 2026 06:44:59 -0500 Subject: [PATCH] fix: reset peer backoff on recovery so reconnect is not blocked (#1308) Signed-off-by: kblinichkin --- waku/v2/node/keepalive.go | 2 ++ waku/v2/peermanager/peer_connector.go | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/waku/v2/node/keepalive.go b/waku/v2/node/keepalive.go index 416666f5..38417a86 100644 --- a/waku/v2/node/keepalive.go +++ b/waku/v2/node/keepalive.go @@ -90,11 +90,13 @@ func (w *WakuNode) startKeepAlive(ctx context.Context, randomPeersPingDuration t lastTimeExecuted = w.timesource.Now() w.log.Warn("keep alive hasnt been executed recently. Killing all connections") disconnectAllPeers(w.host, w.log) + w.peerConnector.ResetBackoff() continue } else if iterationFailure >= maxAllowedSubsequentPingFailures { iterationFailure = 0 w.log.Warn("Pinging random peers failed, node is likely disconnected. Killing all connections") disconnectAllPeers(w.host, w.log) + w.peerConnector.ResetBackoff() continue } diff --git a/waku/v2/peermanager/peer_connector.go b/waku/v2/peermanager/peer_connector.go index 8cce276a..280bdf92 100644 --- a/waku/v2/peermanager/peer_connector.go +++ b/waku/v2/peermanager/peer_connector.go @@ -218,6 +218,16 @@ func (c *PeerConnectionStrategy) canDialPeer(pi peer.AddrInfo) bool { return true } +// ResetBackoff clears all accumulated per-peer connection backoffs so that +// every known peer can be retried immediately on the next connection attempt. +// Call this after a recovery event (e.g. sleep/wake, all pings failed) so that +// stale hour-long backoffs do not prevent reconnection once the network is back. +func (c *PeerConnectionStrategy) ResetBackoff() { + c.mux.Lock() + defer c.mux.Unlock() + c.cache.Purge() +} + func (c *PeerConnectionStrategy) addConnectionBackoff(peerID peer.ID) { c.mux.Lock() defer c.mux.Unlock()