Skip to content

Commit 9a71f9f

Browse files
authored
Merge pull request #6274 from IntersectMBO/coot/default-options
NodeConfiguration: default peer sharing option
2 parents d535790 + 875b40f commit 9a71f9f

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ data PartialNodeConfiguration
227227
, pncConfigFile :: !(Last ConfigYamlFilePath)
228228
, pncTopologyFile :: !(Last TopologyFile)
229229
, pncDatabaseFile :: !(Last NodeDatabasePaths)
230+
-- | pncProtocolFiles can only be supplied with command line arguments.
230231
, pncProtocolFiles :: !(Last ProtocolFilepaths)
231232
, pncValidateDB :: !(Last Bool)
232233
, pncShutdownConfig :: !(Last ShutdownConfig)
@@ -313,6 +314,7 @@ instance Semigroup PartialNodeConfiguration where
313314
instance FromJSON PartialNodeConfiguration where
314315
parseJSON =
315316
withObject "PartialNodeConfiguration" $ \v -> do
317+
pncStartAsNonProducingNode <- Last <$> v .:? "StartAsNonProducingNode"
316318

317319
-- Node parameters, not protocol-specific
318320
pncSocketPath <- Last <$> v .:? "SocketPath"
@@ -433,7 +435,7 @@ instance FromJSON PartialNodeConfiguration where
433435
, pncProtocolFiles = mempty
434436
, pncValidateDB = mempty
435437
, pncShutdownConfig = mempty
436-
, pncStartAsNonProducingNode = Last $ Just False
438+
, pncStartAsNonProducingNode
437439
, pncMaybeMempoolCapacityOverride
438440
, pncLedgerDbConfig
439441
, pncProtocolIdleTimeout
@@ -651,7 +653,7 @@ defaultPartialNodeConfiguration =
651653
, pncDiffusionMode = Last $ Just InitiatorAndResponderDiffusionMode
652654
, pncExperimentalProtocolsEnabled = Last $ Just False
653655
, pncTopologyFile = Last . Just $ TopologyFile "configuration/cardano/mainnet-topology.json"
654-
, pncProtocolFiles = mempty
656+
, pncProtocolFiles = Last . Just $ ProtocolFilepaths Nothing Nothing Nothing Nothing Nothing Nothing
655657
, pncValidateDB = Last $ Just False
656658
, pncShutdownConfig = Last . Just $ ShutdownConfig Nothing Nothing
657659
, pncStartAsNonProducingNode = Last $ Just False
@@ -703,8 +705,8 @@ defaultPartialNodeConfiguration =
703705
, pncConsensusMode = Last (Just Ouroboros.defaultConsensusMode)
704706
-- https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-Diffusion-Configuration.html#v:defaultConsensusMode
705707
, pncEnableP2P = Last (Just EnabledP2PMode)
706-
, pncPeerSharing = Last (Just Ouroboros.defaultPeerSharing)
707-
-- https://ouroboros-network.cardano.intersectmbo.org/ouroboros-network/Ouroboros-Network-Diffusion-Configuration.html#v:defaultPeerSharing
708+
, pncPeerSharing = mempty
709+
-- the default is defined in `makeNodeConfiguration`
708710
, pncGenesisConfigFlags = Last (Just defaultGenesisConfigFlags)
709711
-- https://ouroboros-consensus.cardano.intersectmbo.org/haddocks/ouroboros-consensus-diffusion/Ouroboros-Consensus-Node-Genesis.html#v:defaultGenesisConfigFlags
710712
, pncResponderCoreAffinityPolicy = Last $ Just NoResponderCoreAffinity
@@ -721,6 +723,7 @@ makeNodeConfiguration pnc = do
721723
validateDB <- lastToEither "Missing ValidateDB" $ pncValidateDB pnc
722724
startAsNonProducingNode <- lastToEither "Missing StartAsNonProducingNode" $ pncStartAsNonProducingNode pnc
723725
protocolConfig <- lastToEither "Missing ProtocolConfig" $ pncProtocolConfig pnc
726+
protocolFiles <- lastToEither "Missing ProtocolFiles" $ pncProtocolFiles pnc
724727
loggingSwitch <- lastToEither "Missing LoggingSwitch" $ pncLoggingSwitch pnc
725728
logMetrics <- lastToEither "Missing LogMetrics" $ pncLogMetrics pnc
726729
traceConfig <- first Text.unpack $ partialTraceSelectionToEither $ pncTraceConfig pnc
@@ -800,9 +803,14 @@ makeNodeConfiguration pnc = do
800803
$ getLast
801804
$ pncChainSyncIdleTimeout pnc
802805

803-
ncPeerSharing <-
804-
lastToEither "Missing PeerSharing"
805-
$ pncPeerSharing pnc
806+
let ncPeerSharing =
807+
case pncPeerSharing pnc of
808+
Last Nothing ->
809+
if not startAsNonProducingNode
810+
|| hasProtocolFile protocolFiles
811+
then PeerSharingDisabled
812+
else PeerSharingEnabled
813+
Last (Just peerSharing) -> peerSharing
806814

807815
mGenesisConfigFlags <- case ncConsensusMode of
808816
PraosMode -> pure Nothing
@@ -847,13 +855,7 @@ makeNodeConfiguration pnc = do
847855
{ ncConfigFile = configFile
848856
, ncTopologyFile = topologyFile
849857
, ncDatabaseFile = databaseFile
850-
, ncProtocolFiles =
851-
-- TODO: ncProtocolFiles should be Maybe ProtocolFiles
852-
-- as relay nodes don't need the protocol files because
853-
-- they are not minting blocks.
854-
case getLast $ pncProtocolFiles pnc of
855-
Just pFiles -> pFiles
856-
Nothing -> ProtocolFilepaths Nothing Nothing Nothing Nothing Nothing Nothing
858+
, ncProtocolFiles = protocolFiles
857859
, ncValidateDB = validateDB
858860
, ncShutdownConfig = shutdownConfig
859861
, ncStartAsNonProducingNode = startAsNonProducingNode

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ import Data.Monoid (Last (..))
3333
import Data.Text (Text)
3434
import qualified Data.Text as Text
3535
import Data.Word (Word16, Word32)
36-
import Options.Applicative hiding (str)
36+
import Options.Applicative hiding (str, switch)
37+
-- Don't use switch. It will not allow to set an option in a configuration
38+
-- file. See `parseStartAsNonProducingNode` and `parseValidateDB`.
3739
import qualified Options.Applicative as Opt
3840
import qualified Options.Applicative.Help as OptI
3941
import System.Posix.Types (Fd (..))
@@ -65,7 +67,7 @@ nodeRunParser = do
6567
shelleyVRFFile <- optional parseVrfKeyFilePath
6668
shelleyCertFile <- optional parseOperationalCertFilePath
6769
shelleyBulkCredsFile <- optional parseBulkCredsFilePath
68-
startAsNonProducingNode <- lastOption parseStartAsNonProducingNode
70+
startAsNonProducingNode <- Last <$> parseStartAsNonProducingNode
6971

7072
-- Node Address
7173
nIPv4Address <- lastOption parseHostIPv4Addr
@@ -301,9 +303,13 @@ parseImmutableDbPath = strOption $
301303
]
302304

303305

306+
-- | This parser will always override configuration option, even if the
307+
-- `--validate-db` is not present. This is fine for `--validate-db` switch,
308+
-- but might not be for something else. See `parseStartAsNonProducingNode` for
309+
-- an alternative solution.
304310
parseValidateDB :: Parser Bool
305311
parseValidateDB =
306-
switch (
312+
Opt.switch (
307313
long "validate-db"
308314
<> help "Validate all on-disk database files"
309315
)
@@ -388,9 +394,12 @@ parseVrfKeyFilePath =
388394
<> completer (bashCompleter "file")
389395
)
390396

391-
parseStartAsNonProducingNode :: Parser Bool
397+
-- | A parser which returns `Nothing` or `Just True`; the default value is set
398+
-- in `defaultPartialNodeConfiguration`. This allows to set this option either
399+
-- in the configuration file or as command line flag.
400+
parseStartAsNonProducingNode :: Parser (Maybe Bool)
392401
parseStartAsNonProducingNode =
393-
switch $ mconcat
402+
flag Nothing (Just True) $ mconcat
394403
[ long "non-producing-node"
395404
, help $ mconcat
396405
[ "Start the node as a non block producing node even if "

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module Cardano.Node.Types
1717
, PeerSnapshotFile (..)
1818
, CheckpointsFile(..)
1919
, ProtocolFilepaths (..)
20+
, hasProtocolFile
2021
, GenesisHash(..)
2122
, CheckpointsHash(..)
2223
, MaxConcurrencyBulkSync(..)
@@ -50,6 +51,7 @@ import Ouroboros.Network.NodeToNode (DiffusionMode (..))
5051
import Control.Exception
5152
import Data.Aeson
5253
import Data.ByteString (ByteString)
54+
import Data.Maybe (isJust)
5355
import Data.Monoid (Last (..))
5456
import Data.String (IsString)
5557
import Data.Text (Text)
@@ -174,6 +176,25 @@ data ProtocolFilepaths =
174176
, shelleyBulkCredsFile :: !(Maybe FilePath)
175177
} deriving (Eq, Show)
176178

179+
-- | If any of the 'ProtocolFilepath` is given `PeerSharing` option will be
180+
-- disabled by default.
181+
--
182+
hasProtocolFile :: ProtocolFilepaths -> Bool
183+
hasProtocolFile ProtocolFilepaths {
184+
byronCertFile,
185+
byronKeyFile,
186+
shelleyKESFile,
187+
shelleyVRFFile,
188+
shelleyCertFile,
189+
shelleyBulkCredsFile
190+
}
191+
= isJust byronCertFile
192+
|| isJust byronKeyFile
193+
|| isJust shelleyKESFile
194+
|| isJust shelleyVRFFile
195+
|| isJust shelleyCertFile
196+
|| isJust shelleyBulkCredsFile
197+
177198
newtype GenesisHash = GenesisHash (Crypto.Hash Crypto.Blake2b_256 ByteString)
178199
deriving newtype (Eq, Show, ToJSON, FromJSON)
179200

0 commit comments

Comments
 (0)