diff --git a/cabal.project b/cabal.project index 679725d429b..b22ebf03e8a 100644 --- a/cabal.project +++ b/cabal.project @@ -231,8 +231,8 @@ source-repository-package source-repository-package type: git location: https://github.com/input-output-hk/ouroboros-network - tag: e0ccbb73296027a5e5fd224a78374321974758ce - --sha256: 1a6djwb2jkhh4pq6iwr10zxgpiz3n3f2yw54ciwnwqdm59cami38 + tag: e72d3dc867e946d877f45c22de0b6462723eb589 + --sha256: 01rpknlp926x7nifr9zhv3nvn6wv0p3i84vibkb1n3g4minlwb25 subdir: io-sim io-classes diff --git a/cardano-node/src/Cardano/Node/Configuration/POM.hs b/cardano-node/src/Cardano/Node/Configuration/POM.hs index 7667ed349b6..8e9d9863d62 100644 --- a/cardano-node/src/Cardano/Node/Configuration/POM.hs +++ b/cardano-node/src/Cardano/Node/Configuration/POM.hs @@ -33,10 +33,13 @@ import Cardano.Crypto (RequiresNetworkMagic (..)) import Cardano.Node.Protocol.Types (Protocol (..)) import Cardano.Node.Types import Cardano.Tracing.Config +import Ouroboros.Consensus.Mempool.API (MempoolCapacityBytesOverride (..), MempoolCapacityBytes (..)) import Ouroboros.Consensus.Storage.LedgerDB.DiskPolicy (SnapshotInterval (..)) import Ouroboros.Network.Block (MaxSlotNo (..)) import Ouroboros.Network.NodeToNode (DiffusionMode (..)) +import qualified Data.Aeson.Types as J + data NodeConfiguration = NodeConfiguration { ncNodeIPv4Addr :: !(Maybe NodeHostIPv4Address) @@ -83,6 +86,8 @@ data NodeConfiguration , ncLoggingSwitch :: !Bool , ncLogMetrics :: !Bool , ncTraceConfig :: !TraceOptions + + , ncMaybeMempoolCapacityOverride :: !(Maybe MempoolCapacityBytesOverride) } deriving (Eq, Show) @@ -102,7 +107,7 @@ data PartialNodeConfiguration , pncShutdownIPC :: !(Last (Maybe Fd)) , pncShutdownOnSlotSynced :: !(Last MaxSlotNo) - -- Protocol-specific parameters: + -- Protocol-specific parameters: , pncProtocolConfig :: !(Last NodeProtocolConfiguration) -- Node parameters, not protocol-specific: @@ -119,6 +124,9 @@ data PartialNodeConfiguration , pncLoggingSwitch :: !(Last Bool) , pncLogMetrics :: !(Last Bool) , pncTraceConfig :: !(Last TraceOptions) + + -- Configuration for testing purposes + , pncMaybeMempoolCapacityOverride :: !(Last MempoolCapacityBytesOverride) } deriving (Eq, Generic, Show) instance AdjustFilePaths PartialNodeConfiguration where @@ -167,6 +175,8 @@ instance FromJSON PartialNodeConfiguration where <*> parseShelleyProtocol v <*> parseAlonzoProtocol v <*> parseHardForkProtocol v) + pncMaybeMempoolCapacityOverride <- Last <$> parseMempoolCapacityBytesOverride v + pure PartialNodeConfiguration { pncProtocolConfig , pncSocketPath @@ -188,8 +198,23 @@ instance FromJSON PartialNodeConfiguration where , pncValidateDB = mempty , pncShutdownIPC = mempty , pncShutdownOnSlotSynced = mempty + , pncMaybeMempoolCapacityOverride } where + parseMempoolCapacityBytesOverride :: Object -> J.Parser (Maybe MempoolCapacityBytesOverride) + parseMempoolCapacityBytesOverride v = do + maybeBytes <- v .:? "MempoolCapacityBytesOverride" + case maybeBytes of + Just bytes -> return (Just (MempoolCapacityBytesOverride (MempoolCapacityBytes bytes))) + Nothing -> do + maybeString <- v .:? "MempoolCapacityBytesOverride" + case maybeString of + Just string -> case string :: String of + "NoOverride" -> return (Just NoMempoolCapacityBytesOverride) + invalid -> J.parseFail $ + "Invalid value for 'MempoolCapacityBytesOverride'. \ + \Expecting byte count or NoOverride. Value was: " <> show invalid + Nothing -> return Nothing parseByronProtocol v = do primary <- v .:? "ByronGenesisFile" secondary <- v .:? "GenesisFile" @@ -309,6 +334,7 @@ defaultPartialNodeConfiguration = , pncMaxConcurrencyDeadline = mempty , pncLogMetrics = mempty , pncTraceConfig = mempty + , pncMaybeMempoolCapacityOverride = mempty } lastOption :: Parser a -> Parser (Last a) @@ -358,6 +384,7 @@ makeNodeConfiguration pnc = do , ncLogMetrics = logMetrics , ncTraceConfig = if loggingSwitch then traceConfig else TracingOff + , ncMaybeMempoolCapacityOverride = getLast $ pncMaybeMempoolCapacityOverride pnc } ncProtocol :: NodeConfiguration -> Protocol diff --git a/cardano-node/src/Cardano/Node/Parsers.hs b/cardano-node/src/Cardano/Node/Parsers.hs index e627af09f2b..b5e8758d992 100644 --- a/cardano-node/src/Cardano/Node/Parsers.hs +++ b/cardano-node/src/Cardano/Node/Parsers.hs @@ -1,5 +1,6 @@ {-# LANGUAGE ApplicativeDo #-} {-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE TypeApplications #-} module Cardano.Node.Parsers ( nodeCLIParser @@ -19,6 +20,7 @@ import System.Posix.Types (Fd (..)) import Ouroboros.Network.Block (MaxSlotNo (..), SlotNo (..)) +import Ouroboros.Consensus.Mempool.API (MempoolCapacityBytesOverride (..), MempoolCapacityBytes (..)) import Ouroboros.Consensus.Storage.LedgerDB.DiskPolicy (SnapshotInterval (..)) import Cardano.Node.Configuration.POM (PartialNodeConfiguration (..), lastOption) @@ -62,6 +64,8 @@ nodeRunParser = do shutdownOnSlotSynced <- lastOption parseShutdownOnSlotSynced + maybeMempoolCapacityOverride <- lastOption parseMempoolCapacityOverride + pure $ PartialNodeConfiguration { pncNodeIPv4Addr = nIPv4Address , pncNodeIPv6Addr = nIPv6Address @@ -90,6 +94,7 @@ nodeRunParser = do , pncLoggingSwitch = mempty , pncLogMetrics = mempty , pncTraceConfig = mempty + , pncMaybeMempoolCapacityOverride = maybeMempoolCapacityOverride } parseSocketPath :: Text -> Parser SocketPath @@ -153,6 +158,24 @@ parseConfigFile = <> completer (bashCompleter "file") ) +parseMempoolCapacityOverride :: Parser MempoolCapacityBytesOverride +parseMempoolCapacityOverride = parseOverride <|> parseNoOverride + where + parseOverride :: Parser MempoolCapacityBytesOverride + parseOverride = + MempoolCapacityBytesOverride . MempoolCapacityBytes <$> + option (auto @Word32) + ( long "mempool-capacity-override" + <> metavar "BYTES" + <> help "The number of bytes" + ) + parseNoOverride :: Parser MempoolCapacityBytesOverride + parseNoOverride = + flag' NoMempoolCapacityBytesOverride + ( long "no-mempool-capacity-override" + <> help "The port number" + ) + parseDbPath :: Parser FilePath parseDbPath = strOption diff --git a/cardano-node/src/Cardano/Node/Run.hs b/cardano-node/src/Cardano/Node/Run.hs index a1734f2f744..79e71afd439 100644 --- a/cardano-node/src/Cardano/Node/Run.hs +++ b/cardano-node/src/Cardano/Node/Run.hs @@ -5,6 +5,7 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TypeApplications #-} #if !defined(mingw32_HOST_OS) #define UNIX @@ -58,9 +59,10 @@ import Cardano.Tracing.Metrics (HasKESInfo (..), HasKESMetricsData (.. import qualified Ouroboros.Consensus.Config as Consensus import Ouroboros.Consensus.Config.SupportsNode (getNetworkMagic) +import Ouroboros.Consensus.Mempool.API (MempoolCapacityBytes (..)) import Ouroboros.Consensus.Node (DiffusionArguments (..), DiffusionTracers (..), DnsSubscriptionTarget (..), IPSubscriptionTarget (..), RunNode, RunNodeArgs (..), - StdRunNodeArgs (..)) + StdRunNodeArgs (..), MempoolCapacityBytesOverride (..)) import qualified Ouroboros.Consensus.Node as Node (getChainDB, run) import Ouroboros.Consensus.Node.ProtocolInfo import Ouroboros.Consensus.Util.Orphans () @@ -94,6 +96,8 @@ runNode cmdPc = do Left err -> panic $ "Error in creating the NodeConfiguration: " <> Text.pack err Right nc' -> return nc' + putStrLn $ "Node configuration: " <> show @_ @Text nc + case shelleyVRFFile $ ncProtocolFiles nc of Just vrfFp -> do vrf <- runExceptT $ checkVRFFilePermissions vrfFp case vrf of @@ -283,15 +287,16 @@ handleSimpleNode scp runP trace nodeTracers nc onKernel = do onKernel nodeKernel } StdRunNodeArgs - { srnBfcMaxConcurrencyBulkSync = unMaxConcurrencyBulkSync <$> ncMaxConcurrencyBulkSync nc - , srnBfcMaxConcurrencyDeadline = unMaxConcurrencyDeadline <$> ncMaxConcurrencyDeadline nc - , srnChainDbValidateOverride = ncValidateDB nc - , srnSnapshotInterval = ncSnapshotInterval nc - , srnDatabasePath = dbPath - , srnDiffusionArguments = diffusionArguments - , srnDiffusionTracers = diffusionTracers - , srnEnableInDevelopmentVersions = ncTestEnableDevelopmentNetworkProtocols nc - , srnTraceChainDB = chainDBTracer nodeTracers + { srnBfcMaxConcurrencyBulkSync = unMaxConcurrencyBulkSync <$> ncMaxConcurrencyBulkSync nc + , srnBfcMaxConcurrencyDeadline = unMaxConcurrencyDeadline <$> ncMaxConcurrencyDeadline nc + , srnChainDbValidateOverride = ncValidateDB nc + , srnSnapshotInterval = ncSnapshotInterval nc + , srnDatabasePath = dbPath + , srnDiffusionArguments = diffusionArguments + , srnDiffusionTracers = diffusionTracers + , srnEnableInDevelopmentVersions = ncTestEnableDevelopmentNetworkProtocols nc + , srnTraceChainDB = chainDBTracer nodeTracers + , srnMaybeMempoolCapacityOverride = Just (MempoolCapacityBytesOverride (MempoolCapacityBytes 1000)) } where createDiffusionTracers :: Tracers RemoteConnectionId LocalConnectionId blk diff --git a/cardano-node/test/Test/Cardano/Node/POM.hs b/cardano-node/test/Test/Cardano/Node/POM.hs index e4790b3e18c..fed924f2456 100644 --- a/cardano-node/test/Test/Cardano/Node/POM.hs +++ b/cardano-node/test/Test/Cardano/Node/POM.hs @@ -65,6 +65,7 @@ testPartialYamlConfig = , pncValidateDB = mempty , pncShutdownIPC = mempty , pncShutdownOnSlotSynced = mempty + , pncMaybeMempoolCapacityOverride = mempty } -- | Example partial configuration theoretically created @@ -92,6 +93,7 @@ testPartialCliConfig = , pncLoggingSwitch = mempty , pncLogMetrics = mempty , pncTraceConfig = mempty + , pncMaybeMempoolCapacityOverride = mempty } -- | Expected final NodeConfiguration @@ -120,6 +122,7 @@ expectedConfig = , ncLoggingSwitch = True , ncLogMetrics = True , ncTraceConfig = TracingOff + , ncMaybeMempoolCapacityOverride = Nothing } -- -----------------------------------------------------------------------------