Skip to content

Commit

Permalink
Filter ourselves from the PeerSharing result set
Browse files Browse the repository at this point in the history
  • Loading branch information
bolt12 committed Feb 8, 2023
1 parent 71d9603 commit 90796a1
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 9 deletions.
4 changes: 4 additions & 0 deletions ouroboros-network/src/Ouroboros/Network/Diffusion/P2P.hs
Expand Up @@ -966,6 +966,8 @@ runM Interfaces
dtDebugPeerSelectionInitiatorTracer
dtTracePeerSelectionCounters
fuzzRng
cmIPv4Address
cmIPv6Address
publicStateVar
peerSelectionActions
(Diffusion.Policies.simplePeerSelectionPolicy
Expand Down Expand Up @@ -1113,6 +1115,8 @@ runM Interfaces
dtDebugPeerSelectionInitiatorResponderTracer
dtTracePeerSelectionCounters
fuzzRng
cmIPv4Address
cmIPv6Address
publicStateVar
peerSelectionActions
(Diffusion.Policies.simplePeerSelectionPolicy
Expand Down
17 changes: 14 additions & 3 deletions ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs
Expand Up @@ -441,18 +441,23 @@ peerSelectionGovernor :: (MonadAsync m, MonadLabelledSTM m, MonadMask m,
-> Tracer m (DebugPeerSelection peeraddr)
-> Tracer m PeerSelectionCounters
-> StdGen
-> Maybe peeraddr -- ^ IPv4 Address
-> Maybe peeraddr -- ^ IPv6 Address
-> StrictTVar m (PublicPeerSelectionState peeraddr)
-> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
-> m Void
peerSelectionGovernor tracer debugTracer countersTracer fuzzRng stateVar actions policy =
peerSelectionGovernor tracer debugTracer countersTracer fuzzRng mbLocalIPv4
mbLocalIPv6 stateVar actions policy =
JobPool.withJobPool $ \jobPool -> do
localPeers <- map (\(target, _) -> (target, 0))
<$> atomically (readLocalRootPeers actions)
peerSelectionGovernorLoop
tracer
debugTracer
countersTracer
mbLocalIPv4
mbLocalIPv6
stateVar
actions
policy
Expand Down Expand Up @@ -481,6 +486,8 @@ peerSelectionGovernorLoop :: forall m peeraddr peerconn.
=> Tracer m (TracePeerSelection peeraddr)
-> Tracer m (DebugPeerSelection peeraddr)
-> Tracer m PeerSelectionCounters
-> Maybe peeraddr -- ^ IPv4 Address
-> Maybe peeraddr -- ^ IPv6 Address
-> StrictTVar m (PublicPeerSelectionState peeraddr)
-> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
Expand All @@ -490,6 +497,8 @@ peerSelectionGovernorLoop :: forall m peeraddr peerconn.
peerSelectionGovernorLoop tracer
debugTracer
countersTracer
mbLocalIPv4
mbLocalIPv6
stateVar
actions
policy
Expand Down Expand Up @@ -559,8 +568,10 @@ peerSelectionGovernorLoop tracer
<> Monitor.newInboundConnections actions st

-- All the alternative non-blocking internal decisions.
<> RootPeers.belowTarget actions blockedAt st
<> KnownPeers.belowTarget actions peerSharing policy st
<> RootPeers.belowTarget actions blockedAt st
<> KnownPeers.belowTarget actions peerSharing
mbLocalIPv4
mbLocalIPv6 policy st
<> KnownPeers.aboveTarget policy st
<> EstablishedPeers.belowTarget actions policy st
<> EstablishedPeers.aboveTarget actions policy st
Expand Down
Expand Up @@ -43,9 +43,13 @@ import Ouroboros.Network.Protocol.PeerSharing.Type (PeerSharingAmount)
belowTarget :: (MonadAsync m, MonadTimer m, Ord peeraddr)
=> PeerSelectionActions peeraddr peerconn m
-> PeerSharing
-> Maybe peeraddr -- ^ IPv4 Address
-> Maybe peeraddr -- ^ IPv6 Address
-> MkGuardedDecision peeraddr peerconn m
belowTarget actions
peerSharing
mbLocalIPv4
mbLocalIPv6
policy@PeerSelectionPolicy {
policyMaxInProgressPeerShareReqs,
policyPickKnownPeersForPeerShare,
Expand Down Expand Up @@ -108,7 +112,7 @@ belowTarget actions
establishedPeers
},
decisionJobs =
[jobPeerShare actions policy selForPSWithAmount]
[jobPeerShare actions policy mbLocalIPv4 mbLocalIPv6 selForPSWithAmount]
}

-- If we could peer share except that there are none currently available
Expand All @@ -134,10 +138,13 @@ jobPeerShare :: forall m peeraddr peerconn.
(MonadAsync m, MonadTimer m, Ord peeraddr)
=> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
-> Maybe peeraddr -- ^ IPv4 Address
-> Maybe peeraddr -- ^ IPv6 Address
-> [(PeerSharingAmount, peeraddr)]
-> Job () m (Completion m peeraddr peerconn)
jobPeerShare PeerSelectionActions{requestPeerShare}
PeerSelectionPolicy{..} =
PeerSelectionPolicy{..}
mbLocalIPv4 mbLocalIPv6 =
\peers -> Job (jobPhase1 peers) (handler (map snd peers)) () "peerSharePhase1"
where
handler :: [peeraddr] -> SomeException -> m (Completion m peeraddr peerconn)
Expand Down Expand Up @@ -176,9 +183,14 @@ jobPeerShare PeerSelectionActions{requestPeerShare}
-- which means other smaller valency nodes won't be shared that
-- much. So any chance we can have of filtering them from peer
-- sharing results is welcome.
--
-- We also filter ourselves from the result set.
newPeers = [ p | Right (PeerSharingResult ps) <- totalResults
, p <- ps
, not (isKnownLedgerPeer p (knownPeers st)) ]
, not (isKnownLedgerPeer p (knownPeers st))
, Just p /= mbLocalIPv4
, Just p /= mbLocalIPv6
]
in Decision { decisionTrace = [ TracePeerShareResults peerResults
, TracePeerShareResultsFiltered newPeers
]
Expand Down
Expand Up @@ -2267,6 +2267,8 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains peerSharing =
tracer tracer tracer
-- TODO: #3182 Rng seed should come from quickcheck.
(mkStdGen 42)
Nothing
Nothing
publicStateVar
actions
{ requestPublicRootPeers =
Expand Down
Expand Up @@ -199,6 +199,8 @@ governorAction mockEnv = do
tracerDebugPeerSelection
tracerTracePeerSelectionCounters
(mkStdGen 42)
Nothing
Nothing
publicStateVar
actions
policy
Expand Down
Expand Up @@ -164,11 +164,12 @@ data NodeArgs =
}

instance Show NodeArgs where
show NodeArgs { naSeed, naMbTime, naRelays, naDomainMap,
naAddr, naLocalRootPeers, naLocalSelectionTargets,
naDNSTimeoutScript, naDNSLookupDelayScript } =
show NodeArgs { naSeed, naDiffusionMode, naMbTime, naRelays, naDomainMap,
naAddr, naPeerSharing, naLocalRootPeers, naLocalSelectionTargets,
naDNSTimeoutScript, naDNSLookupDelayScript } =
unwords [ "NodeArgs"
, "(" ++ show naSeed ++ ")"
, "(" ++ show naDiffusionMode ++ ")"
, "(" ++ show naMbTime ++ ")"
, show naRelays
, "(Map.fromList ["
Expand All @@ -178,6 +179,7 @@ instance Show NodeArgs where
naDomainMap
++ "])"
, "(" ++ show naAddr ++ ")"
, "(" ++ show naPeerSharing ++ ")"
, show naLocalRootPeers
, show naLocalSelectionTargets
, "(" ++ show naDNSTimeoutScript ++ ")"
Expand Down

0 comments on commit 90796a1

Please sign in to comment.