Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

[GH-223] Add Block specific configuration options using CLI. #228

Merged
merged 2 commits into from
Jul 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions src/Cardano/Shell/Configuration/Lib.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ import Cardano.Shell.Configuration.Types (BlockchainConfig,
OSConfig, TopologyConfig,
WalletConfig, renderCluster,
renderOS)
import Cardano.Shell.Constants.PartialTypes (PartialCardanoConfiguration (..),
import Cardano.Shell.Constants.PartialTypes (PartialBlock (..), PartialCardanoConfiguration (..),
PartialCore (..),
PartialGenesis (..),
PartialNode (..))
import Cardano.Shell.Constants.Types (CardanoConfiguration (..),
import Cardano.Shell.Constants.Types (Block (..),
CardanoConfiguration (..),
Core (..), Genesis (..),
Node (..))

Expand Down Expand Up @@ -62,14 +63,16 @@ finaliseCardanoConfiguration PartialCardanoConfiguration{..} = do
ccTXP <- lastToEither "Unspecified ccTXP" pccTXP
ccSSC <- lastToEither "Unspecified ccSSC" pccSSC
ccDLG <- lastToEither "Unspecified ccDLG" pccDLG
ccBlock <- lastToEither "Unspecified ccBlock" pccBlock
ccBlock <- join $ finaliseBlock <$>
lastToEither "Unspecified ccBlock" pccBlock
ccNode <- join $ finaliseNode <$>
lastToEither "Unspecified ccNode" pccNode
ccTLS <- lastToEither "Unspecified ccTLS" pccTLS
ccWallet <- lastToEither "Unspecified ccWallet" pccWallet

pure CardanoConfiguration{..}

-- | Finalize the @PartialCore@, convert to @Core@.
finaliseCore :: PartialCore -> Either Text Core
finaliseCore PartialCore{..} = do
coGenesis <- join $ finaliseGenesis <$>
Expand All @@ -79,6 +82,7 @@ finaliseCore PartialCore{..} = do

pure Core{..}

-- | Finalize the @PartialGenesis@, convert to @Genesis@.
finaliseGenesis :: PartialGenesis -> Either Text Genesis
finaliseGenesis PartialGenesis{..} = do

Expand All @@ -88,6 +92,7 @@ finaliseGenesis PartialGenesis{..} = do

pure Genesis{..}

-- | Finalize the @PartialNode@, convert to @Node@.
finaliseNode :: PartialNode -> Either Text Node
finaliseNode PartialNode{..} = do

Expand All @@ -108,6 +113,22 @@ finaliseNode PartialNode{..} = do

pure Node{..}

-- | Finalize the @PartialBlock@, convert to @Block@.
finaliseBlock :: PartialBlock -> Either Text Block
finaliseBlock PartialBlock{..} = do

blNetworkDiameter <- lastToEither "Unspecified blNetworkDiameter" pblNetworkDiameter
blRecoveryHeadersMessage <- lastToEither "Unspecified blRecoveryHeadersMessage" pblRecoveryHeadersMessage
blStreamWindow <- lastToEither "Unspecified blStreamWindow" pblStreamWindow
blNonCriticalCQBootstrap <- lastToEither "Unspecified blNonCriticalCQBootstrap" pblNonCriticalCQBootstrap
blNonCriticalCQ <- lastToEither "Unspecified blNonCriticalCQ" pblNonCriticalCQ
blCriticalCQ <- lastToEither "Unspecified blCriticalCQ" pblCriticalCQ
blCriticalCQBootstrap <- lastToEither "Unspecified blCriticalCQBootstrap" pblCriticalCQBootstrap
blCriticalForkThreshold <- lastToEither "Unspecified blCriticalForkThreshold" pblCriticalForkThreshold
blFixedTimeCQ <- lastToEither "Unspecified blFixedTimeCQ" pblFixedTimeCQ

pure Block{..}


-- | Generate 'TopologyConfig' with given 'Cluster'
mkTopology :: Cluster -> IO TopologyConfig
Expand Down
56 changes: 56 additions & 0 deletions src/Cardano/Shell/Constants/CLI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ module Cardano.Shell.Constants.CLI
, configDBVersionCLIParser
-- * Node
, configNodeCLIParser
-- * Block
, configBlockCLIParser
) where

import Cardano.Prelude hiding (option)
Expand Down Expand Up @@ -128,3 +130,57 @@ configNodeCLIParser =
<> help "Enable explorer extended API for fetching more."
)

--------------------------------------------------------------------------------
-- Block
--------------------------------------------------------------------------------

-- | Block CLI parser.
configBlockCLIParser :: Parser PartialBlock
configBlockCLIParser =
PartialBlock
<$> option auto
( long "network-diameter"
<> metavar "NETWORK-DIAMETER-TIME"
<> help "Estimated time needed to broadcast message from one node to all other nodes."
)
<*> option auto
( long "recovery-headers-amount"
<> metavar "RECOVERY-HEADERS-AMOUNT"
<> help "Maximum amount of headers node can put into headers message while in 'after offline' or 'recovery' mode."
)
<*> option auto
( long "stream-window"
<> metavar "STREAM-WINDOW-CAPACITY"
<> help "Number of blocks to have inflight."
)
<*> option auto
( long "noncritical-cq-bootstrap"
<> metavar "NONCRITICAL-CQ-BOOTSTRAP"
<> help "If chain quality in bootstrap era is less than this value, non critical misbehavior will be reported."
)
<*> option auto
( long "critical-cq-bootstrap"
<> metavar "CRITICAL-CQ-BOOTSTRAP"
<> help "If chain quality in bootstrap era is less than this value, critical misbehavior will be reported."
)
<*> option auto
( long "noncritical-cq"
<> metavar "NONCRITICAL-CQ"
<> help "If chain quality after bootstrap era is less than this value, non critical misbehavior will be reported."
)
<*> option auto
( long "critical-cq"
<> metavar "CRITICAL-CQ"
<> help "If chain quality after bootstrap era is less than this value, critical misbehavior will be reported."
)
<*> option auto
( long "critical-fork-threshold"
<> metavar "CRITICAL-FORK-THRESHOLD"
<> help "Number of blocks such that if so many blocks are rolled back, it requires immediate reaction."
)
<*> option auto
( long "fixed-time-cq"
<> metavar "FIXED-TIME-CQ"
<> help "Chain quality will be also calculated for this amount of seconds."
)

27 changes: 26 additions & 1 deletion src/Cardano/Shell/Constants/PartialTypes.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module Cardano.Shell.Constants.PartialTypes
, PartialCore (..)
, PartialGenesis (..)
, PartialNode (..)
, PartialBlock (..)
-- * re-exports
, RequireNetworkMagic (..)
) where
Expand All @@ -29,7 +30,7 @@ data PartialCardanoConfiguration = PartialCardanoConfiguration
, pccTXP :: !(Last TXP)
, pccSSC :: !(Last SSC)
, pccDLG :: !(Last DLG)
, pccBlock :: !(Last Block)
, pccBlock :: !(Last PartialBlock)
, pccNode :: !(Last PartialNode)
, pccTLS :: !(Last TLS)
, pccWallet :: !(Last Wallet)
Expand Down Expand Up @@ -74,3 +75,27 @@ data PartialNode = PartialNode
deriving Semigroup via GenericSemigroup PartialNode
deriving Monoid via GenericMonoid PartialNode

-- | Partial @Block@ configuration.
data PartialBlock = PartialBlock
{ pblNetworkDiameter :: !(Last Int)
-- ^Estimated time needed to broadcast message from one node to all other nodes.
, pblRecoveryHeadersMessage :: !(Last Int)
-- ^Maximum amount of headers node can put into headers message while in "after offline" or "recovery" mode.
, pblStreamWindow :: !(Last Int)
-- ^ Number of blocks to have inflight
, pblNonCriticalCQBootstrap :: !(Last Double)
-- ^ If chain quality in bootstrap era is less than this value, non critical misbehavior will be reported.
, pblNonCriticalCQ :: !(Last Double)
-- ^ If chain quality after bootstrap era is less than this value, non critical misbehavior will be reported.
, pblCriticalCQ :: !(Last Double)
-- ^ If chain quality after bootstrap era is less than this value, critical misbehavior will be reported.
, pblCriticalCQBootstrap :: !(Last Double)
-- ^ If chain quality in bootstrap era is less than this value, critical misbehavior will be reported.
, pblCriticalForkThreshold :: !(Last Int)
-- ^ Number of blocks such that if so many blocks are rolled back, it requires immediate reaction.
, pblFixedTimeCQ :: !(Last Int)
-- ^ Chain quality will be also calculated for this amount of seconds.
} deriving (Eq, Show, Generic)
deriving Semigroup via GenericSemigroup PartialBlock
deriving Monoid via GenericMonoid PartialBlock

45 changes: 22 additions & 23 deletions src/Cardano/Shell/Presets.hs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@ module Cardano.Shell.Presets

import Cardano.Prelude

import Cardano.Shell.Constants.PartialTypes (PartialCardanoConfiguration (..),
import Cardano.Shell.Constants.PartialTypes (PartialBlock (..), PartialCardanoConfiguration (..),
PartialCore (..),
PartialGenesis (..),
PartialNode (..))
import Cardano.Shell.Constants.Types (Block (..), Certificate (..),
DLG (..),
import Cardano.Shell.Constants.Types (Certificate (..), DLG (..),
LastKnownBlockVersion (..),
NTP (..),
RequireNetworkMagic (..),
Expand Down Expand Up @@ -77,16 +76,16 @@ mainnetConfiguration =
, dlgMessageCacheTimeout = 30
}
, pccBlock = pure
Block
{ blNetworkDiameter = 18
, blRecoveryHeadersMessage = 2200
, blStreamWindow = 2048
, blNonCriticalCQBootstrap = 0.95
, blNonCriticalCQ = 0.8
, blCriticalCQBootstrap = 0.8888
, blCriticalCQ = 0.654321
, blCriticalForkThreshold = 3
, blFixedTimeCQ = 3600
PartialBlock
{ pblNetworkDiameter = pure 18
, pblRecoveryHeadersMessage = pure 2200
, pblStreamWindow = pure 2048
, pblNonCriticalCQBootstrap = pure 0.95
, pblNonCriticalCQ = pure 0.8
, pblCriticalCQBootstrap = pure 0.8888
, pblCriticalCQ = pure 0.654321
, pblCriticalForkThreshold = pure 3
, pblFixedTimeCQ = pure 3600
}
, pccNode = pure
PartialNode
Expand Down Expand Up @@ -198,16 +197,16 @@ devConfiguration =
, dlgMessageCacheTimeout = 30
}
, pccBlock = pure
Block
{ blNetworkDiameter = 3
, blRecoveryHeadersMessage = 20
, blStreamWindow = 2048
, blNonCriticalCQBootstrap = 0.95
, blNonCriticalCQ = 0.8
, blCriticalCQBootstrap = 0.8888
, blCriticalCQ = 0.654321
, blCriticalForkThreshold = 2
, blFixedTimeCQ = 10
PartialBlock
{ pblNetworkDiameter = pure 3
, pblRecoveryHeadersMessage = pure 20
, pblStreamWindow = pure 2048
, pblNonCriticalCQBootstrap = pure 0.95
, pblNonCriticalCQ = pure 0.8
, pblCriticalCQBootstrap = pure 0.8888
, pblCriticalCQ = pure 0.654321
, pblCriticalForkThreshold = pure 2
, pblFixedTimeCQ = pure 10
}
, pccNode = pure
PartialNode
Expand Down