From 4d4965ee83126933aabca2222b8eba7cdbbcc9bc Mon Sep 17 00:00:00 2001 From: Mostafa Date: Tue, 7 Nov 2023 00:23:28 +0800 Subject: [PATCH] fix(network): updating peer manager --- network/peermgr.go | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/network/peermgr.go b/network/peermgr.go index 6b0db7122..bd2147acf 100644 --- a/network/peermgr.go +++ b/network/peermgr.go @@ -109,31 +109,37 @@ func (mgr *peerMgr) CheckConnectivity() { mgr.logger.Debug("check connectivity", "peers", len(mgr.peers)) - // Let's check if some peers are disconnected - var connectedPeers []lp2ppeer.ID - var streamPeers []lp2ppeer.ID net := mgr.host.Network() - for pid, pi := range mgr.peers { - connectedness := net.Connectedness(pid) - if connectedness == lp2pnet.Connected { - connectedPeers = append(connectedPeers, pid) - } else { - mgr.logger.Debug("peer is not connected to us", "peer", pid) - delete(mgr.peers, pid) - } + // Make sure we have connected to at least one peer that supports the stream protocol. + hasStreamConn := 0 + for _, pi := range mgr.peers { if slices.Contains(pi.Protocols, mgr.streamProtocolID) { - streamPeers = append(streamPeers, pid) + hasStreamConn++ } } - // Make sure we have connected to at least one peer that supports the stream protocol. - if len(streamPeers) == 0 { - mgr.logger.Warn("no stream connection") // TODO: is it possible? + if hasStreamConn == 0 { + // TODO: is it possible? + mgr.logger.Warn("no stream connection") for pid := range mgr.peers { _ = net.ClosePeer(pid) } + + time.Sleep(1 * time.Second) + } + + // Let's check if some peers are disconnected + var connectedPeers []lp2ppeer.ID + for pid := range mgr.peers { + connectedness := net.Connectedness(pid) + if connectedness == lp2pnet.Connected { + connectedPeers = append(connectedPeers, pid) + } else { + mgr.logger.Debug("peer is not connected to us", "peer", pid) + delete(mgr.peers, pid) + } } if len(connectedPeers) > mgr.maxConns {