Skip to content

Commit

Permalink
peer-selection: use peerSelectionStateToCounters
Browse files Browse the repository at this point in the history
Use `peerSelectionStateToCounters` to compute numbers of peers over
which outbound-governor is making decisions.
  • Loading branch information
coot committed Apr 16, 2024
1 parent 5498c3f commit 974fb6b
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 66 deletions.
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down
Expand Up @@ -37,7 +37,6 @@ belowTarget :: (MonadSTM m, Ord peeraddr)
belowTarget actions
blockedAt
st@PeerSelectionState {
publicRootPeers,
bigLedgerPeerRetryTime,
inProgressBigLedgerPeersReq,
targets = PeerSelectionTargets {
Expand Down Expand Up @@ -68,7 +67,12 @@ belowTarget actions
| otherwise
= GuardedSkip Nothing
where
numBigLedgerPeers = Set.size (PublicRootPeers.getBigLedgerPeers publicRootPeers)
PeerSelectionCounters {
numberOfKnownBigLedgerPeers = numBigLedgerPeers
}
=
peerSelectionStateToCounters st

maxExtraBigLedgerPeers = targetNumberOfKnownBigLedgerPeers
- numBigLedgerPeers

Expand Down Expand Up @@ -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
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Expand Up @@ -56,8 +56,6 @@ belowTarget actions
policyPeerShareRetryTime
}
st@PeerSelectionState {
knownPeers,
publicRootPeers,
establishedPeers,
inProgressPeerShareReqs,
inProgressDemoteToCold,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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


-------------------------------
Expand Down
Expand Up @@ -31,8 +31,6 @@ belowTarget :: (MonadSTM m, Ord peeraddr)
belowTarget actions
blockedAt
st@PeerSelectionState {
localRootPeers,
publicRootPeers,
publicRootRetryTime,
inProgressPublicRootsReq,
targets = PeerSelectionTargets {
Expand Down Expand Up @@ -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


Expand Down

0 comments on commit 974fb6b

Please sign in to comment.