Skip to content

Commit

Permalink
peer-selection: extended PeerSelectionInterfaces
Browse files Browse the repository at this point in the history
Include `TVar`s which the outbound governor is writing to.
  • Loading branch information
coot committed Apr 18, 2024
1 parent 4f1c95d commit 6159d63
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 34 deletions.
Expand Up @@ -3486,8 +3486,14 @@ _governorFindingPublicRoots :: Int
-> StrictTVar IO OutboundConnectionsState
-> IO Void
_governorFindingPublicRoots targetNumberOfRootPeers readDomains readUseBootstrapPeers readLedgerStateJudgement peerSharing olocVar = do
countersVar <- newTVarIO emptyPeerSelectionCounters
publicStateVar <- makePublicPeerSelectionStateVar
debugStateVar <- newTVarIO $ emptyPeerSelectionState (mkStdGen 42)
dnsSemaphore <- newLedgerAndPublicRootDNSSemaphore
let interfaces = PeerSelectionInterfaces {
countersVar,
publicStateVar,
debugStateVar,
readUseLedgerPeers = return DontUseLedgerPeers
}
publicRootPeersProvider
Expand All @@ -3497,16 +3503,10 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains readUseBootstrap
DNS.defaultResolvConf
readDomains
(ioDNSActions LookupReqAAndAAAA) $ \requestPublicRootPeers -> do
publicStateVar <- makePublicPeerSelectionStateVar
debugVar <- newTVarIO $ emptyPeerSelectionState (mkStdGen 42)
countersVar <- newTVarIO emptyPeerSelectionCounters
peerSelectionGovernor
tracer tracer tracer
-- TODO: #3182 Rng seed should come from quickcheck.
(mkStdGen 42)
countersVar
publicStateVar
debugVar
actions
{ requestPublicRootPeers = \_ ->
transformPeerSelectionAction requestPublicRootPeers }
Expand Down
Expand Up @@ -211,11 +211,14 @@ governorAction mockEnv = do
(ledgerStateJudgement mockEnv)
usbVar <- playTimedScript (contramap TraceEnvSetUseBootstrapPeers tracerMockEnv)
(useBootstrapPeers mockEnv)
debugVar <- StrictTVar.newTVarIO (emptyPeerSelectionState (mkStdGen 42))
debugStateVar <- StrictTVar.newTVarIO (emptyPeerSelectionState (mkStdGen 42))
countersVar <- StrictTVar.newTVarIO emptyPeerSelectionCounters
policy <- mockPeerSelectionPolicy mockEnv
actions <- mockPeerSelectionActions tracerMockEnv mockEnv (readTVar usbVar) (readTVar lsjVar) policy
let interfaces = PeerSelectionInterfaces {
countersVar,
publicStateVar,
debugStateVar,
-- peer selection tests are not relying on `UseLedgerPeers`
readUseLedgerPeers = return DontUseLedgerPeers
}
Expand All @@ -228,9 +231,6 @@ governorAction mockEnv = do
tracerDebugPeerSelection
tracerTracePeerSelectionCounters
(mkStdGen 42)
countersVar
publicStateVar
debugVar
actions
policy
interfaces
Expand Down
6 changes: 3 additions & 3 deletions ouroboros-network/src/Ouroboros/Network/Diffusion/P2P.hs
Expand Up @@ -1006,12 +1006,12 @@ runM Interfaces
peerSelectionTracer
dtTracePeerSelectionCounters
fuzzRng
countersVar
daPublicPeerSelectionVar
dbgVar
peerSelectionActions
peerSelectionPolicy
PeerSelectionInterfaces {
countersVar,
publicStateVar = daPublicPeerSelectionVar,
debugStateVar = dbgVar,
readUseLedgerPeers = daReadUseLedgerPeers
}

Expand Down
25 changes: 8 additions & 17 deletions ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs
Expand Up @@ -469,24 +469,17 @@ peerSelectionGovernor :: ( Alternative (STM m)
-> Tracer m (DebugPeerSelection peeraddr)
-> Tracer m PeerSelectionCounters
-> StdGen
-> StrictTVar m PeerSelectionCounters
-> StrictTVar m (PublicPeerSelectionState peeraddr)
-> StrictTVar m (PeerSelectionState peeraddr peerconn)
-> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
-> PeerSelectionInterfaces m
-> PeerSelectionInterfaces peeraddr peerconn m
-> m Void
peerSelectionGovernor tracer debugTracer countersTracer fuzzRng
countersVar publicStateVar debugStateVar
actions policy interfaces =
JobPool.withJobPool $ \jobPool ->
peerSelectionGovernorLoop
tracer
debugTracer
countersTracer
countersVar
publicStateVar
debugStateVar
actions
policy
interfaces
Expand Down Expand Up @@ -521,24 +514,22 @@ peerSelectionGovernorLoop :: forall m peeraddr peerconn.
=> Tracer m (TracePeerSelection peeraddr)
-> Tracer m (DebugPeerSelection peeraddr)
-> Tracer m PeerSelectionCounters
-> StrictTVar m PeerSelectionCounters
-> StrictTVar m (PublicPeerSelectionState peeraddr)
-> StrictTVar m (PeerSelectionState peeraddr peerconn)
-> PeerSelectionActions peeraddr peerconn m
-> PeerSelectionPolicy peeraddr m
-> PeerSelectionInterfaces m
-> PeerSelectionInterfaces peeraddr peerconn m
-> JobPool () m (Completion m peeraddr peerconn)
-> PeerSelectionState peeraddr peerconn
-> m Void
peerSelectionGovernorLoop tracer
debugTracer
countersTracer
countersVar
publicStateVar
debugStateVar
actions
policy
interfaces
interfaces@PeerSelectionInterfaces {
countersVar,
publicStateVar,
debugStateVar
}
jobPool
pst = do
loop pst (Time 0) `catch` (\e -> traceWith tracer (TraceOutboundGovernorCriticalFailure e) >> throwIO e)
Expand Down Expand Up @@ -776,7 +767,7 @@ wakeupDecision st _now =
--
readPromiscuousMode
:: MonadSTM m
=> PeerSelectionInterfaces m
=> PeerSelectionInterfaces peeraddr peerconn m
-> UseBootstrapPeers
-> PeerSelectionSetsWithSizes peeraddr
-> STM m Bool
Expand Down
Expand Up @@ -404,10 +404,24 @@ data PeerSelectionActions peeraddr peerconn m = PeerSelectionActions {
-- | Interfaces required by the peer selection governor, which do not need to
-- be shared with actions and thus are not part of `PeerSelectionActions`.
--
-- TODO: add other `TVar`s which outbound governor is using.
--
data PeerSelectionInterfaces m = PeerSelectionInterfaces {
readUseLedgerPeers :: STM m UseLedgerPeers
data PeerSelectionInterfaces peeraddr peerconn m = PeerSelectionInterfaces {
-- | PeerSelectionCounters are shared with churn through a `StrictTVar`.
--
countersVar :: StrictTVar m PeerSelectionCounters,

-- | PublicPeerSelectionState var.
--
publicStateVar :: StrictTVar m (PublicPeerSelectionState peeraddr),

-- | PeerSelectionState shared for debugging purposes (to support SIGUSR1
-- debug event tracing)
--
debugStateVar :: StrictTVar m (PeerSelectionState peeraddr peerconn),

-- | `UseLedgerPeers` used by `peerSelectionGovernor` to support
-- `HiddenRelayOrBP`
--
readUseLedgerPeers :: STM m UseLedgerPeers
}


Expand Down

0 comments on commit 6159d63

Please sign in to comment.