diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs index 98a8d5c613..96cd410806 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs @@ -130,12 +130,12 @@ belowTargetBigLedgerPeers actions = GuardedSkip Nothing where bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numActiveBigLedgerPeers - = Set.size $ activePeers - `Set.intersection` bigLedgerPeersSet - numPromoteInProgressBigLedgerPeers - = Set.size $ inProgressPromoteWarm - `Set.intersection` bigLedgerPeersSet + PeerSelectionCounters { + numberOfActiveBigLedgerPeers = numActiveBigLedgerPeers, + numberOfWarmBigLedgerPeersPromotions = numPromoteInProgressBigLedgerPeers + } + = + peerSelectionStateToCounters st belowTargetLocal :: forall peeraddr peerconn m. @@ -302,11 +302,13 @@ belowTargetOther actions | otherwise = GuardedSkip Nothing where + PeerSelectionCounters { + numberOfActivePeers = numActivePeers, + numberOfWarmPeersPromotions = numPromoteInProgress + } + = + peerSelectionStateToCounters st bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numActivePeers = Set.size $ activePeers - Set.\\ bigLedgerPeersSet - numPromoteInProgress = Set.size $ inProgressPromoteWarm - Set.\\ bigLedgerPeersSet jobPromoteWarmPeer :: forall peeraddr peerconn m. @@ -552,14 +554,12 @@ aboveTargetBigLedgerPeers actions = GuardedSkip Nothing where bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numActiveBigLedgerPeers - = Set.size $ activePeers - `Set.intersection` - bigLedgerPeersSet - numDemoteInProgressBigLedgerPeers - = Set.size $ inProgressDemoteHot - `Set.intersection` - bigLedgerPeersSet + PeerSelectionCounters { + numberOfActiveBigLedgerPeers = numActiveBigLedgerPeers, + numberOfActiveBigLedgerPeersDemotions = numDemoteInProgressBigLedgerPeers + } + = + peerSelectionStateToCounters st aboveTargetLocal :: forall peeraddr peerconn m. @@ -708,10 +708,12 @@ aboveTargetOther actions = GuardedSkip Nothing where bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numActivePeers = Set.size $ activePeers - Set.\\ bigLedgerPeersSet - numDemoteInProgress = Set.size $ inProgressDemoteHot - Set.\\ bigLedgerPeersSet + PeerSelectionCounters { + numberOfActivePeers = numActivePeers, + numberOfActivePeersDemotions = numDemoteInProgress + } + = + peerSelectionStateToCounters st jobDemoteActivePeer :: forall peeraddr peerconn m. diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs index c15856d96f..8fecb5eab7 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs @@ -37,7 +37,6 @@ belowTarget :: (MonadSTM m, Ord peeraddr) belowTarget actions blockedAt st@PeerSelectionState { - publicRootPeers, bigLedgerPeerRetryTime, inProgressBigLedgerPeersReq, targets = PeerSelectionTargets { @@ -68,7 +67,12 @@ belowTarget actions | otherwise = GuardedSkip Nothing where - numBigLedgerPeers = Set.size (PublicRootPeers.getBigLedgerPeers publicRootPeers) + PeerSelectionCounters { + numberOfKnownBigLedgerPeers = numBigLedgerPeers + } + = + peerSelectionStateToCounters st + maxExtraBigLedgerPeers = targetNumberOfKnownBigLedgerPeers - numBigLedgerPeers @@ -224,13 +228,18 @@ aboveTarget PeerSelectionPolicy {policyPickColdPeersToForget} where bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numKnownBigLedgerPeers :: Int - numKnownBigLedgerPeers = Set.size bigLedgerPeersSet + PeerSelectionCounters { + numberOfKnownBigLedgerPeers = numKnownBigLedgerPeers + } + = + peerSelectionStateToCounters st establishedBigLedgerPeers :: Set peeraddr establishedBigLedgerPeers = EstablishedPeers.toSet establishedPeers `Set.intersection` bigLedgerPeersSet + -- TODO: we should compute this with `PeerSelectionCounters`, but we also + -- need to return the `establishedBigLedgerPeers` set. numEstablishedBigLedgerPeers :: Int numEstablishedBigLedgerPeers = Set.size establishedBigLedgerPeers diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs index b7f96f8cb8..cb60618a3b 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs @@ -233,13 +233,14 @@ belowTargetOther actions | otherwise = GuardedSkip Nothing where - bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers + PeerSelectionCounters { + numberOfEstablishedPeers = numEstablishedPeers, + numberOfColdPeersPromotions = numConnectInProgress + } + = + peerSelectionStateToCounters st - numEstablishedPeers, numConnectInProgress :: Int - numEstablishedPeers = Set.size $ EstablishedPeers.toSet establishedPeers - Set.\\ bigLedgerPeersSet - numConnectInProgress = Set.size $ inProgressPromoteCold - Set.\\ bigLedgerPeersSet + bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers availableToConnect = KnownPeers.availableToConnect knownPeers Set.\\ bigLedgerPeersSet numAvailableToConnect = Set.size availableToConnect @@ -324,16 +325,14 @@ belowTargetBigLedgerPeers actions | otherwise = GuardedSkip Nothing where - bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numEstablishedPeers, numConnectInProgress :: Int - numEstablishedPeers = Set.size $ - EstablishedPeers.toSet establishedPeers - `Set.intersection` - bigLedgerPeersSet - numConnectInProgress = Set.size $ - inProgressPromoteCold - `Set.intersection` - bigLedgerPeersSet + PeerSelectionCounters { + numberOfEstablishedBigLedgerPeers = numEstablishedPeers, + numberOfColdBigLedgerPeersPromotions = numConnectInProgress + } + = + peerSelectionStateToCounters st + + bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers availableToConnect = KnownPeers.availableToConnect knownPeers `Set.intersection` bigLedgerPeersSet @@ -522,11 +521,14 @@ aboveTargetOther actions -- We only want to pick established peers that are not active, since for -- active one we need to demote them first. | let bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numEstablishedPeers, numActivePeers, numPeersToDemote :: Int - numEstablishedPeers = Set.size $ EstablishedPeers.toSet establishedPeers - Set.\\ bigLedgerPeersSet - numActivePeers = Set.size $ activePeers - Set.\\ bigLedgerPeersSet + numActivePeers, numPeersToDemote :: Int + PeerSelectionCounters { + numberOfEstablishedPeers = numEstablishedPeers, + numberOfActivePeers = numActivePeers + } + = + peerSelectionStateToCounters st + numLocalWarmPeers = Set.size localWarmPeers localWarmPeers = LocalRootPeers.keysSet localRootPeers `Set.intersection` EstablishedPeers.toSet establishedPeers @@ -606,12 +608,12 @@ aboveTargetBigLedgerPeers actions -- We only want to pick established peers that are not active, since for -- active one we need to demote them first. | let bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numEstablishedBigLedgerPeers, numBigLedgerPeersToDemote :: Int - numEstablishedBigLedgerPeers = Set.size $ EstablishedPeers.toSet establishedPeers - `Set.intersection` bigLedgerPeersSet - - numActiveBigLedgerPeers = Set.size $ activePeers - `Set.intersection` bigLedgerPeersSet + PeerSelectionCounters { + numberOfEstablishedBigLedgerPeers = numEstablishedBigLedgerPeers, + numberOfActiveBigLedgerPeers = numActiveBigLedgerPeers + } + = + peerSelectionStateToCounters st -- We want to demote big ledger peers towards the target but we avoid to -- pick active peer. The `min` is taken so that `pickPeers` is given diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs index 37d43703e5..54c0d290e8 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs @@ -56,8 +56,6 @@ belowTarget actions policyPeerShareRetryTime } st@PeerSelectionState { - knownPeers, - publicRootPeers, establishedPeers, inProgressPeerShareReqs, inProgressDemoteToCold, @@ -134,8 +132,12 @@ belowTarget actions | otherwise = GuardedSkip Nothing where - numKnownPeers = Set.size $ KnownPeers.toSet knownPeers - Set.\\ PublicRootPeers.getBigLedgerPeers publicRootPeers + PeerSelectionCounters { + numberOfKnownPeers = numKnownPeers + } + = + peerSelectionStateToCounters st + numPeerShareReqsPossible = policyMaxInProgressPeerShareReqs - inProgressPeerShareReqs -- Only peer which permit peersharing are available @@ -443,11 +445,13 @@ aboveTarget PeerSelectionPolicy { = GuardedSkip Nothing where bigLedgerPeersSet = PublicRootPeers.getBigLedgerPeers publicRootPeers - numKnownPeers, numEstablishedPeers :: Int - numKnownPeers = Set.size $ KnownPeers.toSet knownPeers - Set.\\ bigLedgerPeersSet - numEstablishedPeers = Set.size $ EstablishedPeers.toSet establishedPeers - Set.\\ bigLedgerPeersSet + + PeerSelectionCounters { + numberOfKnownPeers = numKnownPeers, + numberOfEstablishedPeers = numEstablishedPeers + } + = + peerSelectionStateToCounters st ------------------------------- diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs index 0bb9b2fc7c..4cf6ef8a53 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs @@ -31,8 +31,6 @@ belowTarget :: (MonadSTM m, Ord peeraddr) belowTarget actions blockedAt st@PeerSelectionState { - localRootPeers, - publicRootPeers, publicRootRetryTime, inProgressPublicRootsReq, targets = PeerSelectionTargets { @@ -65,8 +63,12 @@ belowTarget actions | otherwise = GuardedSkip Nothing where - numRootPeers = LocalRootPeers.size localRootPeers - + PublicRootPeers.size publicRootPeers + PeerSelectionCounters { + numberOfRootPeers = numRootPeers + } + = + peerSelectionStateToCounters st + maxExtraRootPeers = targetNumberOfRootPeers - numRootPeers