Skip to content

Commit

Permalink
Expose ability to configure mempoolCapacityOverride
Browse files Browse the repository at this point in the history
  • Loading branch information
newhoggy committed Oct 13, 2021
1 parent 03799ba commit e75c48c
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 13 deletions.
4 changes: 2 additions & 2 deletions cabal.project
Expand Up @@ -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
Expand Down
29 changes: 28 additions & 1 deletion cardano-node/src/Cardano/Node/Configuration/POM.hs
Expand Up @@ -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)
Expand Down Expand Up @@ -83,6 +86,8 @@ data NodeConfiguration
, ncLoggingSwitch :: !Bool
, ncLogMetrics :: !Bool
, ncTraceConfig :: !TraceOptions

, ncMaybeMempoolCapacityOverride :: !(Maybe MempoolCapacityBytesOverride)
} deriving (Eq, Show)


Expand All @@ -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:
Expand All @@ -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
Expand Down Expand Up @@ -167,6 +175,8 @@ instance FromJSON PartialNodeConfiguration where
<*> parseShelleyProtocol v
<*> parseAlonzoProtocol v
<*> parseHardForkProtocol v)
pncMaybeMempoolCapacityOverride <- Last <$> parseMempoolCapacityBytesOverride v

pure PartialNodeConfiguration {
pncProtocolConfig
, pncSocketPath
Expand All @@ -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"
Expand Down Expand Up @@ -309,6 +334,7 @@ defaultPartialNodeConfiguration =
, pncMaxConcurrencyDeadline = mempty
, pncLogMetrics = mempty
, pncTraceConfig = mempty
, pncMaybeMempoolCapacityOverride = mempty
}

lastOption :: Parser a -> Parser (Last a)
Expand Down Expand Up @@ -358,6 +384,7 @@ makeNodeConfiguration pnc = do
, ncLogMetrics = logMetrics
, ncTraceConfig = if loggingSwitch then traceConfig
else TracingOff
, ncMaybeMempoolCapacityOverride = getLast $ pncMaybeMempoolCapacityOverride pnc
}

ncProtocol :: NodeConfiguration -> Protocol
Expand Down
23 changes: 23 additions & 0 deletions cardano-node/src/Cardano/Node/Parsers.hs
@@ -1,5 +1,6 @@
{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TypeApplications #-}

module Cardano.Node.Parsers
( nodeCLIParser
Expand All @@ -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)
Expand Down Expand Up @@ -62,6 +64,8 @@ nodeRunParser = do

shutdownOnSlotSynced <- lastOption parseShutdownOnSlotSynced

maybeMempoolCapacityOverride <- lastOption parseMempoolCapacityOverride

pure $ PartialNodeConfiguration
{ pncNodeIPv4Addr = nIPv4Address
, pncNodeIPv6Addr = nIPv6Address
Expand Down Expand Up @@ -90,6 +94,7 @@ nodeRunParser = do
, pncLoggingSwitch = mempty
, pncLogMetrics = mempty
, pncTraceConfig = mempty
, pncMaybeMempoolCapacityOverride = maybeMempoolCapacityOverride
}

parseSocketPath :: Text -> Parser SocketPath
Expand Down Expand Up @@ -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
Expand Down
25 changes: 15 additions & 10 deletions cardano-node/src/Cardano/Node/Run.hs
Expand Up @@ -5,6 +5,7 @@
{-# LANGUAGE GADTs #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

#if !defined(mingw32_HOST_OS)
#define UNIX
Expand Down Expand Up @@ -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 ()
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions cardano-node/test/Test/Cardano/Node/POM.hs
Expand Up @@ -65,6 +65,7 @@ testPartialYamlConfig =
, pncValidateDB = mempty
, pncShutdownIPC = mempty
, pncShutdownOnSlotSynced = mempty
, pncMaybeMempoolCapacityOverride = mempty
}

-- | Example partial configuration theoretically created
Expand Down Expand Up @@ -92,6 +93,7 @@ testPartialCliConfig =
, pncLoggingSwitch = mempty
, pncLogMetrics = mempty
, pncTraceConfig = mempty
, pncMaybeMempoolCapacityOverride = mempty
}

-- | Expected final NodeConfiguration
Expand Down Expand Up @@ -120,6 +122,7 @@ expectedConfig =
, ncLoggingSwitch = True
, ncLogMetrics = True
, ncTraceConfig = TracingOff
, ncMaybeMempoolCapacityOverride = Nothing
}

-- -----------------------------------------------------------------------------
Expand Down

0 comments on commit e75c48c

Please sign in to comment.