@@ -42,8 +42,9 @@ import Ouroboros.Consensus.Node.Genesis (GenesisConfig, GenesisConfigF
4242import Ouroboros.Consensus.Storage.LedgerDB.DiskPolicy (Flag , NumOfDiskSnapshots (.. ),
4343 SnapshotInterval (.. ))
4444import Ouroboros.Network.Diffusion.Configuration as Configuration
45+ import qualified Ouroboros.Network.PeerSelection.Governor as PeerSelection
4546
46- import Control.Monad (when )
47+ import Control.Monad (when , unless )
4748import Data.Aeson
4849import qualified Data.Aeson.Types as Aeson
4950import Data.Bifunctor (Bifunctor (.. ))
@@ -702,6 +703,32 @@ makeNodeConfiguration pnc = do
702703 $ pncGenesisConfigFlags pnc
703704 let ncGenesisConfig = mkGenesisConfig mGenesisConfigFlags
704705
706+ let deadlineTargets =
707+ PeerSelectionTargets {
708+ targetNumberOfRootPeers = ncDeadlineTargetOfRootPeers,
709+ targetNumberOfKnownPeers = ncDeadlineTargetOfKnownPeers,
710+ targetNumberOfEstablishedPeers = ncDeadlineTargetOfEstablishedPeers,
711+ targetNumberOfActivePeers = ncDeadlineTargetOfActivePeers,
712+ targetNumberOfKnownBigLedgerPeers = ncDeadlineTargetOfKnownBigLedgerPeers,
713+ targetNumberOfEstablishedBigLedgerPeers = ncDeadlineTargetOfEstablishedBigLedgerPeers,
714+ targetNumberOfActiveBigLedgerPeers = ncDeadlineTargetOfActiveBigLedgerPeers }
715+ syncTargets = deadlineTargets {
716+ targetNumberOfActivePeers = ncSyncTargetOfActivePeers,
717+ targetNumberOfKnownBigLedgerPeers = ncSyncTargetOfKnownBigLedgerPeers,
718+ targetNumberOfEstablishedBigLedgerPeers = ncSyncTargetOfEstablishedBigLedgerPeers,
719+ targetNumberOfActiveBigLedgerPeers = ncSyncTargetOfActiveBigLedgerPeers }
720+
721+ unless (PeerSelection. sanePeerSelectionTargets deadlineTargets
722+ && PeerSelection. sanePeerSelectionTargets syncTargets) $
723+ Left $ " Invalid peer selection targets. Ensure that targets satisfy the "
724+ <> " inequalities of known >= established >= active >= 0"
725+ <> " for both deadline and sync target groups. The deadline groups start with "
726+ <> " TargetNumber... while the sync group starts with SyncTarget... "
727+ <> " Additionally, TargetNumberOfEstablishedPeers >= SyncTargetNumberOfActivePeers. "
728+ <> " Within each group, the category of big ledger peers is treated independently, "
729+ <> " but it too must satisfy the same inequality. Refer to cardano-node wiki page "
730+ <> " 'understanding config files' for details."
731+
705732 -- TODO: This is not mandatory
706733 experimentalProtocols <-
707734 lastToEither " Missing ExperimentalProtocolsEnabled" $
0 commit comments