From c14d5cb95a2858784b0ebe3a8d0be34f351f5d41 Mon Sep 17 00:00:00 2001 From: Armando Santos Date: Mon, 2 Dec 2024 16:28:28 +0000 Subject: [PATCH] Address Review Feedback --- ouroboros-network/ouroboros-network.cabal | 2 +- .../Network/Diffusion/Testnet/Cardano.hs | 2 +- .../Diffusion/Testnet/Cardano/Simulation.hs | 15 +++-- .../Network/Diffusion/Testnet/Minimal/Node.hs | 16 +++-- .../Test/Ouroboros/Network/PeerSelection.hs | 22 +++---- .../PeerSelection/Cardano/MockEnvironment.hs | 31 +++++----- .../src/Cardano/Network/ArgumentsExtra.hs | 5 +- .../Network/PeerSelection/Governor/Monitor.hs | 30 ++++----- .../Governor/PeerSelectionActions.hs | 6 +- .../Network/PeerSelection/Governor/Types.hs | 35 ++++++----- .../Network/PeerSelection/PeerChurnArgs.hs | 10 +-- .../src/Cardano/Network/PublicRootPeers.hs | 6 +- .../src/Cardano/PeerSelection/Churn.hs | 6 +- .../src/Ouroboros/Network/Diffusion.hs | 4 +- .../src/Ouroboros/Network/Diffusion/Common.hs | 8 +-- .../Diffusion/{MinimalP2P.hs => P2P.hs} | 17 +++-- .../Network/PeerSelection/Governor.hs | 15 ++--- .../PeerSelection/Governor/ActivePeers.hs | 14 ++--- .../PeerSelection/Governor/BigLedgerPeers.hs | 8 +-- .../Governor/EstablishedPeers.hs | 14 ++--- .../PeerSelection/Governor/KnownPeers.hs | 6 +- .../Network/PeerSelection/Governor/Monitor.hs | 6 +- .../PeerSelection/Governor/RootPeers.hs | 6 +- .../Network/PeerSelection/Governor/Types.hs | 62 +++++++++++-------- .../PeerSelection/PeerSelectionActions.hs | 4 +- .../Ouroboros/Network/PeerSelection/Types.hs | 6 +- 26 files changed, 179 insertions(+), 177 deletions(-) rename ouroboros-network/src/Ouroboros/Network/Diffusion/{MinimalP2P.hs => P2P.hs} (98%) diff --git a/ouroboros-network/ouroboros-network.cabal b/ouroboros-network/ouroboros-network.cabal index ce28c0f25d..1e3bcf87f0 100644 --- a/ouroboros-network/ouroboros-network.cabal +++ b/ouroboros-network/ouroboros-network.cabal @@ -79,7 +79,7 @@ library Ouroboros.Network.Diffusion Ouroboros.Network.Diffusion.Common Ouroboros.Network.Diffusion.Configuration - Ouroboros.Network.Diffusion.MinimalP2P + Ouroboros.Network.Diffusion.P2P Ouroboros.Network.Diffusion.NonP2P Ouroboros.Network.Diffusion.Policies Ouroboros.Network.ExitPolicy diff --git a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano.hs b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano.hs index aa565f5dfe..f69c68a86b 100644 --- a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano.hs +++ b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano.hs @@ -1594,7 +1594,7 @@ prop_connect_failure (AbsIOError ioerr) = $ evs ) noEvents absInfo script where - -- must be in sync with rethrowPolicy in `Ouroboros.Network.Diffusion.MinimalP2P` + -- must be in sync with rethrowPolicy in `Ouroboros.Network.Diffusion.P2P` isFatal :: IOErrorType -> Bool isFatal ResourceExhausted = True isFatal UnsupportedOperation = True diff --git a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano/Simulation.hs b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano/Simulation.hs index 512b2ebcbb..779d81c695 100644 --- a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano/Simulation.hs +++ b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Cardano/Simulation.hs @@ -1228,7 +1228,7 @@ diffusionSimulation cardanoExtraArgs :: CardanoArgumentsExtra m cardanoExtraArgs = CardanoArgumentsExtra { - caeSyncPeerTargets = snd peerTargets + caeGenesisPeerTargets = snd peerTargets , caeReadUseBootstrapPeers = readUseBootstrapPeers , caeMinBigLedgerPeersForTrustedState = defaultMinBigLedgerPeersForTrustedState , caeConsensusMode = consensusMode @@ -1237,11 +1237,11 @@ diffusionSimulation cardanoChurnArgs :: CardanoPeerChurnArgs m cardanoChurnArgs = CardanoPeerChurnArgs { - cpcaModeVar = churnModeVar - , cpcaReadFetchMode = pure FetchModeDeadline - , cpcaSyncPeerTargets = caeSyncPeerTargets cardanoExtraArgs - , cpcaReadUseBootstrap = caeReadUseBootstrapPeers cardanoExtraArgs - , cpcaConsensusMode = consensusMode + cpcaModeVar = churnModeVar + , cpcaReadFetchMode = pure FetchModeDeadline + , cpcaGenesisPeerTargets = caeGenesisPeerTargets cardanoExtraArgs + , cpcaReadUseBootstrap = caeReadUseBootstrapPeers cardanoExtraArgs + , cpcaConsensusMode = consensusMode } arguments :: Arguments (CardanoArgumentsExtra m) (CardanoPeerChurnArgs m) PeerTrustable m @@ -1286,9 +1286,8 @@ diffusionSimulation arguments (CPST.empty consensusMode (MinBigLedgerPeersForTrustedState 0)) (cardanoExtraArgsToPeerSelectionActions cardanoExtraArgs) - CPRP.empty CPSV.empty - CPRP.cardanoPublicRootPeersActions + CPRP.cardanoPublicRootPeersAPI (cardanoPeerSelectionGovernorArgs readUseLedgerPeers peerSharing (iLedgerPeersConsensusInterface interfaces)) CPSV.cardanoPeerSelectionStatetoCounters requestPublicRootPeers' diff --git a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Minimal/Node.hs b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Minimal/Node.hs index 1997f114db..c32e6912aa 100644 --- a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Minimal/Node.hs +++ b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/Diffusion/Testnet/Minimal/Node.hs @@ -93,7 +93,7 @@ import Simulation.Network.Snocket (AddressType (..), FD) import GHC.Exception (Exception) import Ouroboros.Network.Diffusion.Common qualified as Common -import Ouroboros.Network.Diffusion.MinimalP2P (runM) +import Ouroboros.Network.Diffusion.P2P (runM) import Ouroboros.Network.PeerSelection.Governor.Types (PeerSelectionGovernorArgs) import Ouroboros.Network.PeerSelection.LedgerPeers (NumberOfPeers) @@ -108,7 +108,7 @@ import Ouroboros.Network.PeerSelection.RelayAccessPoint (DomainAccessPoint, import Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions (DNSLookupType) import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency, WarmValency) -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) import Test.Ouroboros.Network.Diffusion.Node.ChainDB (addBlock, getBlockPointSet) import Test.Ouroboros.Network.Diffusion.Node.Kernel (NodeKernel (..), NtCAddr, @@ -198,9 +198,8 @@ run :: forall extraArgs extraState extraActions extraAPI -> Arguments extraArgs extraChurnArgs extraFlags m -> extraState -> extraActions - -> extraPeers -> extraCounters - -> PublicExtraPeersActions extraPeers NtNAddr + -> PublicExtraPeersAPI extraPeers NtNAddr -> (forall muxMode responderCtx ntnVersionData bytes a b . PeerSelectionGovernorArgs extraState @@ -244,9 +243,9 @@ run :: forall extraArgs extraState extraActions extraAPI -> Tracer m (TraceLabelPeer NtNAddr (TraceFetchClientState BlockHeader)) -> m Void run blockGeneratorArgs limits ni na - emptyExtraState extraActions emptyExtraPeers - emptyExtraCounters extraPeersActions psArgs - psToExtraCounters requestPublicRootPeers peerChurnGovernor + emptyExtraState extraActions emptyExtraCounters + extraPeersAPI psArgs psToExtraCounters + requestPublicRootPeers peerChurnGovernor tracersExtra tracerBlockFetch = Node.withNodeKernelThread blockGeneratorArgs $ \ nodeKernel nodeKernelThread -> do @@ -455,9 +454,8 @@ run blockGeneratorArgs limits ni na , Common.daBulkChurnInterval = 300 , Common.daReadLedgerPeerSnapshot = pure Nothing -- ^ tested independently , Common.daEmptyExtraState = emptyExtraState - , Common.daEmptyExtraPeers = emptyExtraPeers , Common.daEmptyExtraCounters = emptyExtraCounters - , Common.daExtraPeersActions = extraPeersActions + , Common.daExtraPeersAPI = extraPeersAPI , Common.daExtraActions = extraActions , Common.daExtraChurnArgs = aExtraChurnArgs na , Common.daExtraArgs = aExtraArgs na diff --git a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection.hs b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection.hs index f1a2c0f55c..d42c80b6a9 100644 --- a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection.hs +++ b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection.hs @@ -4018,14 +4018,12 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains readUseBootstrap , updateWithState = const (const (pure ())) , extraDecisions = ExtraGuardedDecisions { - preBlocking = - [ \_ psa pst -> Cardano.monitorBootstrapPeersFlag psa pst - , \_ psa pst -> Cardano.monitorLedgerStateJudgement psa pst - , \_ _ pst -> Cardano.waitForSystemToQuiesce pst - ] - , postBlocking = [] - , preNonBlocking = [] - , postNonBlocking = [] + preBlocking = \_ psa pst -> + Cardano.monitorBootstrapPeersFlag psa pst + <> Cardano.monitorLedgerStateJudgement psa pst + <> Cardano.waitForSystemToQuiesce pst + , postBlocking = mempty + , postNonBlocking = mempty , requiredTargetsAction = \_ -> Cardano.targetPeers , requiredLocalRootsAction = \_ -> Cardano.localRoots , enableProgressMakingActions = \st -> @@ -4082,7 +4080,7 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains readUseBootstrap deactivatePeerConnection = error "deactivatePeerConnection", closePeerConnection = error "closePeerConnection" }, - readOriginalLocalRootPeers = return [], + readLocalRootPeersFromFile = return [], readInboundPeers = pure Map.empty, getLedgerStateCtx = LedgerPeersConsensusInterface { @@ -4096,14 +4094,14 @@ _governorFindingPublicRoots targetNumberOfRootPeers readDomains readUseBootstrap writeTVar olocVar a } }, - originalPeerSelectionTargets = targets, + peerSelectionTargets = targets, readLedgerPeerSnapshot = pure Nothing, extraActions = CardanoPeerSelectionActions { - cpsaSyncPeerTargets = targets, + cpsaGenesisPeerTargets = targets, cpsaReadUseBootstrapPeers = readUseBootstrapPeers }, extraStateToExtraCounters = CPSV.cardanoPeerSelectionStatetoCounters, - extraPeersActions = CPRP.cardanoPublicRootPeersActions + extraPeersAPI = CPRP.cardanoPublicRootPeersAPI } targets :: PeerSelectionTargets diff --git a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection/Cardano/MockEnvironment.hs b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection/Cardano/MockEnvironment.hs index 29a7d6eb4b..05d12eea77 100644 --- a/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection/Cardano/MockEnvironment.hs +++ b/ouroboros-network/sim-tests-lib/Test/Ouroboros/Network/PeerSelection/Cardano/MockEnvironment.hs @@ -86,9 +86,10 @@ import Cardano.Network.LedgerPeerConsensusInterface (CardanoLedgerPeersConsensusInterface (..)) import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..), requiresBootstrapPeers) -import Cardano.Network.PeerSelection.Governor.Monitor (localRoots, - monitorBootstrapPeersFlag, monitorLedgerStateJudgement, targetPeers, +import Cardano.Network.PeerSelection.Governor.Monitor + (monitorBootstrapPeersFlag, monitorLedgerStateJudgement, waitForSystemToQuiesce) +import Cardano.Network.PeerSelection.Governor.Monitor qualified as Cardano import Cardano.Network.PeerSelection.Governor.PeerSelectionActions (CardanoPeerSelectionActions (..)) import Cardano.Network.PeerSelection.Governor.PeerSelectionState @@ -315,16 +316,14 @@ governorAction mockEnv@GovernorMockEnvironment { , updateWithState = const (const (pure ())) , extraDecisions = ExtraGuardedDecisions { - preBlocking = - [ \_ psa pst -> monitorBootstrapPeersFlag psa pst - , \_ psa pst -> monitorLedgerStateJudgement psa pst - , \_ _ pst -> waitForSystemToQuiesce pst - ] - , postBlocking = [] - , preNonBlocking = [] - , postNonBlocking = [] - , requiredTargetsAction = \_ -> targetPeers - , requiredLocalRootsAction = \_ -> localRoots + preBlocking = \_ psa pst -> + monitorBootstrapPeersFlag psa pst + <> monitorLedgerStateJudgement psa pst + <> waitForSystemToQuiesce pst + , postBlocking = mempty + , postNonBlocking = mempty + , requiredTargetsAction = \_ -> Cardano.targetPeers + , requiredLocalRootsAction = \_ -> Cardano.localRoots -- No inbound peers should be used when the node is using bootstrap peers. , enableProgressMakingActions = @@ -505,7 +504,7 @@ mockPeerSelectionActions' tracer connsVar outboundConnectionsStateVar = PeerSelectionActions { - readOriginalLocalRootPeers + readLocalRootPeersFromFile = return $ LocalRootPeers.toGroups $ LocalRootPeers.mapPeers @@ -540,12 +539,12 @@ mockPeerSelectionActions' tracer }, readInboundPeers = pure Map.empty, readLedgerPeerSnapshot = pure Nothing, - originalPeerSelectionTargets = originalPeerTargets, + peerSelectionTargets = originalPeerTargets, extraActions = CardanoPeerSelectionActions { - cpsaSyncPeerTargets = peerTargets, + cpsaGenesisPeerTargets = peerTargets, cpsaReadUseBootstrapPeers = readUseBootstrapPeers }, - extraPeersActions = CPRP.cardanoPublicRootPeersActions, + extraPeersAPI = CPRP.cardanoPublicRootPeersAPI, extraStateToExtraCounters = CPSV.cardanoPeerSelectionStatetoCounters } where diff --git a/ouroboros-network/src/Cardano/Network/ArgumentsExtra.hs b/ouroboros-network/src/Cardano/Network/ArgumentsExtra.hs index f1878c442f..1f7c4de6e4 100644 --- a/ouroboros-network/src/Cardano/Network/ArgumentsExtra.hs +++ b/ouroboros-network/src/Cardano/Network/ArgumentsExtra.hs @@ -11,8 +11,9 @@ import Ouroboros.Network.PeerSelection.Governor.Types -- data CardanoArgumentsExtra m = CardanoArgumentsExtra { - -- | selection targets for the peer governor - caeSyncPeerTargets :: PeerSelectionTargets + -- | Genesis selection targets for the peer governor + caeGenesisPeerTargets :: PeerSelectionTargets + , caeReadUseBootstrapPeers :: STM m UseBootstrapPeers -- | For Genesis, this sets the floor for minimum number of diff --git a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Monitor.hs b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Monitor.hs index e01100bed7..db32edb36b 100644 --- a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Monitor.hs +++ b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Monitor.hs @@ -72,12 +72,12 @@ targetPeers :: (MonadSTM m, Ord peeraddr) => PeerSelectionActions CardanoPeerSelectionState (CardanoPeerSelectionActions m) extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> PeerSelectionState CardanoPeerSelectionState PeerTrustable extraPeers peeraddr peerconn -> Guarded (STM m) (TimedDecision m CardanoPeerSelectionState PeerTrustable extraPeers peeraddr peerconn) -targetPeers PeerSelectionActions{ originalPeerSelectionTargets, +targetPeers PeerSelectionActions{ peerSelectionTargets, readPeerSelectionTargets, extraActions = CardanoPeerSelectionActions { - cpsaSyncPeerTargets + cpsaGenesisPeerTargets }, - extraPeersActions + extraPeersAPI } st@PeerSelectionState{ publicRootPeers, @@ -104,11 +104,11 @@ targetPeers PeerSelectionActions{ originalPeerSelectionTargets, let targets' = case (cpstLedgerStateJudgement, cpstConsensusMode) of (YoungEnough, GenesisMode) - | churnTargets == cpsaSyncPeerTargets -> - originalPeerSelectionTargets + | churnTargets == cpsaGenesisPeerTargets -> + peerSelectionTargets (TooOld, GenesisMode) - | churnTargets == originalPeerSelectionTargets -> - cpsaSyncPeerTargets + | churnTargets == peerSelectionTargets -> + cpsaGenesisPeerTargets _otherwise -> churnTargets -- nb. first check is redundant in Genesis mode @@ -141,7 +141,7 @@ targetPeers PeerSelectionActions{ originalPeerSelectionTargets, -- We have to enforce that local and big ledger peers are disjoint. publicRootPeers' = - PublicRootPeers.difference (differenceExtraPeers extraPeersActions) + PublicRootPeers.difference (differenceExtraPeers extraPeersAPI) publicRootPeers (LocalRootPeers.keysSet localRootPeers') return $ \_now -> Decision { @@ -169,7 +169,7 @@ localRoots :: forall extraActions extraAPI extraCounters peeraddr peerconn m. -> PeerSelectionState CardanoPeerSelectionState PeerTrustable (CardanoPublicRootPeers peeraddr) peeraddr peerconn -> Guarded (STM m) (TimedDecision m CardanoPeerSelectionState PeerTrustable (CardanoPublicRootPeers peeraddr) peeraddr peerconn) localRoots actions@PeerSelectionActions{ readLocalRootPeers - , extraPeersActions + , extraPeersAPI } st@PeerSelectionState{ localRootPeers, @@ -227,7 +227,7 @@ localRoots actions@PeerSelectionActions{ readLocalRootPeers -- that the local and public sets are non-overlapping. -- publicRootPeers' = - PublicRootPeers.difference (differenceExtraPeers extraPeersActions) + PublicRootPeers.difference (differenceExtraPeers extraPeersAPI) publicRootPeers localRootPeersSet @@ -277,7 +277,7 @@ localRoots actions@PeerSelectionActions{ readLocalRootPeers return $ \_now -> assert (Set.isSubsetOf - (PublicRootPeers.toSet (extraPeersToSet extraPeersActions) + (PublicRootPeers.toSet (extraPeersToSet extraPeersAPI) publicRootPeers') (KnownPeers.toSet knownPeers')) . assert (Set.isSubsetOf @@ -344,7 +344,7 @@ monitorBootstrapPeersFlag :: ( MonadSTM m -> PeerSelectionState CardanoPeerSelectionState extraFlags (CardanoPublicRootPeers peeraddr) peeraddr peerconn -> Guarded (STM m) (TimedDecision m CardanoPeerSelectionState extraFlags (CardanoPublicRootPeers peeraddr) peeraddr peerconn) monitorBootstrapPeersFlag PeerSelectionActions { extraActions = CardanoPeerSelectionActions { cpsaReadUseBootstrapPeers } - , extraPeersActions + , extraPeersAPI } st@PeerSelectionState { knownPeers , establishedPeers @@ -377,7 +377,7 @@ monitorBootstrapPeersFlag PeerSelectionActions { extraActions = CardanoPeerSelec nonEstablishedBootstrapPeers knownPeers , publicRootPeers = - PublicRootPeers.difference (differenceExtraPeers extraPeersActions) + PublicRootPeers.difference (differenceExtraPeers extraPeersAPI) publicRootPeers nonEstablishedBootstrapPeers , extraState = cpst { @@ -417,7 +417,7 @@ monitorLedgerStateJudgement PeerSelectionActions{ clpciGetLedgerStateJudgement = readLedgerStateJudgement } } - , extraPeersActions + , extraPeersAPI } st@PeerSelectionState{ publicRootPeers, knownPeers, @@ -493,7 +493,7 @@ monitorLedgerStateJudgement PeerSelectionActions{ nonEstablishedBootstrapPeers knownPeers , publicRootPeers = - PublicRootPeers.difference (differenceExtraPeers extraPeersActions) + PublicRootPeers.difference (differenceExtraPeers extraPeersAPI) publicRootPeers nonEstablishedBootstrapPeers , publicRootBackoffs = 0 diff --git a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/PeerSelectionActions.hs b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/PeerSelectionActions.hs index 1fbd2fe39a..8c4fa3e639 100644 --- a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/PeerSelectionActions.hs +++ b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/PeerSelectionActions.hs @@ -16,7 +16,7 @@ data CardanoPeerSelectionActions m = -- | Retrieve peer targets for Genesis & non-Genesis modes -- from node's configuration for the current state -- - cpsaSyncPeerTargets :: PeerSelectionTargets + cpsaGenesisPeerTargets :: PeerSelectionTargets -- | Read the current bootstrap peers flag , cpsaReadUseBootstrapPeers :: STM m UseBootstrapPeers @@ -25,11 +25,11 @@ data CardanoPeerSelectionActions m = cardanoExtraArgsToPeerSelectionActions :: CardanoArgumentsExtra m -> CardanoPeerSelectionActions m cardanoExtraArgsToPeerSelectionActions CardanoArgumentsExtra { - caeSyncPeerTargets + caeGenesisPeerTargets , caeReadUseBootstrapPeers } = CardanoPeerSelectionActions { - cpsaSyncPeerTargets = caeSyncPeerTargets + cpsaGenesisPeerTargets = caeGenesisPeerTargets , cpsaReadUseBootstrapPeers = caeReadUseBootstrapPeers } diff --git a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Types.hs b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Types.hs index cae0347920..a7fe101dd9 100644 --- a/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Types.hs +++ b/ouroboros-network/src/Cardano/Network/PeerSelection/Governor/Types.hs @@ -1,5 +1,6 @@ -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE NamedFieldPuns #-} module Cardano.Network.PeerSelection.Governor.Types where @@ -8,9 +9,10 @@ import Cardano.Network.LedgerPeerConsensusInterface (CardanoLedgerPeersConsensusInterface (..)) import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..), requiresBootstrapPeers) -import Cardano.Network.PeerSelection.Governor.Monitor (localRoots, - monitorBootstrapPeersFlag, monitorLedgerStateJudgement, targetPeers, +import Cardano.Network.PeerSelection.Governor.Monitor + (monitorBootstrapPeersFlag, monitorLedgerStateJudgement, waitForSystemToQuiesce) +import Cardano.Network.PeerSelection.Governor.Monitor qualified as Cardano import Cardano.Network.PeerSelection.Governor.PeerSelectionActions (CardanoPeerSelectionActions) import Cardano.Network.PeerSelection.Governor.PeerSelectionState @@ -21,7 +23,8 @@ import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable) import Cardano.Network.PublicRootPeers (CardanoPublicRootPeers) import Cardano.Network.Types (LedgerStateJudgement (..), getMinBigLedgerPeersForTrustedState) -import Control.Concurrent.Class.MonadSTM (MonadSTM, STM) +import Control.Applicative (Alternative) +import Control.Concurrent.Class.MonadSTM import Data.Set (Set) import Data.Set qualified as Set import Ouroboros.Network.PeerSelection.Governor (readAssociationMode) @@ -63,6 +66,7 @@ empty = CardanoPeerSelectionView { , viewActiveBootstrapPeersDemotions = (Set.empty, 0) } + cardanoPeerSelectionStatetoCounters :: Ord peeraddr => PeerSelectionState extraState extraFlags (CardanoPublicRootPeers peeraddr) peeraddr peerconn @@ -176,7 +180,8 @@ outboundConnectionsState cardanoPeerSelectionGovernorArgs :: ( MonadSTM m - , Ord peeraddr + , Alternative (STM m) + , Ord peeraddr ) => STM m UseLedgerPeers -> PeerSharing @@ -213,16 +218,14 @@ cardanoPeerSelectionGovernorArgs readUseLedgerPeers peerSharing lpsci = (outboundConnectionsState associationMode psv st) , extraDecisions = ExtraGuardedDecisions { - preBlocking = - [ \_ psa pst -> monitorBootstrapPeersFlag psa pst - , \_ psa pst -> monitorLedgerStateJudgement psa pst - , \_ _ pst -> waitForSystemToQuiesce pst - ] - , postBlocking = [] - , preNonBlocking = [] - , postNonBlocking = [] - , requiredTargetsAction = \_ -> targetPeers - , requiredLocalRootsAction = \_ -> localRoots + preBlocking = \_ psa pst -> + monitorBootstrapPeersFlag psa pst + <> monitorLedgerStateJudgement psa pst + <> waitForSystemToQuiesce pst + , postBlocking = mempty + , postNonBlocking = mempty + , requiredTargetsAction = \_ -> Cardano.targetPeers + , requiredLocalRootsAction = \_ -> Cardano.localRoots , enableProgressMakingActions = \st -> not (requiresBootstrapPeers (cpstBootstrapPeersFlag st) (cpstLedgerStateJudgement st)) , ledgerPeerSnapshotExtraStateChange = \st -> diff --git a/ouroboros-network/src/Cardano/Network/PeerSelection/PeerChurnArgs.hs b/ouroboros-network/src/Cardano/Network/PeerSelection/PeerChurnArgs.hs index a04803cf2e..e790509441 100644 --- a/ouroboros-network/src/Cardano/Network/PeerSelection/PeerChurnArgs.hs +++ b/ouroboros-network/src/Cardano/Network/PeerSelection/PeerChurnArgs.hs @@ -9,10 +9,10 @@ import Ouroboros.Network.PeerSelection.Governor.Types (PeerSelectionTargets) data CardanoPeerChurnArgs m = CardanoPeerChurnArgs { - cpcaModeVar :: StrictTVar m ChurnMode - , cpcaReadFetchMode :: STM m FetchMode - , cpcaSyncPeerTargets :: PeerSelectionTargets - , cpcaReadUseBootstrap :: STM m UseBootstrapPeers - , cpcaConsensusMode :: ConsensusMode + cpcaModeVar :: StrictTVar m ChurnMode + , cpcaReadFetchMode :: STM m FetchMode + , cpcaGenesisPeerTargets :: PeerSelectionTargets + , cpcaReadUseBootstrap :: STM m UseBootstrapPeers + , cpcaConsensusMode :: ConsensusMode } diff --git a/ouroboros-network/src/Cardano/Network/PublicRootPeers.hs b/ouroboros-network/src/Cardano/Network/PublicRootPeers.hs index 416236f221..ff473bc288 100644 --- a/ouroboros-network/src/Cardano/Network/PublicRootPeers.hs +++ b/ouroboros-network/src/Cardano/Network/PublicRootPeers.hs @@ -29,9 +29,9 @@ instance Ord peeraddr => Monoid (CardanoPublicRootPeers peeraddr) where mempty = empty -- Cardano Public Root Peers Actions -cardanoPublicRootPeersActions :: Ord peeraddr => PublicExtraPeersActions (CardanoPublicRootPeers peeraddr) peeraddr -cardanoPublicRootPeersActions = - PublicExtraPeersActions { +cardanoPublicRootPeersAPI :: Ord peeraddr => PublicExtraPeersAPI (CardanoPublicRootPeers peeraddr) peeraddr +cardanoPublicRootPeersAPI = + PublicExtraPeersAPI { nullExtraPeers = nullAll , invariantExtraPeers = invariant , memberExtraPeers = member diff --git a/ouroboros-network/src/Cardano/PeerSelection/Churn.hs b/ouroboros-network/src/Cardano/PeerSelection/Churn.hs index 80b38f4b3a..9fd4327b66 100644 --- a/ouroboros-network/src/Cardano/PeerSelection/Churn.hs +++ b/ouroboros-network/src/Cardano/PeerSelection/Churn.hs @@ -106,7 +106,7 @@ peerChurnGovernor PeerChurnArgs { getExtraArgs = CardanoPeerChurnArgs { cpcaModeVar = churnModeVar, cpcaReadFetchMode = getFetchMode, - cpcaSyncPeerTargets, + cpcaGenesisPeerTargets, cpcaReadUseBootstrap = getUseBootstrapPeers, cpcaConsensusMode = consensusMode } @@ -122,7 +122,7 @@ peerChurnGovernor PeerChurnArgs { (churnMode, ledgerStateJudgement, useBootstrapPeers, ltt) <- (,,,) <$> updateChurnMode <*> clpciGetLedgerStateJudgement <*> getUseBootstrapPeers <*> getLocalRootHotTarget let regime = pickChurnRegime consensusMode churnMode useBootstrapPeers - targets = getPeerSelectionTargets consensusMode ledgerStateJudgement getOriginalPeerTargets cpcaSyncPeerTargets + targets = getPeerSelectionTargets consensusMode ledgerStateJudgement getOriginalPeerTargets cpcaGenesisPeerTargets modifyTVar peerSelectionVar ( increaseActivePeers regime ltt targets . increaseEstablishedPeers regime ltt targets) @@ -163,7 +163,7 @@ peerChurnGovernor PeerChurnArgs { ltt <- getLocalRootHotTarget lsj <- clpciGetLedgerStateJudgement regime <- pickChurnRegime consensusMode churnMode <$> getUseBootstrapPeers - let targets = getPeerSelectionTargets consensusMode lsj getOriginalPeerTargets cpcaSyncPeerTargets + let targets = getPeerSelectionTargets consensusMode lsj getOriginalPeerTargets cpcaGenesisPeerTargets (,) <$> (getCounter <$> readCounters) <*> stateTVar peerSelectionVar ((\a -> (a, a)) . modifyTargets regime ltt targets) diff --git a/ouroboros-network/src/Ouroboros/Network/Diffusion.hs b/ouroboros-network/src/Ouroboros/Network/Diffusion.hs index a4a302394f..845b946248 100644 --- a/ouroboros-network/src/Ouroboros/Network/Diffusion.hs +++ b/ouroboros-network/src/Ouroboros/Network/Diffusion.hs @@ -23,8 +23,8 @@ import Network.Socket (Socket) import Ouroboros.Network.Diffusion.Common (Arguments, NodeToNodeConnectionManager, NodeToNodePeerConnectionHandle, Tracers) import Ouroboros.Network.Diffusion.Common qualified as Common -import Ouroboros.Network.Diffusion.MinimalP2P qualified as MinimalP2P import Ouroboros.Network.Diffusion.NonP2P qualified as NonP2P +import Ouroboros.Network.Diffusion.P2P qualified as P2P import Ouroboros.Network.NodeToClient (LocalAddress, LocalSocket, NodeToClientVersion, NodeToClientVersionData) import Ouroboros.Network.NodeToNode (NodeToNodeVersion, NodeToNodeVersionData, @@ -147,7 +147,7 @@ run sigUSR1Signal (P2PApplications apps) (P2PApplicationsExtra appsExtra) = void $ - MinimalP2P.run + P2P.run sigUSR1Signal tracers tracersExtra args argsExtra apps appsExtra run _ diff --git a/ouroboros-network/src/Ouroboros/Network/Diffusion/Common.hs b/ouroboros-network/src/Ouroboros/Network/Diffusion/Common.hs index 46a28650d1..7157b3caea 100644 --- a/ouroboros-network/src/Ouroboros/Network/Diffusion/Common.hs +++ b/ouroboros-network/src/Ouroboros/Network/Diffusion/Common.hs @@ -88,7 +88,7 @@ import Ouroboros.Network.PeerSelection.RootPeersDNS.LocalRootPeers import Ouroboros.Network.PeerSelection.RootPeersDNS.PublicRootPeers (TracePublicRootPeers) import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI) import Ouroboros.Network.PeerSharing (PeerSharingRegistry (..)) import Ouroboros.Network.RethrowPolicy import Ouroboros.Network.Server2 qualified as Server @@ -417,17 +417,13 @@ data ArgumentsExtra extraArgs extraState extraActions extraAPI extraPeers -- , daEmptyExtraState :: extraState - -- | Extra Peers empty value - -- - , daEmptyExtraPeers :: extraPeers - -- | Extra Counters empty value -- , daEmptyExtraCounters :: extraCounters -- | Provide Public Extra Actions for extraPeers to be -- - , daExtraPeersActions :: PublicExtraPeersActions extraPeers peeraddr + , daExtraPeersAPI :: PublicExtraPeersAPI extraPeers peeraddr , daPeerSelectionGovernorArgs :: forall muxMode responderCtx ntnVersionData bytes a b . diff --git a/ouroboros-network/src/Ouroboros/Network/Diffusion/MinimalP2P.hs b/ouroboros-network/src/Ouroboros/Network/Diffusion/P2P.hs similarity index 98% rename from ouroboros-network/src/Ouroboros/Network/Diffusion/MinimalP2P.hs rename to ouroboros-network/src/Ouroboros/Network/Diffusion/P2P.hs index ffc82c8b69..b479b6028d 100644 --- a/ouroboros-network/src/Ouroboros/Network/Diffusion/MinimalP2P.hs +++ b/ouroboros-network/src/Ouroboros/Network/Diffusion/P2P.hs @@ -13,7 +13,7 @@ -- | This module is expected to be imported qualified (it will clash -- with the "Ouroboros.Network.Diffusion.NonP2P"). -- -module Ouroboros.Network.Diffusion.MinimalP2P +module Ouroboros.Network.Diffusion.P2P ( run , runM ) where @@ -223,9 +223,8 @@ runM Interfaces , daBulkChurnInterval , daReadLedgerPeerSnapshot , daEmptyExtraState - , daEmptyExtraPeers , daEmptyExtraCounters - , daExtraPeersActions + , daExtraPeersAPI , daPeerSelectionGovernorArgs , daPeerSelectionStateToExtraCounters , daPeerChurnGovernor @@ -622,10 +621,10 @@ runM Interfaces localRootsVar dnsActions (\getLedgerPeers -> PeerSelectionActions { - originalPeerSelectionTargets = daPeerSelectionTargets, + peerSelectionTargets = daPeerSelectionTargets, readPeerSelectionTargets = readTVar peerSelectionTargetsVar, getLedgerStateCtx = daLedgerPeersCtx, - readOriginalLocalRootPeers = daReadLocalRootPeers, + readLocalRootPeersFromFile = daReadLocalRootPeers, readLocalRootPeers = readTVar localRootsVar, peerSharing = daOwnPeerSharing, peerConnToPeerSharing = pchPeerSharing diNtnPeerSharing, @@ -638,7 +637,7 @@ runM Interfaces PeerSharingEnabled -> readInboundPeers, readLedgerPeerSnapshot = daReadLedgerPeerSnapshot, extraActions = daExtraActions, - extraPeersActions = daExtraPeersActions, + extraPeersAPI = daExtraPeersAPI, extraStateToExtraCounters = daPeerSelectionStateToExtraCounters, peerStateActions }) @@ -669,7 +668,7 @@ runM Interfaces daPeerSelectionGovernorArgs fuzzRng daEmptyExtraState - daEmptyExtraPeers + mempty peerSelectionActions peerSelectionPolicy PeerSelectionInterfaces { @@ -745,7 +744,7 @@ runM Interfaces -- InitiatorOnly mode, run peer selection only: InitiatorOnlyDiffusionMode -> withConnectionManagerInitiatorOnlyMode $ \connectionManager-> do - debugStateVar <- newTVarIO $ emptyPeerSelectionState fuzzRng daEmptyExtraState daEmptyExtraPeers + debugStateVar <- newTVarIO $ emptyPeerSelectionState fuzzRng daEmptyExtraState mempty diInstallSigUSR1Handler connectionManager debugStateVar daPeerMetrics withPeerStateActions' connectionManager $ \peerStateActions-> withPeerSelectionActions' @@ -770,7 +769,7 @@ runM Interfaces inboundInfoChannel $ \connectionManager -> withSockets' $ \sockets addresses -> do withServer sockets connectionManager inboundInfoChannel $ \inboundGovernorThread readInboundState -> do - debugStateVar <- newTVarIO $ emptyPeerSelectionState fuzzRng daEmptyExtraState daEmptyExtraPeers + debugStateVar <- newTVarIO $ emptyPeerSelectionState fuzzRng daEmptyExtraState mempty diInstallSigUSR1Handler connectionManager debugStateVar daPeerMetrics withPeerStateActions' connectionManager $ \peerStateActions -> withPeerSelectionActions' diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs index ce613ac155..8d55001f86 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor.hs @@ -81,7 +81,7 @@ import Ouroboros.Network.PeerSelection.LedgerPeers.Type (UseLedgerPeers (..)) import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing (..)) import Ouroboros.Network.PeerSelection.State.EstablishedPeers qualified as EstablishedPeers import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) {- $overview @@ -548,7 +548,6 @@ peerSelectionGovernorLoop tracer , extraDecisions = ExtraGuardedDecisions { preBlocking , postBlocking - , preNonBlocking , postNonBlocking , requiredTargetsAction , requiredLocalRootsAction @@ -557,7 +556,7 @@ peerSelectionGovernorLoop tracer } } actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet , invariantExtraPeers } @@ -664,7 +663,7 @@ peerSelectionGovernorLoop tracer -- All the alternative potentially-blocking decisions. -- Make sure preBlocking set is in the right place - foldMap (\a -> a policy actions st) preBlocking + preBlocking policy actions st <> Monitor.connections actions st <> Monitor.jobs jobPool st @@ -679,14 +678,12 @@ peerSelectionGovernorLoop tracer <> requiredLocalRootsAction policy actions st -- Make sure postBlocking set is in the right place - <> foldMap (\a -> a policy actions st) postBlocking - -- Make sure preNonBlocking set is in the right place - <> foldMap (\a -> a policy actions st) preNonBlocking + <> postBlocking policy actions st -- The non-blocking decisions regarding (known) big ledger peers <> BigLedgerPeers.belowTarget enableProgressMakingActions actions blockedAt st - <> BigLedgerPeers.aboveTarget actions policy st + <> BigLedgerPeers.aboveTarget actions policy st -- All the alternative non-blocking internal decisions. <> RootPeers.belowTarget actions blockedAt st @@ -704,7 +701,7 @@ peerSelectionGovernorLoop tracer <> ActivePeers.aboveTarget actions policy st -- Make sure postNonBlocking set is in the right place - <> foldMap (\a -> a policy actions st) postNonBlocking + <> postNonBlocking policy actions st -- There is no rootPeersAboveTarget since the roots target is one sided. diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs index 51a8e91629..5f9643854f 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/ActivePeers.hs @@ -30,7 +30,7 @@ import Ouroboros.Network.PeerSelection.State.KnownPeers (setTepidFlag) import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency (..)) import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) ---------------------------- @@ -68,7 +68,7 @@ belowTargetBigLedgerPeers :: forall extraState extraActions extraFlags extraPeer -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetBigLedgerPeers enableAction actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet }, @@ -150,7 +150,7 @@ belowTargetLocal :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetLocal actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers } } @@ -252,7 +252,7 @@ belowTargetOther :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetOther actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet } @@ -510,7 +510,7 @@ aboveTargetBigLedgerPeers :: forall extraActions extraState extraPeers extraFlag => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTargetBigLedgerPeers actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet } @@ -588,7 +588,7 @@ aboveTargetLocal :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTargetLocal actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers } } @@ -672,7 +672,7 @@ aboveTargetOther :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTargetOther actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet } diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs index 66e2fbcc71..496dfb276c 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/BigLedgerPeers.hs @@ -25,7 +25,7 @@ import Ouroboros.Network.PeerSelection.PublicRootPeers (PublicRootPeers) import Ouroboros.Network.PeerSelection.PublicRootPeers qualified as PublicRootPeers import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) belowTarget :: (MonadSTM m, Ord peeraddr, Semigroup extraPeers) @@ -36,7 +36,7 @@ belowTarget :: (MonadSTM m, Ord peeraddr, Semigroup extraPeers) -> Guarded (STM m) (TimedDecision m extraState extraFlags extraPeers peeraddr peerconn) belowTarget enableAction actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet }, extraStateToExtraCounters @@ -86,7 +86,7 @@ jobReqBigLedgerPeers :: forall m extraActions extraState extraFlags extraAPI ext -> Int -> Job () m (Completion m extraState extraFlags extraPeers peeraddr peerconn) jobReqBigLedgerPeers PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet, differenceExtraPeers, nullExtraPeers @@ -194,7 +194,7 @@ aboveTarget :: forall m extraState extraActions extraFlags extraAPI extraPeers e => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTarget PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet, differenceExtraPeers, memberExtraPeers diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs index 305289501f..0f040bcf35 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/EstablishedPeers.hs @@ -30,7 +30,7 @@ import Ouroboros.Network.PeerSelection.State.EstablishedPeers qualified as Estab import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers (WarmValency (..)) import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) --------------------------------- @@ -75,7 +75,7 @@ belowTargetLocal :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetLocal actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet } @@ -175,7 +175,7 @@ belowTargetOther :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetOther actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet }, @@ -265,7 +265,7 @@ belowTargetBigLedgerPeers :: forall extraState extraActions extraFlags extraPeer -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m belowTargetBigLedgerPeers enableAction actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet }, @@ -366,7 +366,7 @@ jobPromoteColdPeer :: forall extraActions extraState extraFlags extraPeers extra jobPromoteColdPeer PeerSelectionActions { peerStateActions = PeerStateActions {establishPeerConnection}, peerConnToPeerSharing, - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet }, extraStateToExtraCounters @@ -515,7 +515,7 @@ aboveTargetOther :: forall extraActions extraState extraFlags extraPeers extraAP => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTargetOther actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet }, @@ -608,7 +608,7 @@ aboveTargetBigLedgerPeers :: forall extraActions extraState extraFlags extraAPI => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTargetBigLedgerPeers actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet }, diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs index 2e59fcca09..21dda0e550 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/KnownPeers.hs @@ -34,7 +34,7 @@ import Ouroboros.Network.PeerSelection.PublicRootPeers qualified as PublicRootPe import Ouroboros.Network.PeerSelection.State.EstablishedPeers qualified as EstablishedPeers import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) import Ouroboros.Network.Protocol.PeerSharing.Type (PeerSharingAmount) @@ -61,7 +61,7 @@ belowTarget belowTarget enableAction actions@PeerSelectionActions { peerSharing - , extraPeersActions = PublicExtraPeersActions { + , extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet } @@ -440,7 +440,7 @@ aboveTarget :: (MonadSTM m, Ord peeraddr, HasCallStack) => PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m -> MkGuardedDecision extraState extraFlags extraPeers peeraddr peerconn m aboveTarget PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { memberExtraPeers , extraPeersToSet , sizeExtraPeers diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Monitor.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Monitor.hs index 181c281669..e3536fa790 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Monitor.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Monitor.hs @@ -56,7 +56,7 @@ targetPeers :: (MonadSTM m, Ord peeraddr) -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> Guarded (STM m) (TimedDecision m extraState extraFlags extraPeers peeraddr peerconn) targetPeers PeerSelectionActions{ readPeerSelectionTargets, - extraPeersActions + extraPeersAPI } st@PeerSelectionState{ publicRootPeers, @@ -81,7 +81,7 @@ targetPeers PeerSelectionActions{ readPeerSelectionTargets, -- We have to enforce that local and big ledger peers are disjoint. publicRootPeers' = - PublicRootPeers.difference (differenceExtraPeers extraPeersActions) + PublicRootPeers.difference (differenceExtraPeers extraPeersAPI) publicRootPeers (LocalRootPeers.keysSet localRootPeers') return $ \_now -> Decision { @@ -310,7 +310,7 @@ localRoots :: forall extraState extraActions extraPeers extraFlags extraAPI extr -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> Guarded (STM m) (TimedDecision m extraState extraFlags extraPeers peeraddr peerconn) localRoots actions@PeerSelectionActions{ readLocalRootPeers - , extraPeersActions = PublicExtraPeersActions { + , extraPeersAPI = PublicExtraPeersAPI { differenceExtraPeers , extraPeersToSet } diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs index 2da997c1ec..cf6df68a9a 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/RootPeers.hs @@ -17,7 +17,7 @@ import Ouroboros.Network.PeerSelection.LedgerPeers (LedgerPeersKind (..)) import Ouroboros.Network.PeerSelection.PublicRootPeers qualified as PublicRootPeers import Ouroboros.Network.PeerSelection.State.KnownPeers qualified as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers -import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersActions (..)) +import Ouroboros.Network.PeerSelection.Types (PublicExtraPeersAPI (..)) -------------------------- @@ -30,7 +30,7 @@ belowTarget :: (MonadSTM m, Ord peeraddr, Semigroup extraPeers) -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> Guarded (STM m) (TimedDecision m extraState extraFlags extraPeers peeraddr peerconn) belowTarget actions@PeerSelectionActions { - extraPeersActions = PublicExtraPeersActions { + extraPeersAPI = PublicExtraPeersAPI { extraPeersToSet }, extraStateToExtraCounters @@ -84,7 +84,7 @@ jobReqPublicRootPeers :: forall m extraActions extraState extraFlags extraPeers -> Int -> Job () m (Completion m extraState extraFlags extraPeers peeraddr peerconn) jobReqPublicRootPeers PeerSelectionActions{ requestPublicRootPeers - , extraPeersActions = PublicExtraPeersActions { + , extraPeersAPI = PublicExtraPeersAPI { differenceExtraPeers , extraPeersToSet , nullExtraPeers diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Types.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Types.hs index 8dc0b845c0..c8be90b39c 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Types.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Governor/Types.hs @@ -157,7 +157,7 @@ import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency (..), LocalRootPeers, WarmValency (..)) import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers import Ouroboros.Network.PeerSelection.Types (PeerSource (..), - PeerStatus (PeerHot, PeerWarm), PublicExtraPeersActions) + PeerStatus (PeerHot, PeerWarm), PublicExtraPeersAPI) import Ouroboros.Network.Protocol.PeerSharing.Type (PeerSharingAmount, PeerSharingResult (..)) import Cardano.Network.Types (LedgerStateJudgement (..)) @@ -320,9 +320,9 @@ sanePeerSelectionTargets PeerSelectionTargets{..} = -- data PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI extraCounters peeraddr peerconn m = PeerSelectionActions { - -- | These are the original targets as seen in the static configuration + -- | These are the targets as seen in the static configuration -- - originalPeerSelectionTargets :: PeerSelectionTargets, + peerSelectionTargets :: PeerSelectionTargets, -- | Read current Peer Selection Targets these can be changed by Churn -- Governor @@ -333,7 +333,7 @@ data PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI -- -- This should come from 'ArgumentsExtra' when initializing Diffusion -- - readOriginalLocalRootPeers :: STM m (LocalRootPeers.Config extraFlags RelayAccessPoint), + readLocalRootPeersFromFile :: STM m (LocalRootPeers.Config extraFlags RelayAccessPoint), -- | Read the current set of locally or privately known root peers. -- @@ -368,7 +368,7 @@ data PeerSelectionActions extraState extraActions extraPeers extraFlags extraAPI -- | Public Extra Peers Actions -- - extraPeersActions :: PublicExtraPeersActions extraPeers peeraddr, + extraPeersAPI :: PublicExtraPeersAPI extraPeers peeraddr, -- | Compute extraCounters from PeerSelectionState extraStateToExtraCounters @@ -478,39 +478,29 @@ type MonitoringAction extraState extraActions extraPeers extraAPI extraFlags ext -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> Guarded (STM m) (TimedDecision m extraState extraFlags extraPeers peeraddr peerconn) -type MonitoringActions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m = - [ MonitoringAction extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m ] - data ExtraGuardedDecisions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m = ExtraGuardedDecisions { - -- | This list of guarded decisions will come before all default possibly - -- blocking -- decisions. The order matters, making the first decisions + -- | This guarded decision will come before all default possibly + -- blocking decisions. The order matters, making the first decisions -- have priority over the later ones. -- - -- Note that these actions should be blocking. - preBlocking :: MonitoringActions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m + -- Note that this action should be blocking. + preBlocking :: MonitoringAction extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m -- | This list of guarded decisions will come after all possibly preBlocking -- and default blocking decisions. The order matters, making the first -- decisions have priority over the later ones. -- - -- Note that these actions should be blocking. - , postBlocking :: MonitoringActions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m + -- Note that these actions can be either blocking or non-blocking. + , postBlocking :: MonitoringAction extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m -- | This list of guarded decisions will come before all default non-blocking - -- decisions. The order matters, making the first decisions have priority over - -- the later ones. - -- - -- Note that these actions should not be blocking. - , preNonBlocking :: MonitoringActions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m - - -- | This list of guarded decisions will come before all preNonBlocking and - -- default non-blocking decisions. The order matters, making the first - -- decisions have priority over the later ones. + -- decisions. The order matters, making the first decisions have priority + -- over the later ones. -- -- Note that these actions should not be blocking. - , postNonBlocking :: MonitoringActions extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m + , postNonBlocking :: MonitoringAction extraState extraActions extraPeers extraAPI extraFlags extraCounters peeraddr peerconn m -- | This action is necessary to the well functioning of the Outbound -- Governor. In particular this action should monitor 'PeerSelectionTargets', @@ -1282,7 +1272,10 @@ peerSelectionStateToView peerSelectionStateToCounters :: Ord peeraddr - => (extraPeers -> Set peeraddr) + => (extraPeers -> Set peeraddr) -- ^ This function comes from 'PublicExtraPeersAPI' + -- It is needed to compute the set of all + -- extraPeers and use that information to + -- compute the counters. -> (PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> extraCounters) -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> PeerSelectionCounters extraCounters @@ -1293,7 +1286,14 @@ peerSelectionStateToCounters extraPeersToSet extraStateToExtraCounters = assertPeerSelectionState :: Ord peeraddr => (extraPeers -> Set peeraddr) + -- ^ This function comes from 'PublicExtraPeersAPI' + -- It is needed to compute the set of all + -- extraPeers and use that information to + -- compute the invariant. -> (extraPeers -> Bool) + -- ^ This function comes from 'PublicExtraPeersAPI' + -- It is needed to compute the invariant of the + -- extraPeers data type. -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> a -> a assertPeerSelectionState extraPeersToSet invariantExtraPeers PeerSelectionState{..} = @@ -1416,6 +1416,10 @@ pickPeers' :: (Ord peeraddr, Functor m, HasCallStack) => (Int -> Set peeraddr -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> Bool) -- ^ precondition -> (peeraddr -> extraPeers -> Bool) + -- ^ This function comes from 'PublicExtraPeersAPI' + -- + -- It is needed to compute membership of the + -- extraPeers data type. -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> PickPolicy peeraddr m -> Set peeraddr -> Int -> m (Set peeraddr) @@ -1460,6 +1464,10 @@ pickPeers' precondition memberExtraPeers st@PeerSelectionState{localRootPeers, p -- pickPeers :: (Ord peeraddr, Functor m, HasCallStack) => (peeraddr -> extraPeers -> Bool) + -- ^ This function comes from 'PublicExtraPeersAPI' + -- + -- It is needed to compute membership of the + -- extraPeers data type. -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> PickPolicy peeraddr m -> Set peeraddr -> Int -> m (Set peeraddr) @@ -1474,6 +1482,10 @@ pickPeers memberExtraPeers = -- pickUnknownPeers :: (Ord peeraddr, Functor m, HasCallStack) => (peeraddr -> extraPeers -> Bool) + -- ^ This function comes from 'PublicExtraPeersAPI' + -- + -- It is needed to compute membership of the + -- extraPeers data type. -> PeerSelectionState extraState extraFlags extraPeers peeraddr peerconn -> PickPolicy peeraddr m -> Set peeraddr -> Int -> m (Set peeraddr) diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/PeerSelectionActions.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/PeerSelectionActions.hs index e77ac893f2..cad26aa7cc 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/PeerSelectionActions.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/PeerSelectionActions.hs @@ -74,7 +74,7 @@ withPeerSelectionActions ledgerPeersArgs (\getLedgerPeers lpThread -> do let peerSelectionActions@PeerSelectionActions - { readOriginalLocalRootPeers + { readLocalRootPeersFromFile } = getPeerSelectionActions getLedgerPeers withAsync (localRootPeersProvider @@ -83,7 +83,7 @@ withPeerSelectionActions -- NOTE: we don't set `resolvConcurrent` because -- of https://github.com/kazu-yamamoto/dns/issues/174 DNS.defaultResolvConf - readOriginalLocalRootPeers + readLocalRootPeersFromFile localRootsVar) (\lrppThread -> k (lpThread, lrppThread) peerSelectionActions)) diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Types.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Types.hs index 1a5bf69c08..654725574b 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/Types.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/Types.hs @@ -1,7 +1,7 @@ module Ouroboros.Network.PeerSelection.Types ( PeerSource (..) , PeerStatus (..) - , PublicExtraPeersActions (..) + , PublicExtraPeersAPI (..) ) where import Data.Map.Strict import Data.Set (Set) @@ -36,8 +36,8 @@ data PeerStatus = -- PublicRootPeers extra peers bundle -data PublicExtraPeersActions extraPeers peeraddr = - PublicExtraPeersActions { +data PublicExtraPeersAPI extraPeers peeraddr = + PublicExtraPeersAPI { -- | Check if extraPeers is empty -- nullExtraPeers :: extraPeers -> Bool