diff --git a/waku/v2/peermanager/peer_manager.go b/waku/v2/peermanager/peer_manager.go index 5e99db7d..e237f86b 100644 --- a/waku/v2/peermanager/peer_manager.go +++ b/waku/v2/peermanager/peer_manager.go @@ -156,24 +156,20 @@ func (pm *PeerManager) connectToRelayPeers() { return } totalRelayPeers := inRelayPeers.Len() + outRelayPeers.Len() - // Establish additional connections if there are peers. + // Establish additional connections connected peers are lesser than target. //What if the not connected peers in peerstore are not relay peers??? - if totalRelayPeers < pm.host.Peerstore().Peers().Len() { + if totalRelayPeers < pm.maxRelayPeers { //Find not connected peers. notConnectedPeers := pm.getNotConnectedPers() - //Figure out outside backoff peers. - + if notConnectedPeers.Len() == 0 { + return + } //Connect to eligible peers. numPeersToConnect := pm.maxRelayPeers - totalRelayPeers if numPeersToConnect > notConnectedPeers.Len() { - numPeersToConnect = notConnectedPeers.Len() - 1 + numPeersToConnect = notConnectedPeers.Len() } - - if numPeersToConnect <= 0 { - return - } - pm.connectToPeers(notConnectedPeers[0:numPeersToConnect]) } //Else: Should we raise some sort of unhealthy event?? } diff --git a/waku/v2/peermanager/peer_manager_test.go b/waku/v2/peermanager/peer_manager_test.go index 4f8bcbe1..f6c0c66d 100644 --- a/waku/v2/peermanager/peer_manager_test.go +++ b/waku/v2/peermanager/peer_manager_test.go @@ -28,9 +28,11 @@ func initTest(t *testing.T) (context.Context, *PeerManager, func()) { h1, err := tests.MakeHost(ctx, 0, rand.Reader) require.NoError(t, err) defer h1.Close() + // host 1 is used by peer manager pm := NewPeerManager(10, utils.Logger()) pm.SetHost(h1) + return ctx, pm, func() { cancel() h1.Close() @@ -153,13 +155,15 @@ func TestAdditionAndRemovalOfPeer(t *testing.T) { } func TestConnectToRelayPeers(t *testing.T) { - defer func() { - if r := recover(); r != nil { - t.Errorf("TestConnectToRelayPeers panicked: %v", r) - } - }() - _, pm, deferFn := initTest(t) + ctx, pm, deferFn := initTest(t) + pc, err := NewPeerConnectionStrategy(pm, 120*time.Second, pm.logger) + require.NoError(t, err) + pm.SetPeerConnector(pc) + err = pc.Start(ctx) + require.NoError(t, err) + pm.Start(ctx) + defer deferFn() pm.connectToRelayPeers()