Skip to content

Commit e2bf857

Browse files
Added ConsensusMode option and Genesis targets for diffusion governors.
The ConsensusMode configuration option determines whether support for Genesis syncing is enabled. If this flag is GenesisMode, alternate targets for active peers (non- big ledger) and all big ledger targets is used by the peer selection and churn governors in the diffusion layer. These targets are in effect when ledger state is deemed `TooOld` by consensus layer. The large active big ledger peer targets crucially depend on chain skipping to maintain performance requirements. Otherwise, in PraosMode, the legacy algorithm with a single set of targets is employed.
1 parent 7221a9b commit e2bf857

File tree

7 files changed

+202
-120
lines changed

7 files changed

+202
-120
lines changed

cardano-node/src/Cardano/Node/Configuration/POM.hs

Lines changed: 135 additions & 79 deletions
Large diffs are not rendered by default.

cardano-node/src/Cardano/Node/Parsers.hs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ nodeRunParser = do
8989
, pncConfigFile = ConfigYamlFilePath <$> nodeConfigFp
9090
, pncTopologyFile = TopologyFile <$> topFp
9191
, pncDatabaseFile = dbFp
92-
, pncConsensusMode = mempty
9392
, pncDiffusionMode = mempty
9493
, pncNumOfDiskSnapshots = numOfDiskSnapshots
9594
, pncSnapshotInterval = snapshotInterval
@@ -119,14 +118,19 @@ nodeRunParser = do
119118
, pncTimeWaitTimeout = mempty
120119
, pncChainSyncIdleTimeout = mempty
121120
, pncAcceptedConnectionsLimit = mempty
122-
, pncTargetNumberOfRootPeers = mempty
123-
, pncTargetNumberOfKnownPeers = mempty
124-
, pncTargetNumberOfEstablishedPeers = mempty
125-
, pncTargetNumberOfActivePeers = mempty
126-
, pncTargetNumberOfKnownBigLedgerPeers = mempty
127-
, pncTargetNumberOfEstablishedBigLedgerPeers = mempty
128-
, pncTargetNumberOfActiveBigLedgerPeers = mempty
129-
, pncMinBigLedgerPeersForTrustedState = mempty
121+
, pncDeadlineTargetOfRootPeers = mempty
122+
, pncDeadlineTargetOfKnownPeers = mempty
123+
, pncDeadlineTargetOfEstablishedPeers = mempty
124+
, pncDeadlineTargetOfActivePeers = mempty
125+
, pncDeadlineTargetOfKnownBigLedgerPeers = mempty
126+
, pncDeadlineTargetOfEstablishedBigLedgerPeers = mempty
127+
, pncDeadlineTargetOfActiveBigLedgerPeers = mempty
128+
, pncSyncTargetOfActivePeers = mempty
129+
, pncSyncTargetOfKnownBigLedgerPeers = mempty
130+
, pncSyncTargetOfEstablishedBigLedgerPeers = mempty
131+
, pncSyncTargetOfActiveBigLedgerPeers = mempty
132+
, pncSyncMinTrusted = mempty
133+
, pncConsensusMode = mempty
130134
, pncEnableP2P = mempty
131135
, pncPeerSharing = mempty
132136
}

cardano-node/src/Cardano/Node/Run.hs

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -891,47 +891,60 @@ mkP2PArguments
891891
-> STM IO (Maybe LedgerPeerSnapshot)
892892
-> Diffusion.ExtraArguments 'Diffusion.P2P IO
893893
mkP2PArguments NodeConfiguration {
894-
ncConsensusMode,
895-
ncTargetNumberOfRootPeers,
896-
ncTargetNumberOfKnownPeers,
897-
ncTargetNumberOfEstablishedPeers,
898-
ncTargetNumberOfActivePeers,
899-
ncTargetNumberOfKnownBigLedgerPeers,
900-
ncTargetNumberOfEstablishedBigLedgerPeers,
901-
ncTargetNumberOfActiveBigLedgerPeers,
902-
ncMinBigLedgerPeersForTrustedState,
894+
ncDeadlineTargetOfRootPeers,
895+
ncDeadlineTargetOfKnownPeers,
896+
ncDeadlineTargetOfEstablishedPeers,
897+
ncDeadlineTargetOfActivePeers,
898+
ncDeadlineTargetOfKnownBigLedgerPeers,
899+
ncDeadlineTargetOfEstablishedBigLedgerPeers,
900+
ncDeadlineTargetOfActiveBigLedgerPeers,
901+
ncSyncTargetOfActivePeers,
902+
ncSyncTargetOfKnownBigLedgerPeers,
903+
ncSyncTargetOfEstablishedBigLedgerPeers,
904+
ncSyncTargetOfActiveBigLedgerPeers,
905+
ncSyncMinTrusted,
903906
ncProtocolIdleTimeout,
904907
ncTimeWaitTimeout,
905-
ncPeerSharing
908+
ncPeerSharing,
909+
ncConsensusMode
906910
}
907911
daReadLocalRootPeers
908912
daReadPublicRootPeers
909913
daReadUseLedgerPeers
910914
daReadUseBootstrapPeers
911915
daReadLedgerPeerSnapshot =
912916
Diffusion.P2PArguments P2P.ArgumentsExtra
913-
{ P2P.daPeerSelectionTargets
917+
{ P2P.daPeerTargets = Configuration.ConsensusModePeerTargets {
918+
Configuration.deadlineTargets,
919+
Configuration.syncTargets }
914920
, P2P.daReadLocalRootPeers
915921
, P2P.daReadPublicRootPeers
916922
, P2P.daReadUseLedgerPeers
917923
, P2P.daReadUseBootstrapPeers
918924
, P2P.daReadLedgerPeerSnapshot
919925
, P2P.daProtocolIdleTimeout = ncProtocolIdleTimeout
920926
, P2P.daTimeWaitTimeout = ncTimeWaitTimeout
921-
, P2P.daDeadlineChurnInterval = 3300
922-
, P2P.daBulkChurnInterval = 900
927+
, P2P.daDeadlineChurnInterval = Configuration.defaultDeadlineChurnInterval
928+
, P2P.daBulkChurnInterval = Configuration.defaultBulkChurnInterval
923929
, P2P.daOwnPeerSharing = ncPeerSharing
930+
, P2P.daConsensusMode = ncConsensusMode
931+
, P2P.daMinBigLedgerPeersForTrustedState = ncSyncMinTrusted
924932
}
925933
where
926-
daPeerSelectionTargets = PeerSelectionTargets {
927-
targetNumberOfRootPeers = ncTargetNumberOfRootPeers,
928-
targetNumberOfKnownPeers = ncTargetNumberOfKnownPeers,
929-
targetNumberOfEstablishedPeers = ncTargetNumberOfEstablishedPeers,
930-
targetNumberOfActivePeers = ncTargetNumberOfActivePeers,
931-
targetNumberOfKnownBigLedgerPeers = ncTargetNumberOfKnownBigLedgerPeers,
932-
targetNumberOfEstablishedBigLedgerPeers = ncTargetNumberOfEstablishedBigLedgerPeers,
933-
targetNumberOfActiveBigLedgerPeers = ncTargetNumberOfActiveBigLedgerPeers
934+
deadlineTargets = Configuration.defaultDeadlineTargets {
935+
targetNumberOfRootPeers = ncDeadlineTargetOfRootPeers,
936+
targetNumberOfKnownPeers = ncDeadlineTargetOfKnownPeers,
937+
targetNumberOfEstablishedPeers = ncDeadlineTargetOfEstablishedPeers,
938+
targetNumberOfActivePeers = ncDeadlineTargetOfActivePeers,
939+
targetNumberOfKnownBigLedgerPeers = ncDeadlineTargetOfKnownBigLedgerPeers,
940+
targetNumberOfEstablishedBigLedgerPeers = ncDeadlineTargetOfEstablishedBigLedgerPeers,
941+
targetNumberOfActiveBigLedgerPeers = ncDeadlineTargetOfActiveBigLedgerPeers
934942
}
943+
syncTargets = Configuration.defaultSyncTargets {
944+
targetNumberOfActivePeers = ncSyncTargetOfActivePeers,
945+
targetNumberOfKnownBigLedgerPeers = ncSyncTargetOfKnownBigLedgerPeers,
946+
targetNumberOfEstablishedBigLedgerPeers = ncSyncTargetOfEstablishedBigLedgerPeers,
947+
targetNumberOfActiveBigLedgerPeers = ncSyncTargetOfActiveBigLedgerPeers }
935948

936949
mkNonP2PArguments
937950
:: IPSubscriptionTarget

cardano-node/test/Test/Cardano/Node/POM.hs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ import qualified Ouroboros.Consensus.Node as Consensus (NetworkP2PMode (..))
1818
import Ouroboros.Consensus.Storage.LedgerDB.DiskPolicy (NumOfDiskSnapshots (..),
1919
SnapshotInterval (..), pattern DoDiskSnapshotChecksum)
2020
import Ouroboros.Network.Block (SlotNo (..))
21-
import Ouroboros.Network.Diffusion.Configuration (MinBigLedgerPeersForTrustedState (..), defaultConsensusMode)
22-
import Ouroboros.Network.NodeToNode (AcceptedConnectionsLimit (..),
23-
DiffusionMode (InitiatorAndResponderDiffusionMode))
24-
import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing (..))
21+
import Ouroboros.Network.Diffusion.Configuration
2522

2623
import Data.Monoid (Last (..))
2724
import Data.Text (Text)
@@ -118,7 +115,6 @@ testPartialYamlConfig =
118115
, pncSocketConfig = Last . Just $ SocketConfig (Last Nothing) mempty mempty mempty
119116
, pncShutdownConfig = Last Nothing
120117
, pncStartAsNonProducingNode = Last $ Just False
121-
, pncConsensusMode = mempty
122118
, pncDiffusionMode = Last Nothing
123119
, pncNumOfDiskSnapshots = Last Nothing
124120
, pncSnapshotInterval = mempty
@@ -147,9 +143,13 @@ testPartialYamlConfig =
147143
, pncTargetNumberOfKnownBigLedgerPeers = mempty
148144
, pncTargetNumberOfEstablishedBigLedgerPeers = mempty
149145
, pncTargetNumberOfActiveBigLedgerPeers = mempty
150-
, pncMinBigLedgerPeersForTrustedState = pure (MinBigLedgerPeersForTrustedState 3) -- TODO: Review
146+
, pncGenesisTargetNumberOfActivePeers = mempty
147+
, pncGenesisTargetNumberOfKnownBigLedgerPeers = mempty
148+
, pncGenesisTargetNumberOfEstablishedBigLedgerPeers = mempty
149+
, pncGenesisTargetNumberOfActiveBigLedgerPeers = mempty
151150
, pncEnableP2P = Last (Just DisabledP2PMode)
152151
, pncPeerSharing = Last (Just PeerSharingDisabled)
152+
, pncConsensusMode = Last (Just PraosMode)
153153
}
154154

155155
-- | Example partial configuration theoretically created
@@ -163,7 +163,6 @@ testPartialCliConfig =
163163
, pncConfigFile = mempty
164164
, pncTopologyFile = mempty
165165
, pncDatabaseFile = mempty
166-
, pncConsensusMode = mempty
167166
, pncDiffusionMode = mempty
168167
, pncNumOfDiskSnapshots = Last Nothing
169168
, pncSnapshotInterval = Last . Just . RequestedSnapshotInterval $ secondsToDiffTime 100
@@ -190,9 +189,13 @@ testPartialCliConfig =
190189
, pncTargetNumberOfKnownBigLedgerPeers = mempty
191190
, pncTargetNumberOfEstablishedBigLedgerPeers = mempty
192191
, pncTargetNumberOfActiveBigLedgerPeers = mempty
193-
, pncMinBigLedgerPeersForTrustedState = pure (MinBigLedgerPeersForTrustedState 3) -- TODO: Review
192+
, pncGenesisTargetNumberOfActivePeers = mempty
193+
, pncGenesisTargetNumberOfKnownBigLedgerPeers = mempty
194+
, pncGenesisTargetNumberOfEstablishedBigLedgerPeers = mempty
195+
, pncGenesisTargetNumberOfActiveBigLedgerPeers = mempty
194196
, pncEnableP2P = Last (Just DisabledP2PMode)
195197
, pncPeerSharing = Last (Just PeerSharingDisabled)
198+
, pncConsensusMode = Last (Just GenesisMode)
196199
}
197200

198201
-- | Expected final NodeConfiguration
@@ -210,7 +213,6 @@ eExpectedConfig = do
210213
, ncProtocolFiles = ProtocolFilepaths Nothing Nothing Nothing Nothing Nothing Nothing
211214
, ncValidateDB = True
212215
, ncProtocolConfig = testNodeProtocolConfiguration
213-
, ncConsensusMode = defaultConsensusMode
214216
, ncDiffusionMode = InitiatorAndResponderDiffusionMode
215217
, ncNumOfDiskSnapshots = DefaultNumOfDiskSnapshots
216218
, ncSnapshotInterval = RequestedSnapshotInterval $ secondsToDiffTime 100
@@ -232,16 +234,20 @@ eExpectedConfig = do
232234
, acceptedConnectionsSoftLimit = 384
233235
, acceptedConnectionsDelay = 5
234236
}
235-
, ncTargetNumberOfRootPeers = 85
237+
, ncTargetNumberOfRootPeers = 60
236238
, ncTargetNumberOfKnownPeers = 85
237239
, ncTargetNumberOfEstablishedPeers = 40
238240
, ncTargetNumberOfActivePeers = 15
239241
, ncTargetNumberOfKnownBigLedgerPeers = 15
240242
, ncTargetNumberOfEstablishedBigLedgerPeers = 10
241243
, ncTargetNumberOfActiveBigLedgerPeers = 5
242-
, ncMinBigLedgerPeersForTrustedState = MinBigLedgerPeersForTrustedState 3 -- TODO: Review
244+
, ncGenesisTargetNumberOfActivePeers = 0
245+
, ncGenesisTargetNumberOfKnownBigLedgerPeers = 100
246+
, ncGenesisTargetNumberOfEstablishedBigLedgerPeers = 50
247+
, ncGenesisTargetNumberOfActiveBigLedgerPeers = 30
243248
, ncEnableP2P = SomeNetworkP2PMode Consensus.DisabledP2PMode
244249
, ncPeerSharing = PeerSharingDisabled
250+
, ncConsensusMode = GenesisMode
245251
}
246252

247253
-- -----------------------------------------------------------------------------

configuration/cardano/mainnet-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"RequiresNetworkMagic": "RequiresNoMagic",
1717
"ShelleyGenesisFile": "mainnet-shelley-genesis.json",
1818
"ShelleyGenesisHash": "1a3be38bcbb7911969283716ad7aa550250226b76a61fc51cc9a9a35d9276d81",
19+
"ConsensusMode": "PraosMode"
1920
"TargetNumberOfActivePeers": 20,
2021
"TargetNumberOfEstablishedPeers": 50,
2122
"TargetNumberOfKnownPeers": 150,

configuration/cardano/mainnet-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ MaxKnownMajorProtocolVersion: 2
3434

3535
##### Network Configuration #####
3636

37+
ConsensusMode: PraosMode
3738
PeerSharing: True
3839
TargetNumberOfActivePeers: 20
3940
TargetNumberOfEstablishedPeers: 50

configuration/cardano/shelley_qa-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"RequiresNetworkMagic": "RequiresMagic",
1818
"ShelleyGenesisFile": "shelley_qa-shelley-genesis.json",
1919
"ShelleyGenesisHash": "73a9f6bdb0aa97f5e63190a6f14a702bd64a21f2bec831cbfc28f6037128b952",
20+
"ConsensusMode": "PraosMode"
2021
"TargetNumberOfActivePeers": 20,
2122
"TargetNumberOfEstablishedPeers": 50,
2223
"TargetNumberOfKnownPeers": 150,

0 commit comments

Comments
 (0)