diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Setup/NodeConfig.hs b/bench/tx-generator/src/Cardano/TxGenerator/Setup/NodeConfig.hs index bb1e80d8751..8e2eb8354af 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Setup/NodeConfig.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Setup/NodeConfig.hs @@ -12,7 +12,7 @@ import Cardano.Api (BlockType (..), ProtocolInfoArgs (..)) import qualified Cardano.Ledger.Api.Transition as Ledger (tcShelleyGenesisL) import Cardano.Node.Configuration.POM -import Cardano.Node.Handlers.Shutdown (ShutdownConfig (..)) +import Cardano.Node.Handlers.Shutdown.Config (ShutdownConfig (..)) import Cardano.Node.Protocol.Cardano import Cardano.Node.Protocol.Types (SomeConsensusProtocol (..)) import Cardano.Node.Types (ConfigYamlFilePath (..), GenesisFile, diff --git a/bench/tx-generator/tx-generator.cabal b/bench/tx-generator/tx-generator.cabal index 5beffe64a9d..95586e1235c 100644 --- a/bench/tx-generator/tx-generator.cabal +++ b/bench/tx-generator/tx-generator.cabal @@ -122,7 +122,7 @@ library , cardano-ledger-api , cardano-ledger-byron , cardano-ledger-core - , cardano-node + , cardano-node:{cardano-configuration,cardano-node} , cardano-prelude , contra-tracer , cborg >= 0.2.2 && < 0.3 diff --git a/cardano-node-chairman/cardano-node-chairman.cabal b/cardano-node-chairman/cardano-node-chairman.cabal index 5d2f7626072..ecfc3cb912e 100644 --- a/cardano-node-chairman/cardano-node-chairman.cabal +++ b/cardano-node-chairman/cardano-node-chairman.cabal @@ -45,7 +45,7 @@ executable cardano-node-chairman , cardano-crypto-class , cardano-git-rev ^>= 0.2.2 , cardano-ledger-core ^>= 1.18 - , cardano-node ^>= 10.6 + , cardano-node:{cardano-configuration,cardano-node} ^>= 10.6 , cardano-prelude , containers , contra-tracer diff --git a/cardano-node/src/Cardano/Node/Configuration/LedgerDB.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/LedgerDB.hs similarity index 100% rename from cardano-node/src/Cardano/Node/Configuration/LedgerDB.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Configuration/LedgerDB.hs diff --git a/cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/NodeAddress.hs similarity index 100% rename from cardano-node/src/Cardano/Node/Configuration/NodeAddress.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Configuration/NodeAddress.hs diff --git a/cardano-node/src/Cardano/Node/Configuration/POM.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/POM.hs similarity index 99% rename from cardano-node/src/Cardano/Node/Configuration/POM.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Configuration/POM.hs index 4255c77d775..4615a83ddfa 100644 --- a/cardano-node/src/Cardano/Node/Configuration/POM.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/POM.hs @@ -31,8 +31,8 @@ import qualified Cardano.Network.Diffusion.Configuration as Cardano import Cardano.Network.Types (NumberOfBigLedgerPeers (..)) import Cardano.Node.Configuration.LedgerDB import Cardano.Node.Configuration.Socket (SocketConfig (..)) -import Cardano.Node.Handlers.Shutdown -import Cardano.Node.Protocol.Types (Protocol (..)) +import Cardano.Node.Handlers.Shutdown.Config (ShutdownConfig (..)) +import Cardano.Node.Protocol.Parsing (Protocol (..)) import Cardano.Node.Types import Cardano.Tracing.Config import Cardano.Tracing.OrphanInstances.Network () diff --git a/cardano-node/src/Cardano/Node/Configuration/Socket.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/Socket.hs similarity index 100% rename from cardano-node/src/Cardano/Node/Configuration/Socket.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Configuration/Socket.hs diff --git a/cardano-node/src/Cardano/Node/Configuration/TopologyP2P.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/TopologyP2P.hs similarity index 97% rename from cardano-node/src/Cardano/Node/Configuration/TopologyP2P.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Configuration/TopologyP2P.hs index 201c3aa499b..c56d902c5e7 100644 --- a/cardano-node/src/Cardano/Node/Configuration/TopologyP2P.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Configuration/TopologyP2P.hs @@ -44,12 +44,12 @@ import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..) import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable (..)) import Cardano.Node.Configuration.NodeAddress import Cardano.Node.Configuration.POM (NodeConfiguration (..)) -import Cardano.Node.Startup (StartupTrace (..)) +import Cardano.Node.Startup.Types (StartupTrace (..)) import Cardano.Node.Types import Cardano.Tracing.OrphanInstances.Network () import Ouroboros.Network.NodeToNode (DiffusionMode (..), PeerAdvertise (..)) import Ouroboros.Network.PeerSelection.LedgerPeers.Type (LedgerPeerSnapshot (..), - UseLedgerPeers (..), RelayAccessPoint (..)) + RelayAccessPoint (..), UseLedgerPeers (..)) import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency (..), WarmValency (..)) @@ -247,7 +247,7 @@ instance ToJSON adr => ToJSON (NetworkTopology adr) where readTopologyFile :: () => forall adr. FromJSON adr => NodeConfiguration - -> CT.Tracer IO (StartupTrace blk) -> IO (Either Text (NetworkTopology adr)) + -> CT.Tracer IO (StartupTrace blk protocolInstantiationError) -> IO (Either Text (NetworkTopology adr)) readTopologyFile NodeConfiguration{ncTopologyFile=TopologyFile topologyFilePath, ncConsensusMode, ncProtocolFiles} tracer = runExceptT $ do bs <- handleIOExceptionsLiftWith handler $ BS.readFile topologyFilePath topology@RealNodeTopology{ntUseLedgerPeers, ntUseBootstrapPeers, ntPeerSnapshotPath} <- @@ -340,7 +340,7 @@ readTopologyFile NodeConfiguration{ncTopologyFile=TopologyFile topologyFilePath, readTopologyFileOrError :: () => forall adr. FromJSON adr - => NodeConfiguration -> CT.Tracer IO (StartupTrace blk) -> IO (NetworkTopology adr) + => NodeConfiguration -> CT.Tracer IO (StartupTrace blk protocolInstantiationError) -> IO (NetworkTopology adr) readTopologyFileOrError nc tr = readTopologyFile nc tr >>= either (\err -> error $ "Cardano.Node.Configuration.TopologyP2P.readTopologyFile: " diff --git a/cardano-node/cardano-configuration/src/Cardano/Node/Handlers/Shutdown/Config.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Handlers/Shutdown/Config.hs new file mode 100644 index 00000000000..508ae9c1a7c --- /dev/null +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Handlers/Shutdown/Config.hs @@ -0,0 +1,70 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeApplications #-} + +module Cardano.Node.Handlers.Shutdown.Config + ( ShutdownOn (..) + , parseShutdownOn + + -- * Generalised shutdown handling + , ShutdownConfig (..) + ) +where + + +import Ouroboros.Network.Block (BlockNo (..), SlotNo (..)) + +import Control.DeepSeq (NFData) +import Control.Monad (when) +import Data.Aeson (FromJSON, ToJSON) +import Data.Foldable (asum) +import GHC.Generics (Generic) +import qualified Options.Applicative as Opt +import System.Posix.Types (Fd) +import qualified Text.Read as Read + +import Generic.Data.Orphans () + +data ShutdownOn + = ASlot !SlotNo + | ABlock !BlockNo + | NoShutdown + deriving (Generic, Eq, Show) + +deriving instance FromJSON ShutdownOn +deriving instance ToJSON ShutdownOn +deriving instance NFData ShutdownOn + +parseShutdownOn :: Opt.Parser ShutdownOn +parseShutdownOn = asum + [ Opt.option (ASlot . SlotNo <$> bounded "SLOT") $ mconcat + [ Opt.long "shutdown-on-slot-synced" + , Opt.metavar "SLOT" + , Opt.help "Shut down the process after ChainDB is synced up to the specified slot" + , Opt.hidden + ] + , Opt.option (ABlock . BlockNo <$> bounded "BLOCK") $ mconcat + [ Opt.long "shutdown-on-block-synced" + , Opt.metavar "BLOCK" + , Opt.help "Shut down the process after ChainDB is synced up to the specified block" + , Opt.hidden + ] + , pure NoShutdown + ] + where + bounded :: forall a. (Bounded a, Integral a, Show a) => String -> Opt.ReadM a + bounded t = Opt.eitherReader $ \s -> do + i <- Read.readEither @Integer s + when (i < fromIntegral (minBound @a)) $ Left $ t <> " must not be less than " <> show (minBound @a) + when (i > fromIntegral (maxBound @a)) $ Left $ t <> " must not greater than " <> show (maxBound @a) + pure (fromIntegral i) + +data ShutdownConfig + = ShutdownConfig + { scIPC :: !(Maybe Fd) + , scOnSyncLimit :: !(Maybe ShutdownOn) + } + deriving (Eq, Show) + diff --git a/cardano-node/src/Cardano/Node/Orphans.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Orphans.hs similarity index 99% rename from cardano-node/src/Cardano/Node/Orphans.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Orphans.hs index beee7e97337..5c8112d24d2 100644 --- a/cardano-node/src/Cardano/Node/Orphans.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Orphans.hs @@ -11,7 +11,7 @@ import Cardano.Api () import Ouroboros.Consensus.Node import Ouroboros.Consensus.Node.Genesis (GenesisConfigFlags (..)) -import Ouroboros.Consensus.Storage.LedgerDB.Snapshots (Flag(..)) +import Ouroboros.Consensus.Storage.LedgerDB.Snapshots (Flag (..)) import Ouroboros.Network.SizeInBytes (SizeInBytes (..)) import Data.Aeson.Types diff --git a/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Parsing.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Parsing.hs new file mode 100644 index 00000000000..db8f434f899 --- /dev/null +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Parsing.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE StandaloneDeriving #-} + +module Cardano.Node.Protocol.Parsing + ( Protocol(..) + ) where + +import Cardano.Node.Orphans () + +import Control.DeepSeq (NFData) +import Data.Aeson +import GHC.Generics (Generic) + +import NoThunks.Class (NoThunks) + +data Protocol = CardanoProtocol + deriving (Eq, Generic) + +instance Show Protocol where + show CardanoProtocol = "Byron; Shelley" + +deriving instance NFData Protocol +deriving instance NoThunks Protocol + +instance FromJSON Protocol where + parseJSON = + withText "Protocol" $ \str -> case str of + "Cardano" -> pure CardanoProtocol + _ -> fail $ "Parsing of Protocol failed. " <> show str <> " is not a valid protocol" diff --git a/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Traits.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Traits.hs new file mode 100644 index 00000000000..6651499a564 --- /dev/null +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Protocol/Traits.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE UndecidableInstances #-} +module Cardano.Node.Protocol.Traits (ConvertTxId (..)) where + +import qualified Cardano.Crypto.Hash as Crypto +import qualified Cardano.Crypto.Hashing as Byron.Crypto +import qualified Cardano.Ledger.Hashes as Ledger +import qualified Cardano.Ledger.TxIn as Ledger +import Ouroboros.Consensus.Byron.Ledger.Block (ByronBlock) +import Ouroboros.Consensus.Byron.Ledger.Mempool (TxId (..)) +import Ouroboros.Consensus.HardFork.Combinator +import Ouroboros.Consensus.HardFork.Combinator.Embed.Unary +import Ouroboros.Consensus.Shelley.Ledger.Block (ShelleyBlock) +import Ouroboros.Consensus.Shelley.Ledger.Mempool (TxId (..)) +import Ouroboros.Consensus.Shelley.Node () +import Ouroboros.Consensus.TypeFamilyWrappers +import Ouroboros.Consensus.Util.Orphans () + +import Data.ByteString (ByteString) +import Data.SOP + +-- +-- * TxId -> ByteString projection +-- +-- | Convert a transaction ID to raw bytes. +class ConvertTxId blk where + txIdToRawBytes :: TxId (GenTx blk) -> ByteString + +instance ConvertTxId ByronBlock where + txIdToRawBytes (ByronTxId txId) = Byron.Crypto.abstractHashToBytes txId + txIdToRawBytes (ByronDlgId dlgId) = Byron.Crypto.abstractHashToBytes dlgId + txIdToRawBytes (ByronUpdateProposalId upId) = + Byron.Crypto.abstractHashToBytes upId + txIdToRawBytes (ByronUpdateVoteId voteId) = + Byron.Crypto.abstractHashToBytes voteId + +instance ConvertTxId (ShelleyBlock protocol c) where + txIdToRawBytes (ShelleyTxId txId) = + Crypto.hashToBytes . Ledger.extractHash . Ledger.unTxId $ txId + +instance All ConvertTxId xs + => ConvertTxId (HardForkBlock xs) where + txIdToRawBytes = + hcollapse + . hcmap (Proxy @ConvertTxId) (K . txIdToRawBytes . unwrapGenTxId) + . getOneEraGenTxId + . getHardForkGenTxId diff --git a/cardano-node/cardano-configuration/src/Cardano/Node/Startup/Types.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Startup/Types.hs new file mode 100644 index 00000000000..41b8c1a9b4a --- /dev/null +++ b/cardano-node/cardano-configuration/src/Cardano/Node/Startup/Types.hs @@ -0,0 +1,149 @@ +{-# LANGUAGE DerivingStrategies #-} + +module Cardano.Node.Startup.Types where + +import qualified Cardano.Api as Api + +import Cardano.Network.Diffusion (CardanoLocalRootConfig) +import Cardano.Node.Configuration.Socket +import Cardano.Node.Types (PeerSnapshotFile) +import Cardano.Slotting.Slot (SlotNo, WithOrigin) +import Ouroboros.Consensus.Cardano.Block +import Ouroboros.Consensus.Node.NetworkProtocolVersion (BlockNodeToClientVersion, + BlockNodeToNodeVersion) +import Ouroboros.Network.Magic (NetworkMagic (..)) +import Ouroboros.Network.NodeToClient (NodeToClientVersion) +import Ouroboros.Network.NodeToNode (DiffusionMode (..), NodeToNodeVersion, PeerAdvertise) +import Ouroboros.Network.PeerSelection.LedgerPeers.Type (UseLedgerPeers) +import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint) +import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency, WarmValency) + +import Prelude + +import Data.Map.Strict (Map) +import Data.Text (Text) +import Data.Time.Clock (NominalDiffTime, UTCTime) +import Data.Word (Word64) +import qualified Network.Socket as Socket + +data StartupTrace blk protocolInstantiationError = + -- | Log startup information. + -- + StartupInfo + [Socket.SockAddr] + -- ^ node-to-node addresses + (Maybe LocalSocketOrSocketInfo) + -- ^ node-to-client socket path + (Map NodeToNodeVersion (BlockNodeToNodeVersion blk)) + -- ^ supported node-to-node versions + (Map NodeToClientVersion (BlockNodeToClientVersion blk)) + -- ^ supported node-to-client versions + + -- | Log peer-to-peer diffusion mode + | StartupP2PInfo DiffusionMode + + | StartupTime UTCTime + + | StartupNetworkMagic NetworkMagic + + | StartupSocketConfigError SocketConfigError + + | StartupDBValidation + + -- | Log that the block forging is being updated + | BlockForgingUpdate EnabledBlockForging + + -- | Protocol instantiation error when updating block forging + | BlockForgingUpdateError protocolInstantiationError + + -- | Mismatched block type + | BlockForgingBlockTypeMismatch + Api.SomeBlockType -- ^ expected + Api.SomeBlockType -- ^ provided + + -- | Log that the network configuration is being updated. + -- + | NetworkConfigUpdate + + -- | Re-configuration of network config is not supported. + -- + | NetworkConfigUpdateUnsupported + + -- | Log network configuration update error. + -- + | NetworkConfigUpdateError Text + + -- | Log network configuration update warning. + -- + | NetworkConfigUpdateWarning Text + + -- | Log network configuration update info. + -- + | NetworkConfigUpdateInfo Text + + -- | Log peer-to-peer network configuration, either on startup or when its + -- updated. + -- + | NetworkConfig [(HotValency, WarmValency, Map RelayAccessPoint CardanoLocalRootConfig)] + (Map RelayAccessPoint PeerAdvertise) + UseLedgerPeers + (Maybe PeerSnapshotFile) + + -- | Warn when 'DisabledP2P' is set. + | NonP2PWarning + + -- | Warn when 'ExperimentalProtocolsEnabled' is set and affects + -- node-to-node protocol. + -- + | WarningDevelopmentNodeToNodeVersions [NodeToNodeVersion] + + -- | Warn when 'ExperimentalProtocolsEnabled' is set and affects + -- node-to-client protocol. + -- + | WarningDevelopmentNodeToClientVersions [NodeToClientVersion] + + | BICommon BasicInfoCommon + | BIShelley BasicInfoShelleyBased + | BIByron BasicInfoByron + | BINetwork BasicInfoNetwork + | LedgerPeerSnapshotLoaded (Either (UseLedgerPeers, WithOrigin SlotNo) (WithOrigin SlotNo)) + | MovedTopLevelOption String + +data EnabledBlockForging + = EnabledBlockForging + | DisabledBlockForging + | NotEffective + -- ^ one needs to send `SIGHUP` after consensus + -- initialised itself (especially after replying all + -- blocks). + deriving stock + (Eq, Show) + +data BasicInfoCommon = BasicInfoCommon { + biConfigPath :: FilePath + , biNetworkMagic :: NetworkMagic + , biProtocol :: Text + , biVersion :: Text + , biCommit :: Text + , biNodeStartTime :: UTCTime + } + +-- Fields of this type are made strict to be sure no path from GC roots to genesis is retained +data BasicInfoShelleyBased = BasicInfoShelleyBased { + bisEra :: !Text + , bisSystemStartTime :: !UTCTime + , bisSlotLength :: !NominalDiffTime + , bisEpochLength :: !Word64 + , bisSlotsPerKESPeriod :: !Word64 + } + +data BasicInfoByron = BasicInfoByron { + bibSystemStartTime :: UTCTime + , bibSlotLength :: NominalDiffTime + , bibEpochLength :: Word64 + } + +data BasicInfoNetwork = BasicInfoNetwork { + niAddresses :: [SocketOrSocketInfo] + , niDiffusionMode :: DiffusionMode + } diff --git a/cardano-node/src/Cardano/Node/Types.hs b/cardano-node/cardano-configuration/src/Cardano/Node/Types.hs similarity index 100% rename from cardano-node/src/Cardano/Node/Types.hs rename to cardano-node/cardano-configuration/src/Cardano/Node/Types.hs diff --git a/cardano-node/src/Cardano/Tracing/Config.hs b/cardano-node/cardano-configuration/src/Cardano/Tracing/Config.hs similarity index 100% rename from cardano-node/src/Cardano/Tracing/Config.hs rename to cardano-node/cardano-configuration/src/Cardano/Tracing/Config.hs diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Common.hs b/cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Common.hs similarity index 97% rename from cardano-node/src/Cardano/Tracing/OrphanInstances/Common.hs rename to cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Common.hs index 23ee74df1fb..7d5e9143110 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Common.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Common.hs @@ -45,7 +45,6 @@ import Cardano.BM.Stats import Cardano.BM.Tracing (HasPrivacyAnnotation (..), HasSeverityAnnotation (..), Severity (..), ToObject (..), Tracer (..), TracingVerbosity (..), Transformable (..)) -import Cardano.Node.Handlers.Shutdown () import Data.Aeson hiding (Value) import Data.Scientific (coefficient) diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Network.hs similarity index 99% rename from cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs rename to cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Network.hs index f77dc4092aa..db102a8dbab 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -27,7 +27,7 @@ import Cardano.Network.OrphanInstances () import qualified Cardano.Network.PeerSelection.ExtraRootPeers as Cardano.PublicRootPeers import qualified Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano -import Cardano.Node.Queries (ConvertTxId) +import Cardano.Node.Protocol.Traits (ConvertTxId) import Cardano.Tracing.OrphanInstances.Common import Cardano.Tracing.Render import Ouroboros.Consensus.Block (ConvertRawHash (..), Header, getHeader) diff --git a/cardano-node/src/Cardano/Tracing/Render.hs b/cardano-node/cardano-configuration/src/Cardano/Tracing/Render.hs similarity index 98% rename from cardano-node/src/Cardano/Tracing/Render.hs rename to cardano-node/cardano-configuration/src/Cardano/Tracing/Render.hs index 3e678f42ba5..864542ca1c3 100644 --- a/cardano-node/src/Cardano/Tracing/Render.hs +++ b/cardano-node/cardano-configuration/src/Cardano/Tracing/Render.hs @@ -23,7 +23,7 @@ module Cardano.Tracing.Render ) where import Cardano.BM.Tracing (TracingVerbosity (..)) -import Cardano.Node.Queries (ConvertTxId (..)) +import Cardano.Node.Protocol.Traits (ConvertTxId (..)) import Cardano.Slotting.Slot (EpochNo (..), SlotNo (..), WithOrigin (..)) import Ouroboros.Consensus.Block (BlockNo (..), ConvertRawHash (..), RealPoint (..)) import Ouroboros.Consensus.Block.Abstract (Point (..)) diff --git a/cardano-node/cardano-node.cabal b/cardano-node/cardano-node.cabal index c91a2bfa906..80ceb8c18e5 100644 --- a/cardano-node/cardano-node.cabal +++ b/cardano-node/cardano-node.cabal @@ -46,6 +46,83 @@ common maybe-unix if !os(windows) build-depends: unix +library cardano-configuration + import: project-config + visibility: public + + if flag(unexpected_thunks) + cpp-options: -DUNEXPECTED_THUNKS + + if os(linux) && flag(systemd) + cpp-options: -DSYSTEMD + build-depends: lobemo-scribe-systemd + , systemd >= 2.3.0 + + hs-source-dirs: cardano-configuration/src + + exposed-modules: Cardano.Node.Configuration.POM + Cardano.Node.Configuration.LedgerDB + Cardano.Node.Configuration.NodeAddress + Cardano.Node.Configuration.Socket + Cardano.Node.Configuration.TopologyP2P + Cardano.Node.Handlers.Shutdown.Config + Cardano.Node.Orphans + Cardano.Node.Protocol.Parsing + Cardano.Node.Protocol.Traits + Cardano.Node.Startup.Types + Cardano.Node.Types + Cardano.Tracing.Config + Cardano.Tracing.Render + Cardano.Tracing.OrphanInstances.Common + Cardano.Tracing.OrphanInstances.Network + + other-modules: Paths_cardano_node + autogen-modules: Paths_cardano_node + + build-depends: base + , aeson >= 2.1.0.0 + , base16-bytestring + , bytestring + , cardano-api ^>= 10.19 + , cardano-crypto-class ^>=2.2.3.2 + , cardano-crypto-wrapper + , cardano-ledger-core + , cardano-prelude + , cardano-slotting >= 0.2 + , containers + , contra-tracer + , deepseq + , directory + , dns + , filepath + , generic-data + , hashable + , io-classes:si-timers >= 1.5 + , iohk-monitoring ^>= 0.2 + , network-mux + , iproute + , network + , network-mux >= 0.8 + , nothunks + , optparse-applicative-fork >= 0.18.1 + , ouroboros-consensus ^>= 0.28 + , ouroboros-consensus-cardano ^>= 0.26 + , ouroboros-consensus-diffusion ^>= 0.24 + , ouroboros-network-api ^>= 0.16 + , ouroboros-network:{ouroboros-network, cardano-diffusion, orphan-instances} ^>= 0.22.4 + , ouroboros-network-framework ^>= 0.19.2 + , ouroboros-network-protocols ^>= 0.15 + , random + , safe-exceptions + , scientific + , sop-core + , text >= 2.0 + , time + , trace-dispatcher ^>= 2.11.0 + , transformers-except + , typed-protocols:{typed-protocols, stateful} >= 1.0 + , yaml + library import: project-config , maybe-unix @@ -61,14 +138,8 @@ library hs-source-dirs: src exposed-modules: Cardano.Node.Configuration.Logging - Cardano.Node.Configuration.NodeAddress - Cardano.Node.Configuration.POM - Cardano.Node.Configuration.LedgerDB - Cardano.Node.Configuration.Socket - Cardano.Node.Configuration.TopologyP2P Cardano.Node.Handlers.Shutdown Cardano.Node.Handlers.TopLevel - Cardano.Node.Orphans Cardano.Node.Parsers Cardano.Node.Pretty Cardano.Node.Protocol @@ -117,18 +188,13 @@ library Cardano.Node.Tracing.Tracers.Resources Cardano.Node.Tracing.Tracers.Shutdown Cardano.Node.Tracing.Tracers.Startup - Cardano.Node.Types - Cardano.Tracing.Config Cardano.Tracing.HasIssuer Cardano.Tracing.Metrics Cardano.Tracing.OrphanInstances.Byron - Cardano.Tracing.OrphanInstances.Common Cardano.Tracing.OrphanInstances.Consensus Cardano.Tracing.OrphanInstances.HardFork - Cardano.Tracing.OrphanInstances.Network Cardano.Tracing.OrphanInstances.Shelley Cardano.Tracing.Peer - Cardano.Tracing.Render Cardano.Tracing.Shutdown Cardano.Tracing.Startup Cardano.Tracing.Tracers @@ -155,6 +221,7 @@ library , cardano-ledger-core , cardano-ledger-dijkstra , cardano-ledger-shelley + , cardano-node:cardano-configuration , cardano-prelude , cardano-protocol-tpraos >= 1.4 , cardano-slotting >= 0.2 @@ -167,10 +234,8 @@ library , dns , ekg-wai , ekg-core - , filepath , formatting , generic-data - , hashable , hostname , io-classes:{io-classes,strict-stm,si-timers} >= 1.5 , iohk-monitoring ^>= 0.2 @@ -202,7 +267,6 @@ library , random , resource-registry , safe-exceptions - , scientific , sop-core -- avoid stm-2.5.2 https://github.com/haskell/stm/issues/76 , stm <2.5.2 || >=2.5.3 @@ -218,7 +282,6 @@ library , transformers , transformers-except , typed-protocols:{typed-protocols, stateful} >= 1.0 - , yaml executable cardano-node import: project-config @@ -237,8 +300,9 @@ executable cardano-node build-depends: base , cardano-crypto-class + , cardano-git-rev - , cardano-node + , cardano-node:{cardano-node,cardano-configuration} , optparse-applicative-fork , text diff --git a/cardano-node/src/Cardano/Node/Handlers/Shutdown.hs b/cardano-node/src/Cardano/Node/Handlers/Shutdown.hs index 55feeae1c7f..56e642f4bf7 100644 --- a/cardano-node/src/Cardano/Node/Handlers/Shutdown.hs +++ b/cardano-node/src/Cardano/Node/Handlers/Shutdown.hs @@ -9,17 +9,11 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TupleSections #-} -{-# LANGUAGE TypeApplications #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Node.Handlers.Shutdown - ( ShutdownOn (..) - , parseShutdownOn - - -- * Generalised shutdown handling - , ShutdownConfig (..) - , withShutdownHandling - + ( -- * Generalised shutdown handling + withShutdownHandling , ShutdownTrace (..) -- * Watch ChainDB for passing a configured slot sync limit threshold, @@ -29,6 +23,7 @@ module Cardano.Node.Handlers.Shutdown where +import Cardano.Node.Handlers.Shutdown.Config (ShutdownConfig (..), ShutdownOn (..)) import Cardano.Slotting.Slot (WithOrigin (..)) import Ouroboros.Consensus.Block (Header) import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB @@ -43,54 +38,16 @@ import Control.Monad (void, when) import Control.ResourceRegistry (ResourceRegistry) import "contra-tracer" Control.Tracer import Data.Aeson (FromJSON, ToJSON) -import Data.Foldable (asum) import Data.Text (Text, pack) import GHC.Generics (Generic) import qualified GHC.IO.Handle.FD as IO (fdToHandle) -import qualified Options.Applicative as Opt import System.Exit (ExitCode (..)) import qualified System.IO as IO import qualified System.IO.Error as IO import System.Posix.Types (Fd (Fd)) -import qualified Text.Read as Read import Generic.Data.Orphans () -data ShutdownOn - = ASlot !SlotNo - | ABlock !BlockNo - | NoShutdown - deriving (Generic, Eq, Show) - -deriving instance FromJSON ShutdownOn -deriving instance ToJSON ShutdownOn -deriving instance NFData ShutdownOn - - -parseShutdownOn :: Opt.Parser ShutdownOn -parseShutdownOn = asum - [ Opt.option (ASlot . SlotNo <$> bounded "SLOT") $ mconcat - [ Opt.long "shutdown-on-slot-synced" - , Opt.metavar "SLOT" - , Opt.help "Shut down the process after ChainDB is synced up to the specified slot" - , Opt.hidden - ] - , Opt.option (ABlock . BlockNo <$> bounded "BLOCK") $ mconcat - [ Opt.long "shutdown-on-block-synced" - , Opt.metavar "BLOCK" - , Opt.help "Shut down the process after ChainDB is synced up to the specified block" - , Opt.hidden - ] - , pure NoShutdown - ] - where - bounded :: forall a. (Bounded a, Integral a, Show a) => String -> Opt.ReadM a - bounded t = Opt.eitherReader $ \s -> do - i <- Read.readEither @Integer s - when (i < fromIntegral (minBound @a)) $ Left $ t <> " must not be less than " <> show (minBound @a) - when (i > fromIntegral (maxBound @a)) $ Left $ t <> " must not greater than " <> show (maxBound @a) - pure (fromIntegral i) - data ShutdownTrace = ShutdownRequested -- ^ Received shutdown request @@ -113,13 +70,6 @@ data AndWithOrigin deriving instance Eq AndWithOrigin -data ShutdownConfig - = ShutdownConfig - { scIPC :: !(Maybe Fd) - , scOnSyncLimit :: !(Maybe ShutdownOn) - } - deriving (Eq, Show) - -- | We provide an optional cross-platform method to politely request shut down. -- The parent process passes us the file descriptor number of the read end of a pipe, -- via the CLI with @--shutdown-ipc FD@ diff --git a/cardano-node/src/Cardano/Node/Parsers.hs b/cardano-node/src/Cardano/Node/Parsers.hs index 86773d3726c..93abcfb6ba1 100644 --- a/cardano-node/src/Cardano/Node/Parsers.hs +++ b/cardano-node/src/Cardano/Node/Parsers.hs @@ -15,19 +15,19 @@ module Cardano.Node.Parsers import Cardano.Logging.Types import qualified Cardano.Logging.Types as Net -import Cardano.Node.Configuration.NodeAddress ( - NodeHostIPv4Address (NodeHostIPv4Address), File (..), +import Cardano.Node.Configuration.NodeAddress (File (..), + NodeHostIPv4Address (NodeHostIPv4Address), NodeHostIPv6Address (NodeHostIPv6Address), PortNumber, SocketPath) import Cardano.Node.Configuration.POM (PartialNodeConfiguration (..), lastOption) import Cardano.Node.Configuration.Socket -import Cardano.Node.Handlers.Shutdown +import Cardano.Node.Handlers.Shutdown.Config (ShutdownConfig (..), parseShutdownOn) import Cardano.Node.Types import Cardano.Prelude (ConvertText (..)) import Ouroboros.Consensus.Ledger.SupportsMempool import Ouroboros.Consensus.Node -import Data.Foldable import Data.Char (isDigit) +import Data.Foldable import Data.Maybe (fromMaybe) import Data.Monoid (Last (..)) import Data.Text (Text) diff --git a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs index e4efea5ab0a..09f72b24fa3 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Cardano.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Cardano.hs @@ -25,13 +25,12 @@ import qualified Cardano.Node.Protocol.Alonzo as Alonzo import qualified Cardano.Node.Protocol.Byron as Byron import Cardano.Node.Protocol.Checkpoints import qualified Cardano.Node.Protocol.Conway as Conway -import qualified Cardano.Node.Protocol.Shelley as Shelley import qualified Cardano.Node.Protocol.Dijkstra as Dijkstra +import qualified Cardano.Node.Protocol.Shelley as Shelley import Cardano.Node.Protocol.Types import Cardano.Node.Types import Cardano.Tracing.OrphanInstances.Byron () import Cardano.Tracing.OrphanInstances.Shelley () -import Data.Function ((&)) import Ouroboros.Consensus.Cardano import qualified Ouroboros.Consensus.Cardano as Consensus import Ouroboros.Consensus.Cardano.Condense () @@ -40,6 +39,8 @@ import Ouroboros.Consensus.HardFork.Combinator.Condense () import Prelude +import Data.Function ((&)) + ------------------------------------------------------------------------------ -- Real Cardano protocol -- diff --git a/cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs b/cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs index 029d1decb04..cd7e0daa749 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs @@ -11,8 +11,8 @@ module Cardano.Node.Protocol.Checkpoints import Cardano.Api import qualified Cardano.Crypto.Hash.Class as Crypto -import Cardano.Protocol.Crypto (StandardCrypto) import Cardano.Node.Types +import Cardano.Protocol.Crypto (StandardCrypto) import Ouroboros.Consensus.Block import Ouroboros.Consensus.Cardano import Ouroboros.Consensus.Config (CheckpointsMap (..), emptyCheckpointsMap) diff --git a/cardano-node/src/Cardano/Node/Protocol/Dijkstra.hs b/cardano-node/src/Cardano/Node/Protocol/Dijkstra.hs index 7650371bc8a..fb671f36f25 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Dijkstra.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Dijkstra.hs @@ -24,8 +24,7 @@ import Cardano.Tracing.OrphanInstances.HardFork () import Cardano.Tracing.OrphanInstances.Shelley () import qualified Data.ByteString.Lazy as LB - -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe) readGenesisMaybe :: Maybe GenesisFile -> Maybe GenesisHash diff --git a/cardano-node/src/Cardano/Node/Protocol/Shelley.hs b/cardano-node/src/Cardano/Node/Protocol/Shelley.hs index 4cec1a0f8e3..c53ca5aa5d9 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Shelley.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Shelley.hs @@ -39,7 +39,8 @@ import Cardano.Protocol.Crypto (StandardCrypto) import Cardano.Tracing.OrphanInstances.HardFork () import Cardano.Tracing.OrphanInstances.Shelley () import qualified Ouroboros.Consensus.Cardano as Consensus -import Ouroboros.Consensus.Protocol.Praos.Common (PraosCanBeLeader (..), PraosCredentialsSource (..)) +import Ouroboros.Consensus.Protocol.Praos.Common (PraosCanBeLeader (..), + PraosCredentialsSource (..)) import Ouroboros.Consensus.Shelley.Node (Nonce (..), ProtocolParamsShelleyBased (..), ShelleyLeaderCredentials (..)) diff --git a/cardano-node/src/Cardano/Node/Protocol/Types.hs b/cardano-node/src/Cardano/Node/Protocol/Types.hs index 26220b9999f..e8517314f44 100644 --- a/cardano-node/src/Cardano/Node/Protocol/Types.hs +++ b/cardano-node/src/Cardano/Node/Protocol/Types.hs @@ -1,14 +1,9 @@ -{-# LANGUAGE ConstraintKinds #-} -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE StandaloneDeriving #-} module Cardano.Node.Protocol.Types - ( Protocol(..) - , SomeConsensusProtocol(..) + ( SomeConsensusProtocol(..) ) where import qualified Cardano.Api as Api @@ -17,28 +12,6 @@ import Cardano.Node.Orphans () import Cardano.Node.Queries (HasKESInfo, HasKESMetricsData) import Cardano.Node.TraceConstraints (TraceConstraints) -import Control.DeepSeq (NFData) -import Data.Aeson -import GHC.Generics (Generic) - -import NoThunks.Class (NoThunks) - - -data Protocol = CardanoProtocol - deriving (Eq, Generic) - -instance Show Protocol where - show CardanoProtocol = "Byron; Shelley" - -deriving instance NFData Protocol -deriving instance NoThunks Protocol - -instance FromJSON Protocol where - parseJSON = - withText "Protocol" $ \str -> case str of - "Cardano" -> pure CardanoProtocol - _ -> fail $ "Parsing of Protocol failed. " <> show str <> " is not a valid protocol" - data SomeConsensusProtocol where SomeConsensusProtocol :: forall blk. ( Api.Protocol IO blk diff --git a/cardano-node/src/Cardano/Node/Queries.hs b/cardano-node/src/Cardano/Node/Queries.hs index 7bb1c364f3e..5c5fb3389b1 100644 --- a/cardano-node/src/Cardano/Node/Queries.hs +++ b/cardano-node/src/Cardano/Node/Queries.hs @@ -11,9 +11,8 @@ {-# LANGUAGE UndecidableInstances #-} module Cardano.Node.Queries - ( ConvertTxId (..) - -- * KES - , MaxKESEvolutions (..) + ( -- * KES + MaxKESEvolutions (..) , OperationalCertStartKESPeriod (..) , GetKESInfo(..) , HasKESInfo(..) @@ -38,21 +37,16 @@ module Cardano.Node.Queries import qualified Cardano.Chain.Block as Byron import qualified Cardano.Chain.UTxO as Byron -import qualified Cardano.Crypto.Hash as Crypto -import qualified Cardano.Crypto.Hashing as Byron.Crypto import Cardano.Crypto.KES.Class (Period) import Cardano.Ledger.BaseTypes (StrictMaybe (..), fromSMaybe) import qualified Cardano.Ledger.Conway.State as Conway -import qualified Cardano.Ledger.Hashes as Ledger import qualified Cardano.Ledger.Shelley.LedgerState as Shelley import qualified Cardano.Ledger.State as Ledger -import qualified Cardano.Ledger.TxIn as Ledger import Cardano.Protocol.TPraos.OCert (KESPeriod (..)) import Ouroboros.Consensus.Block (ForgeStateInfo, ForgeStateUpdateError) import Ouroboros.Consensus.Byron.Ledger.Block (ByronBlock) import qualified Ouroboros.Consensus.Byron.Ledger.Block as Byron import qualified Ouroboros.Consensus.Byron.Ledger.Ledger as Byron -import Ouroboros.Consensus.Byron.Ledger.Mempool (TxId (..)) import qualified Ouroboros.Consensus.Cardano as Cardano import qualified Ouroboros.Consensus.Cardano.Block as Cardano import Ouroboros.Consensus.HardFork.Combinator @@ -65,7 +59,6 @@ import Ouroboros.Consensus.Node (NodeKernel (..)) import qualified Ouroboros.Consensus.Protocol.Ledger.HotKey as HotKey import qualified Ouroboros.Consensus.Shelley.Ledger as Shelley import Ouroboros.Consensus.Shelley.Ledger.Block (ShelleyBlock) -import Ouroboros.Consensus.Shelley.Ledger.Mempool (TxId (..)) import Ouroboros.Consensus.Shelley.Node () import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB import Ouroboros.Consensus.TypeFamilyWrappers @@ -75,7 +68,6 @@ import Ouroboros.Network.NodeToClient (LocalConnectionId) import Ouroboros.Network.NodeToNode (RemoteAddress, RemoteConnectionId) import Control.Monad.STM (atomically) -import Data.ByteString (ByteString) import Data.IORef (IORef, newIORef, readIORef, writeIORef) import qualified Data.Map.Strict as Map import Data.SOP @@ -83,33 +75,6 @@ import Data.SOP.Functors import Data.Word (Word64) import Lens.Micro ((^.)) --- --- * TxId -> ByteString projection --- --- | Convert a transaction ID to raw bytes. -class ConvertTxId blk where - txIdToRawBytes :: TxId (GenTx blk) -> ByteString - -instance ConvertTxId ByronBlock where - txIdToRawBytes (ByronTxId txId) = Byron.Crypto.abstractHashToBytes txId - txIdToRawBytes (ByronDlgId dlgId) = Byron.Crypto.abstractHashToBytes dlgId - txIdToRawBytes (ByronUpdateProposalId upId) = - Byron.Crypto.abstractHashToBytes upId - txIdToRawBytes (ByronUpdateVoteId voteId) = - Byron.Crypto.abstractHashToBytes voteId - -instance ConvertTxId (ShelleyBlock protocol c) where - txIdToRawBytes (ShelleyTxId txId) = - Crypto.hashToBytes . Ledger.extractHash . Ledger.unTxId $ txId - -instance All ConvertTxId xs - => ConvertTxId (HardForkBlock xs) where - txIdToRawBytes = - hcollapse - . hcmap (Proxy @ConvertTxId) (K . txIdToRawBytes . unwrapGenTxId) - . getOneEraGenTxId - . getHardForkGenTxId - -- -- * KES -- diff --git a/cardano-node/src/Cardano/Node/Run.hs b/cardano-node/src/Cardano/Node/Run.hs index d16f4003986..c8e4bb58d59 100644 --- a/cardano-node/src/Cardano/Node/Run.hs +++ b/cardano-node/src/Cardano/Node/Run.hs @@ -318,7 +318,7 @@ handleNodeWithTracers cmdPc nc p@(SomeConsensusProtocol blockType runP) = do -- by 'cardano-tracer' service as a datapoint. It can be extended in the future. traceNodeStartupInfo :: Tracer IO NodeStartupInfo - -> [StartupTrace blk] + -> [StartupTrace blk ProtocolInstantiationError] -> IO () traceNodeStartupInfo t startupTrace = forM_ startupTrace $ \case @@ -633,7 +633,7 @@ handleSimpleNode blockType runP tracers nc onKernel = do -- | The P2P SIGHUP handler can update block forging & reconfigure network topology. -- -installSigHUPHandler :: Tracer IO (StartupTrace blk) +installSigHUPHandler :: Tracer IO (StartupTrace blk ProtocolInstantiationError) -> Tracer IO KESAgentClientTrace -> Api.BlockType blk -> NodeConfiguration @@ -668,7 +668,7 @@ installSigHUPHandler startupTracer kesAgentTracer blockType nc nodeKernel localR #ifdef UNIX -updateBlockForging :: Tracer IO (StartupTrace blk) +updateBlockForging :: Tracer IO (StartupTrace blk ProtocolInstantiationError) -> Tracer IO KESAgentClientTrace -> Api.BlockType blk -> NodeKernel IO RemoteAddress (ConnectionId LocalAddress) blk @@ -720,7 +720,7 @@ updateBlockForging startupTracer kesAgentTracer blockType nodeKernel nc = do wasFileRemovedFromScope (CardanoProtocolInstantiationError _) = Nothing -updateTopologyConfiguration :: Tracer IO (StartupTrace blk) +updateTopologyConfiguration :: Tracer IO (StartupTrace blk ProtocolInstantiationError) -> NodeConfiguration -> StrictTVar IO [(HotValency, WarmValency, Map RelayAccessPoint (LocalRootConfig PeerTrustable))] -> StrictTVar IO (Map RelayAccessPoint PeerAdvertise) @@ -752,7 +752,7 @@ updateTopologyConfiguration startupTracer nc localRootsVar publicRootsVar useLed writeTVar ledgerPeerSnapshotPathVar ntPeerSnapshotPath #endif -updateLedgerPeerSnapshot :: Tracer IO (StartupTrace blk) +updateLedgerPeerSnapshot :: Tracer IO (StartupTrace blk ProtocolInstantiationError) -> NodeConfiguration -> STM IO (Maybe PeerSnapshotFile) -> STM IO UseLedgerPeers diff --git a/cardano-node/src/Cardano/Node/Startup.hs b/cardano-node/src/Cardano/Node/Startup.hs index ad291082a41..92bc7556bf5 100644 --- a/cardano-node/src/Cardano/Node/Startup.hs +++ b/cardano-node/src/Cardano/Node/Startup.hs @@ -11,6 +11,7 @@ module Cardano.Node.Startup ( module Cardano.Node.Startup + , module Cardano.Node.Startup.Types , module Cardano.Logging.Types.NodeInfo , module Cardano.Logging.Types.NodeStartupInfo ) where @@ -22,13 +23,10 @@ import Cardano.Ledger.Shelley.Genesis (sgSystemStart) import Cardano.Logging import Cardano.Logging.Types.NodeInfo (NodeInfo (..)) import Cardano.Logging.Types.NodeStartupInfo (NodeStartupInfo (..)) -import Cardano.Network.Diffusion (CardanoLocalRootConfig) import Cardano.Node.Configuration.POM (NodeConfiguration (..), ncProtocol) import Cardano.Node.Configuration.Socket -import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Protocol.Types (SomeConsensusProtocol (..)) -import Cardano.Node.Types (PeerSnapshotFile) -import Cardano.Slotting.Slot (SlotNo, WithOrigin) +import Cardano.Node.Startup.Types import qualified Ouroboros.Consensus.BlockchainTime.WallClock.Types as WCT import Ouroboros.Consensus.Cardano.Block import Ouroboros.Consensus.Cardano.CanHardFork (shelleyLedgerConfig) @@ -36,151 +34,18 @@ import Ouroboros.Consensus.Config import Ouroboros.Consensus.HardFork.Combinator.Degenerate import Ouroboros.Consensus.Ledger.Query (getSystemStart) import Ouroboros.Consensus.Node (pInfoConfig) -import Ouroboros.Consensus.Node.NetworkProtocolVersion (BlockNodeToClientVersion, - BlockNodeToNodeVersion) import Ouroboros.Consensus.Shelley.Ledger.Ledger (shelleyLedgerGenesis) -import Ouroboros.Network.Magic (NetworkMagic (..)) -import Ouroboros.Network.NodeToClient (NodeToClientVersion) -import Ouroboros.Network.NodeToNode (DiffusionMode (..), NodeToNodeVersion, PeerAdvertise) -import Ouroboros.Network.PeerSelection.LedgerPeers.Type (UseLedgerPeers) -import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint) -import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency, WarmValency) import Prelude -import Data.Map.Strict (Map) import Data.Monoid (Last (..)) -import Data.Text (Text, pack) -import Data.Time.Clock (NominalDiffTime, UTCTime) +import Data.Text (pack) +import Data.Time.Clock (UTCTime) import Data.Version (showVersion) -import Data.Word (Word64) import Network.HostName (getHostName) -import qualified Network.Socket as Socket import Paths_cardano_node (version) -data StartupTrace blk = - -- | Log startup information. - -- - StartupInfo - [Socket.SockAddr] - -- ^ node-to-node addresses - (Maybe LocalSocketOrSocketInfo) - -- ^ node-to-client socket path - (Map NodeToNodeVersion (BlockNodeToNodeVersion blk)) - -- ^ supported node-to-node versions - (Map NodeToClientVersion (BlockNodeToClientVersion blk)) - -- ^ supported node-to-client versions - - -- | Log peer-to-peer diffusion mode - | StartupP2PInfo DiffusionMode - - | StartupTime UTCTime - - | StartupNetworkMagic NetworkMagic - - | StartupSocketConfigError SocketConfigError - - | StartupDBValidation - - -- | Log that the block forging is being updated - | BlockForgingUpdate EnabledBlockForging - - -- | Protocol instantiation error when updating block forging - | BlockForgingUpdateError ProtocolInstantiationError - - -- | Mismatched block type - | BlockForgingBlockTypeMismatch - Api.SomeBlockType -- ^ expected - Api.SomeBlockType -- ^ provided - - -- | Log that the network configuration is being updated. - -- - | NetworkConfigUpdate - - -- | Re-configuration of network config is not supported. - -- - | NetworkConfigUpdateUnsupported - - -- | Log network configuration update error. - -- - | NetworkConfigUpdateError Text - - -- | Log network configuration update warning. - -- - | NetworkConfigUpdateWarning Text - - -- | Log network configuration update info. - -- - | NetworkConfigUpdateInfo Text - - -- | Log peer-to-peer network configuration, either on startup or when its - -- updated. - -- - | NetworkConfig [(HotValency, WarmValency, Map RelayAccessPoint CardanoLocalRootConfig)] - (Map RelayAccessPoint PeerAdvertise) - UseLedgerPeers - (Maybe PeerSnapshotFile) - - -- | Warn when 'DisabledP2P' is set. - | NonP2PWarning - - -- | Warn when 'ExperimentalProtocolsEnabled' is set and affects - -- node-to-node protocol. - -- - | WarningDevelopmentNodeToNodeVersions [NodeToNodeVersion] - - -- | Warn when 'ExperimentalProtocolsEnabled' is set and affects - -- node-to-client protocol. - -- - | WarningDevelopmentNodeToClientVersions [NodeToClientVersion] - - | BICommon BasicInfoCommon - | BIShelley BasicInfoShelleyBased - | BIByron BasicInfoByron - | BINetwork BasicInfoNetwork - | LedgerPeerSnapshotLoaded (Either (UseLedgerPeers, WithOrigin SlotNo) (WithOrigin SlotNo)) - | MovedTopLevelOption String - -data EnabledBlockForging - = EnabledBlockForging - | DisabledBlockForging - | NotEffective - -- ^ one needs to send `SIGHUP` after consensus - -- initialised itself (especially after replying all - -- blocks). - deriving stock - (Eq, Show) - -data BasicInfoCommon = BasicInfoCommon { - biConfigPath :: FilePath - , biNetworkMagic :: NetworkMagic - , biProtocol :: Text - , biVersion :: Text - , biCommit :: Text - , biNodeStartTime :: UTCTime - } - --- Fields of this type are made strict to be sure no path from GC roots to genesis is retained -data BasicInfoShelleyBased = BasicInfoShelleyBased { - bisEra :: !Text - , bisSystemStartTime :: !UTCTime - , bisSlotLength :: !NominalDiffTime - , bisEpochLength :: !Word64 - , bisSlotsPerKESPeriod :: !Word64 - } - -data BasicInfoByron = BasicInfoByron { - bibSystemStartTime :: UTCTime - , bibSlotLength :: NominalDiffTime - , bibEpochLength :: Word64 - } - -data BasicInfoNetwork = BasicInfoNetwork { - niAddresses :: [SocketOrSocketInfo] - , niDiffusionMode :: DiffusionMode - } - -- | Prepare basic info about the node. This info will be sent to 'cardano-tracer'. prepareNodeInfo :: NodeConfiguration diff --git a/cardano-node/src/Cardano/Node/TraceConstraints.hs b/cardano-node/src/Cardano/Node/TraceConstraints.hs index ec4b9f61034..855fb4f4795 100644 --- a/cardano-node/src/Cardano/Node/TraceConstraints.hs +++ b/cardano-node/src/Cardano/Node/TraceConstraints.hs @@ -10,8 +10,9 @@ import Cardano.BM.Tracing (ToObject) import Cardano.Ledger.Credential import Cardano.Ledger.Keys import Cardano.Logging (LogFormatting) -import Cardano.Node.Queries (ConvertTxId, GetKESInfo (..), HasKESInfo (..), - HasKESMetricsData (..), LedgerQueries) +import Cardano.Node.Protocol.Traits (ConvertTxId) +import Cardano.Node.Queries (GetKESInfo (..), HasKESInfo (..), HasKESMetricsData (..), + LedgerQueries) import Cardano.Protocol.Crypto (StandardCrypto) import Cardano.Tracing.HasIssuer (HasIssuer) import Ouroboros.Consensus.Block (BlockProtocol, CannotForge, ForgeStateUpdateError, diff --git a/cardano-node/src/Cardano/Node/Tracing.hs b/cardano-node/src/Cardano/Node/Tracing.hs index a79a3620cdf..acc25e1a37b 100644 --- a/cardano-node/src/Cardano/Node/Tracing.hs +++ b/cardano-node/src/Cardano/Node/Tracing.hs @@ -10,7 +10,9 @@ module Cardano.Node.Tracing ) where import Cardano.Logging.Resources +import qualified Cardano.Network.Diffusion as Cardano.Diffusion import Cardano.Node.Handlers.Shutdown (ShutdownTrace) +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Startup (NodeInfo, NodeStartupInfo, StartupTrace (..)) import Cardano.Node.Tracing.StateRep (NodeState) import Cardano.Node.Tracing.Tracers.ConsensusStartupException @@ -23,7 +25,6 @@ import qualified Ouroboros.Consensus.Network.NodeToNode as NodeToNode import qualified Ouroboros.Consensus.Node.Tracers as Consensus import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB import Ouroboros.Network.ConnectionId -import qualified Cardano.Network.Diffusion as Cardano.Diffusion import Prelude (IO) @@ -43,7 +44,7 @@ data Tracers peer localPeer blk m = Tracers -- | Diffusion tracers , diffusionTracers :: !(Cardano.Diffusion.CardanoTracers m) , churnModeTracer :: !(Tracer IO Cardano.Diffusion.TraceChurnMode) - , startupTracer :: !(Tracer IO (StartupTrace blk)) + , startupTracer :: !(Tracer IO (StartupTrace blk ProtocolInstantiationError)) , shutdownTracer :: !(Tracer IO ShutdownTrace) , nodeInfoTracer :: !(Tracer IO NodeInfo) , nodeVersionTracer :: !(Tracer IO NodeVersionTrace) diff --git a/cardano-node/src/Cardano/Node/Tracing/Consistency.hs b/cardano-node/src/Cardano/Node/Tracing/Consistency.hs index 7e1343284d9..ec129437c6d 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Consistency.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Consistency.hs @@ -16,8 +16,12 @@ module Cardano.Node.Tracing.Consistency import Cardano.Logging import Cardano.Logging.Resources import Cardano.Logging.Resources.Types () +import qualified Cardano.Network.PeerSelection.ExtraRootPeers as Cardano.PublicRootPeers +import qualified Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano +import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable) import Cardano.Node.Handlers.Shutdown (ShutdownTrace) +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Startup import Cardano.Node.Tracing.DefaultTraceConfig (defaultCardanoConfig) import Cardano.Node.Tracing.Documentation (docTracersFirstPhase) @@ -35,9 +39,6 @@ import Cardano.Node.Tracing.Tracers.P2P () import Cardano.Node.Tracing.Tracers.Peer import Cardano.Node.Tracing.Tracers.Shutdown () import Cardano.Node.Tracing.Tracers.Startup () -import qualified Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano -import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano -import qualified Cardano.Network.PeerSelection.ExtraRootPeers as Cardano.PublicRootPeers import Ouroboros.Consensus.Block.SupportsSanityCheck (SanityCheckIssue) import Ouroboros.Consensus.BlockchainTime.WallClock.Types (RelativeTime) import Ouroboros.Consensus.BlockchainTime.WallClock.Util (TraceBlockchainTimeEvent (..)) @@ -76,9 +77,9 @@ import Ouroboros.Network.PeerSelection.Governor (DebugPeerSelection (. PeerSelectionCounters, TracePeerSelection (..)) import Ouroboros.Network.PeerSelection.LedgerPeers (TraceLedgerPeers) import Ouroboros.Network.PeerSelection.PeerStateActions (PeerSelectionActionsTrace (..)) +import Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions (DNSTrace (..)) import Ouroboros.Network.PeerSelection.RootPeersDNS.LocalRootPeers (TraceLocalRootPeers (..)) -import Ouroboros.Network.PeerSelection.RootPeersDNS.DNSActions (DNSTrace (..)) import Ouroboros.Network.PeerSelection.RootPeersDNS.PublicRootPeers (TracePublicRootPeers (..)) import Ouroboros.Network.Protocol.BlockFetch.Type (BlockFetch) @@ -138,7 +139,7 @@ getAllNamespaces = ledgerMetricsNS = map nsGetTuple (allNamespaces :: [Namespace LedgerMetrics]) startupNS = map (nsGetTuple . nsReplacePrefix ["Startup"]) - (allNamespaces :: [Namespace (StartupTrace blk)]) + (allNamespaces :: [Namespace (StartupTrace blk ProtocolInstantiationError)]) shutdownNS = map (nsGetTuple . nsReplacePrefix ["Shutdown"]) (allNamespaces :: [Namespace ShutdownTrace]) nodeVersionNS = map (nsGetTuple . nsReplacePrefix ["Version"]) diff --git a/cardano-node/src/Cardano/Node/Tracing/Documentation.hs b/cardano-node/src/Cardano/Node/Tracing/Documentation.hs index 2002b7c00f2..0a745389d85 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Documentation.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Documentation.hs @@ -24,8 +24,12 @@ import Cardano.Git.Rev (gitRev) import Cardano.Logging as Logging import Cardano.Logging.Resources import Cardano.Logging.Resources.Types () +import qualified Cardano.Network.PeerSelection.ExtraRootPeers as Cardano.PublicRootPeers +import qualified Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano +import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable (..)) import Cardano.Node.Handlers.Shutdown (ShutdownTrace) +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Startup import Cardano.Node.TraceConstraints import Cardano.Node.Tracing.DefaultTraceConfig (defaultCardanoConfig) @@ -48,9 +52,6 @@ import Cardano.Node.Tracing.Tracers.P2P () import Cardano.Node.Tracing.Tracers.Peer import Cardano.Node.Tracing.Tracers.Shutdown () import Cardano.Node.Tracing.Tracers.Startup () -import qualified Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano -import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano -import qualified Cardano.Network.PeerSelection.ExtraRootPeers as Cardano.PublicRootPeers import Cardano.Tracing.OrphanInstances.Network () import Ouroboros.Consensus.Block.SupportsSanityCheck (SanityCheckIssue) import Ouroboros.Consensus.BlockchainTime.WallClock.Types (RelativeTime) @@ -255,7 +256,7 @@ docTracersFirstPhase condConfigFileName = do trBase trForward mbTrEKG ["Startup"] configureTracers configReflection trConfig [startupTr] - startupTrDoc <- documentTracer (startupTr :: Logging.Trace IO (StartupTrace blk)) + startupTrDoc <- documentTracer (startupTr :: Logging.Trace IO (StartupTrace blk ProtocolInstantiationError)) shutdownTr <- mkCardanoTracer trBase trForward mbTrEKG diff --git a/cardano-node/src/Cardano/Node/Tracing/Era/Byron.hs b/cardano-node/src/Cardano/Node/Tracing/Era/Byron.hs index 95e290c8553..df831ee9a98 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Era/Byron.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Era/Byron.hs @@ -17,7 +17,6 @@ import Cardano.Api (textShow) import Cardano.Chain.Block (ABlockOrBoundaryHdr (..), AHeader (..), ChainValidationError (..), delegationCertificate) -import Ouroboros.Consensus.Protocol.PBFT (PBft, PBftTiebreakerView(..)) import Cardano.Chain.Byron.API (ApplyMempoolPayloadErr (..)) import Cardano.Chain.Delegation (delegateVK) import Cardano.Crypto.Signing (VerificationKey) @@ -30,6 +29,7 @@ import Ouroboros.Consensus.Byron.Ledger (ByronBlock (..), import Ouroboros.Consensus.Byron.Ledger.Inspect (ByronLedgerUpdate (..), ProtocolUpdate (..), UpdateState (..)) import Ouroboros.Consensus.Ledger.SupportsMempool (GenTx, txId) +import Ouroboros.Consensus.Protocol.PBFT (PBft, PBftTiebreakerView (..)) import Ouroboros.Consensus.Util.Condense (condense) import Ouroboros.Network.Block (blockHash, blockNo, blockSlot) diff --git a/cardano-node/src/Cardano/Node/Tracing/Era/HardFork.hs b/cardano-node/src/Cardano/Node/Tracing/Era/HardFork.hs index 7e528ba3c2f..8c4c3fe3681 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Era/HardFork.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Era/HardFork.hs @@ -23,10 +23,10 @@ import Ouroboros.Consensus.Block (BlockProtocol, CannotForge, ForgeSta import Ouroboros.Consensus.BlockchainTime (getSlotLength) import Ouroboros.Consensus.Cardano.Condense () import Ouroboros.Consensus.HardFork.Combinator -import Ouroboros.Consensus.HardFork.Combinator.AcrossEras (EraMismatch (..), OneEraTiebreakerView (..), +import Ouroboros.Consensus.HardFork.Combinator.AcrossEras (EraMismatch (..), OneEraCannotForge (..), OneEraEnvelopeErr (..), OneEraForgeStateInfo (..), OneEraForgeStateUpdateError (..), OneEraLedgerError (..), - OneEraLedgerUpdate (..), OneEraLedgerWarning (..), + OneEraLedgerUpdate (..), OneEraLedgerWarning (..), OneEraTiebreakerView (..), OneEraValidationErr (..), mkEraMismatch) import Ouroboros.Consensus.HardFork.Combinator.Condense () import Ouroboros.Consensus.HardFork.History @@ -36,7 +36,8 @@ import Ouroboros.Consensus.HeaderValidation (OtherHeaderEnvelopeError) import Ouroboros.Consensus.Ledger.Abstract (LedgerError) import Ouroboros.Consensus.Ledger.Inspect (LedgerUpdate, LedgerWarning) import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr) -import Ouroboros.Consensus.Protocol.Abstract (ValidationErr, TiebreakerView, SelectView(..)) +import Ouroboros.Consensus.Protocol.Abstract (SelectView (..), TiebreakerView, + ValidationErr) import Ouroboros.Consensus.TypeFamilyWrappers import Ouroboros.Consensus.Util.Condense (Condense (..)) diff --git a/cardano-node/src/Cardano/Node/Tracing/NodeInfo.hs b/cardano-node/src/Cardano/Node/Tracing/NodeInfo.hs index 0c071af4066..a574457e4d5 100644 --- a/cardano-node/src/Cardano/Node/Tracing/NodeInfo.hs +++ b/cardano-node/src/Cardano/Node/Tracing/NodeInfo.hs @@ -4,8 +4,8 @@ module Cardano.Node.Tracing.NodeInfo ( NodeInfo (..) ) where +import Cardano.Logging.Types (MetaTrace (..), Namespace (..), SeverityS (..)) import Cardano.Logging.Types.NodeInfo (NodeInfo (..)) -import Cardano.Logging.Types (MetaTrace(..), Namespace (..), SeverityS (..)) instance MetaTrace NodeInfo where namespaceFor NodeInfo {} = diff --git a/cardano-node/src/Cardano/Node/Tracing/NodeStartupInfo.hs b/cardano-node/src/Cardano/Node/Tracing/NodeStartupInfo.hs index 1f1aad0b35c..fe016b7f84e 100644 --- a/cardano-node/src/Cardano/Node/Tracing/NodeStartupInfo.hs +++ b/cardano-node/src/Cardano/Node/Tracing/NodeStartupInfo.hs @@ -4,8 +4,8 @@ module Cardano.Node.Tracing.NodeStartupInfo ( NodeStartupInfo (..) ) where +import Cardano.Logging.Types (MetaTrace (..), Namespace (..), SeverityS (..)) import Cardano.Logging.Types.NodeStartupInfo (NodeStartupInfo (..)) -import Cardano.Logging.Types (MetaTrace(..), Namespace (..), SeverityS (..)) instance MetaTrace NodeStartupInfo where namespaceFor NodeStartupInfo {} = diff --git a/cardano-node/src/Cardano/Node/Tracing/Peers.hs b/cardano-node/src/Cardano/Node/Tracing/Peers.hs index 5afe6810fc6..dbb55c9da5d 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Peers.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Peers.hs @@ -6,8 +6,8 @@ module Cardano.Node.Tracing.Peers ) where import Cardano.Logging +import Cardano.Logging.Types.NodePeers (NodePeers (..)) import Cardano.Node.Tracing.Tracers.Peer (PeerT, ppPeer) -import Cardano.Logging.Types.NodePeers (NodePeers(..)) instance MetaTrace NodePeers where namespaceFor NodePeers {} = diff --git a/cardano-node/src/Cardano/Node/Tracing/Render.hs b/cardano-node/src/Cardano/Node/Tracing/Render.hs index 0c84e550b4b..6e8cbad424e 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Render.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Render.hs @@ -40,7 +40,7 @@ import Cardano.Ledger.Conway.Scripts (ConwayPlutusPurpose (..)) import qualified Cardano.Ledger.Core as Ledger import qualified Cardano.Ledger.Hashes as Hashes import Cardano.Logging -import Cardano.Node.Queries (ConvertTxId (..)) +import Cardano.Node.Protocol.Traits (ConvertTxId (..)) import Cardano.Slotting.Slot (SlotNo (..), WithOrigin (..)) import Ouroboros.Consensus.Block (BlockNo (..), ConvertRawHash (..), RealPoint (..)) import Ouroboros.Consensus.Block.Abstract (Point (..)) diff --git a/cardano-node/src/Cardano/Node/Tracing/StateRep.hs b/cardano-node/src/Cardano/Node/Tracing/StateRep.hs index 0a4e12bea43..4323534ede7 100644 --- a/cardano-node/src/Cardano/Node/Tracing/StateRep.hs +++ b/cardano-node/src/Cardano/Node/Tracing/StateRep.hs @@ -23,6 +23,7 @@ import Cardano.Api (textShow) import Cardano.Logging import Cardano.Node.Handlers.Shutdown (ShutdownTrace) +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Protocol.Types (SomeConsensusProtocol (..)) import qualified Cardano.Node.Startup as Startup import Cardano.Slotting.Slot (EpochNo, SlotNo (..), WithOrigin, withOrigin) @@ -289,7 +290,7 @@ traceNodeStateChainDB _scp tr ev = traceNodeStateStartup :: Trace IO NodeState - -> Startup.StartupTrace blk + -> Startup.StartupTrace blk ProtocolInstantiationError -> IO () traceNodeStateStartup tr ev = case ev of diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs index 59adf4bb7b4..223a738d605 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs @@ -13,7 +13,7 @@ module Cardano.Node.Tracing.Tracers.NodeToNode ) where import Cardano.Logging -import Cardano.Node.Queries (ConvertTxId) +import Cardano.Node.Protocol.Traits (ConvertTxId) import Cardano.Node.Tracing.Render (renderHeaderHash, renderTxIdForDetails) import Ouroboros.Consensus.Block (ConvertRawHash, GetHeader, StandardHash, getHeader) import Ouroboros.Consensus.Ledger.SupportsMempool (GenTx, HasTxId, HasTxs, @@ -23,16 +23,16 @@ import Ouroboros.Network.Block (Point, Serialised (..), blockHash) import Ouroboros.Network.DeltaQ (GSV (..), PeerGSV (..)) import Ouroboros.Network.KeepAlive (TraceKeepAliveClient (..)) import Ouroboros.Network.Protocol.BlockFetch.Type (BlockFetch (..), Message (..)) -import qualified Ouroboros.Network.Protocol.TxSubmission2.Type as STX import qualified Ouroboros.Network.Protocol.KeepAlive.Type as KA import qualified Ouroboros.Network.Protocol.PeerSharing.Type as PS +import qualified Ouroboros.Network.Protocol.TxSubmission2.Type as STX import Ouroboros.Network.SizeInBytes (SizeInBytes (..)) import Control.Monad.Class.MonadTime.SI (Time (..)) import Data.Aeson (ToJSON (..), Value (String), (.=)) import Data.Proxy (Proxy (..)) -import Data.Time (DiffTime) import Data.Text (pack) +import Data.Time (DiffTime) import Network.TypedProtocol.Codec (AnyMessage (AnyMessageAndAgency)) -------------------------------------------------------------------------------- diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs index 0ec1b4cdfc3..5054673c69f 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs @@ -24,7 +24,7 @@ import Cardano.Ledger.Shelley.API as SL import Cardano.Logging import Cardano.Node.Configuration.POM (NodeConfiguration, ncProtocol) import Cardano.Node.Configuration.Socket -import Cardano.Node.Protocol (SomeConsensusProtocol (..)) +import Cardano.Node.Protocol (ProtocolInstantiationError, SomeConsensusProtocol (..)) import Cardano.Node.Startup import Cardano.Node.Types (PeerSnapshotFile (..)) import Cardano.Slotting.Slot (EpochSize (..)) @@ -63,7 +63,7 @@ getStartupInfo :: NodeConfiguration -> SomeConsensusProtocol -> FilePath - -> IO [StartupTrace blk] + -> IO [StartupTrace blk ProtocolInstantiationError] getStartupInfo nc (SomeConsensusProtocol whichP pForInfo) fp = do nodeStartTime <- getCurrentTime let cfg = pInfoConfig $ fst $ Api.protocolInfo @IO pForInfo @@ -147,7 +147,7 @@ instance ( Show (BlockNodeToNodeVersion blk) , ToJSON (BlockNodeToNodeVersion blk) , ToJSON (BlockNodeToClientVersion blk) ) - => LogFormatting (StartupTrace blk) where + => LogFormatting (StartupTrace blk ProtocolInstantiationError) where forHuman = ppStartupInfoTrace forMachine dtal (StartupInfo addresses @@ -309,7 +309,7 @@ instance ( Show (BlockNodeToNodeVersion blk) ] asMetrics _ = [] -instance MetaTrace (StartupTrace blk) where +instance MetaTrace (StartupTrace blk ProtocolInstantiationError) where namespaceFor StartupInfo {} = Namespace [] ["Info"] namespaceFor StartupP2PInfo {} = @@ -497,7 +497,7 @@ nodeToNodeVersionToInt = \case -- | Pretty print 'StartupInfoTrace' -- -ppStartupInfoTrace :: StartupTrace blk -> Text +ppStartupInfoTrace :: StartupTrace blk ProtocolInstantiationError -> Text ppStartupInfoTrace (StartupInfo addresses localSocket supportedNodeToNodeVersions diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Byron.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Byron.hs index b0c53901553..914617e76fb 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Byron.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Byron.hs @@ -12,8 +12,6 @@ module Cardano.Tracing.OrphanInstances.Byron () where import Cardano.Api (textShow) -import Ouroboros.Consensus.Protocol.PBFT (PBftTiebreakerView(..)) -import Ouroboros.Consensus.Block.EBB (fromIsEBB) import Cardano.Chain.Block (ABlockOrBoundaryHdr (..), AHeader (..), ChainValidationError (..), delegationCertificate) import Cardano.Chain.Byron.API (ApplyMempoolPayloadErr (..)) @@ -23,12 +21,14 @@ import Cardano.Tracing.OrphanInstances.Common import Cardano.Tracing.OrphanInstances.Consensus () import Cardano.Tracing.Render (renderTxId) import Ouroboros.Consensus.Block (Header) +import Ouroboros.Consensus.Block.EBB (fromIsEBB) import Ouroboros.Consensus.Byron.Ledger (ByronBlock (..), ByronNodeToClientVersion (..), ByronNodeToNodeVersion (..), ByronOtherHeaderEnvelopeError (..), TxId (..), byronHeaderRaw) import Ouroboros.Consensus.Byron.Ledger.Inspect (ByronLedgerUpdate (..), ProtocolUpdate (..), UpdateState (..)) import Ouroboros.Consensus.Ledger.SupportsMempool (GenTx, txId) +import Ouroboros.Consensus.Protocol.PBFT (PBftTiebreakerView (..)) import Ouroboros.Consensus.Util.Condense (condense) import Ouroboros.Network.Block (blockHash, blockNo, blockSlot) diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs index e22cf83c3b7..dbd409b7f6d 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Consensus.hs @@ -19,6 +19,7 @@ module Cardano.Tracing.OrphanInstances.Consensus () where +import qualified Cardano.KESAgent.Processes.ServiceClient as Agent import Cardano.Node.Tracing.Tracers.ConsensusStartupException (ConsensusStartupException (..)) import Cardano.Prelude (Typeable, maximumDef) @@ -81,8 +82,8 @@ import Ouroboros.Network.BlockFetch.ClientState (TraceLabelPeer (..)) import Ouroboros.Network.Point (withOrigin) import Ouroboros.Network.SizeInBytes (SizeInBytes (..)) -import Control.Monad (guard) import Control.Exception +import Control.Monad (guard) import Data.Aeson (Value (..)) import qualified Data.Aeson as Aeson import Data.Foldable (Foldable (..)) @@ -95,7 +96,6 @@ import Data.Word (Word32) import GHC.Generics (Generic) import Network.TypedProtocol.Core import Numeric (showFFloat) -import qualified Cardano.KESAgent.Processes.ServiceClient as Agent {- HLINT ignore "Use const" -} diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/HardFork.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/HardFork.hs index 8c75604c5cb..105ccf2faec 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/HardFork.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/HardFork.hs @@ -28,14 +28,13 @@ import Ouroboros.Consensus.Cardano.Condense () import Ouroboros.Consensus.HardFork.Combinator import Ouroboros.Consensus.HardFork.Combinator.AcrossEras (EraMismatch (..), OneEraCannotForge (..), OneEraEnvelopeErr (..), OneEraForgeStateInfo (..), - OneEraForgeStateUpdateError (..), OneEraLedgerError (..), OneEraTiebreakerView (..), - OneEraLedgerUpdate (..), OneEraLedgerWarning (..), + OneEraForgeStateUpdateError (..), OneEraLedgerError (..), + OneEraLedgerUpdate (..), OneEraLedgerWarning (..), OneEraTiebreakerView (..), OneEraValidationErr (..), mkEraMismatch) import Ouroboros.Consensus.HardFork.Combinator.Condense () import Ouroboros.Consensus.HardFork.Combinator.Serialisation.Common - (EraNodeToClientVersion (..), - HardForkNodeToNodeVersion (..), HardForkSpecificNodeToClientVersion (..), - HardForkSpecificNodeToNodeVersion (..)) + (EraNodeToClientVersion (..), HardForkNodeToNodeVersion (..), + HardForkSpecificNodeToClientVersion (..), HardForkSpecificNodeToNodeVersion (..)) import Ouroboros.Consensus.HardFork.History.EraParams (EraParams (..), SafeZone) import Ouroboros.Consensus.HeaderValidation (OtherHeaderEnvelopeError) import Ouroboros.Consensus.Ledger.Abstract (LedgerError) @@ -43,7 +42,8 @@ import Ouroboros.Consensus.Ledger.Inspect (LedgerUpdate, LedgerWarning import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr) import Ouroboros.Consensus.Node.NetworkProtocolVersion (BlockNodeToClientVersion, BlockNodeToNodeVersion) -import Ouroboros.Consensus.Protocol.Abstract (ValidationErr, SelectView (svTiebreakerView, svBlockNo), ConsensusProtocol (TiebreakerView)) +import Ouroboros.Consensus.Protocol.Abstract (ConsensusProtocol (TiebreakerView), + SelectView (svBlockNo, svTiebreakerView), ValidationErr) import Ouroboros.Consensus.TypeFamilyWrappers import Ouroboros.Consensus.Util.Condense (Condense (..)) diff --git a/cardano-node/src/Cardano/Tracing/Startup.hs b/cardano-node/src/Cardano/Tracing/Startup.hs index 4103c50ed13..5a8a2276368 100644 --- a/cardano-node/src/Cardano/Tracing/Startup.hs +++ b/cardano-node/src/Cardano/Tracing/Startup.hs @@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} @@ -10,6 +11,7 @@ import Cardano.BM.Data.Tracer (HasTextFormatter (..), trStructuredText import Cardano.BM.Tracing (HasPrivacyAnnotation (..), HasSeverityAnnotation (..), Severity (..), ToObject (..), Transformable (..)) import Cardano.Logging (LogFormatting (..)) +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Startup import Cardano.Node.Tracing.Compat import Cardano.Node.Tracing.Tracers.Startup @@ -23,7 +25,7 @@ import Data.Aeson (ToJSON) import Data.Text (Text) -instance HasSeverityAnnotation (StartupTrace blk) where +instance HasSeverityAnnotation (StartupTrace blk ProtocolInstantiationError) where getSeverityAnnotation (StartupSocketConfigError _) = Error getSeverityAnnotation NetworkConfigUpdate = Notice getSeverityAnnotation (NetworkConfigUpdateError _) = Error @@ -35,17 +37,17 @@ instance HasSeverityAnnotation (StartupTrace blk) where getSeverityAnnotation WarningDevelopmentNodeToClientVersions {} = Warning getSeverityAnnotation _ = Info -instance HasPrivacyAnnotation (StartupTrace blk) +instance HasPrivacyAnnotation (StartupTrace blk ProtocolInstantiationError) instance ( Show (BlockNodeToNodeVersion blk) , Show (BlockNodeToClientVersion blk) , ToJSON (BlockNodeToNodeVersion blk) , ToJSON (BlockNodeToClientVersion blk) ) - => Transformable Text IO (StartupTrace blk) where + => Transformable Text IO (StartupTrace blk ProtocolInstantiationError) where trTransformer = trStructuredText -instance HasTextFormatter (StartupTrace blk) where +instance HasTextFormatter (StartupTrace blk ProtocolInstantiationError) where formatText a _ = ppStartupInfoTrace a instance ( Show (BlockNodeToNodeVersion blk) @@ -53,5 +55,5 @@ instance ( Show (BlockNodeToNodeVersion blk) , ToJSON (BlockNodeToNodeVersion blk) , ToJSON (BlockNodeToClientVersion blk) ) - => ToObject (StartupTrace blk) where + => ToObject (StartupTrace blk ProtocolInstantiationError) where toObject verb = forMachine (toDetailLevel verb) diff --git a/cardano-node/src/Cardano/Tracing/Tracers.hs b/cardano-node/src/Cardano/Tracing/Tracers.hs index 3657b3e0c4a..451c9697d8b 100644 --- a/cardano-node/src/Cardano/Tracing/Tracers.hs +++ b/cardano-node/src/Cardano/Tracing/Tracers.hs @@ -35,16 +35,20 @@ import Cardano.BM.Data.Transformers import Cardano.BM.Internal.ElidingTracer import Cardano.BM.Trace (traceNamedObject) import Cardano.BM.Tracing +import Cardano.Network.Diffusion (CardanoPeerSelectionCounters) +import qualified Cardano.Network.Diffusion.Types as Cardano.Diffusion +import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano import Cardano.Node.Configuration.Logging +import Cardano.Node.Protocol (ProtocolInstantiationError) import Cardano.Node.Protocol.Byron () import Cardano.Node.Protocol.Shelley () +import Cardano.Node.Protocol.Traits (ConvertTxId) import Cardano.Node.Queries import Cardano.Node.Startup import qualified Cardano.Node.STM as STM import Cardano.Node.TraceConstraints import Cardano.Node.Tracing import Cardano.Node.Tracing.Tracers.NodeVersion -import Cardano.Network.Diffusion (CardanoPeerSelectionCounters) import Cardano.Protocol.TPraos.OCert (KESPeriod (..)) import Cardano.Slotting.Slot (EpochNo (..), SlotNo (..), WithOrigin (..)) import Cardano.Tracing.Config @@ -64,8 +68,8 @@ import Ouroboros.Consensus.Ledger.Abstract (LedgerErr, LedgerState) import Ouroboros.Consensus.Ledger.Extended (ledgerState) import Ouroboros.Consensus.Ledger.Inspect (InspectLedger, LedgerEvent) import Ouroboros.Consensus.Ledger.Query (BlockQuery, Query) -import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTx, GenTxId, HasTxs, - LedgerSupportsMempool, ByteSize32 (..)) +import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, ByteSize32 (..), GenTx, + GenTxId, HasTxs, LedgerSupportsMempool) import Ouroboros.Consensus.Ledger.SupportsProtocol (LedgerSupportsProtocol) import Ouroboros.Consensus.Mempool (MempoolSize (..), TraceEventMempool (..)) import Ouroboros.Consensus.MiniProtocol.BlockFetch.Server @@ -79,10 +83,6 @@ import qualified Ouroboros.Consensus.Protocol.Ledger.HotKey as HotKey import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB import qualified Ouroboros.Consensus.Storage.LedgerDB as LedgerDB import Ouroboros.Consensus.Util.Enclose - -import qualified Cardano.Network.Diffusion.Types as Cardano.Diffusion -import qualified Cardano.Network.PeerSelection.Governor.Types as Cardano - import qualified Ouroboros.Network.AnchoredFragment as AF import Ouroboros.Network.Block (BlockNo (..), ChainUpdate (..), HasHeader (..), Point, StandardHash, blockNo, pointSlot, unBlockNo) @@ -100,8 +100,7 @@ import Ouroboros.Network.InboundGovernor.State as InboundGovernor import Ouroboros.Network.NodeToClient (LocalAddress) import Ouroboros.Network.NodeToNode (RemoteAddress) import Ouroboros.Network.PeerSelection.Churn (ChurnCounters (..)) -import Ouroboros.Network.PeerSelection.Governor ( - PeerSelectionView (..)) +import Ouroboros.Network.PeerSelection.Governor (PeerSelectionView (..)) import qualified Ouroboros.Network.PeerSelection.Governor as Governor import Ouroboros.Network.Point (fromWithOrigin, withOrigin) import Ouroboros.Network.Protocol.LocalStateQuery.Type (LocalStateQuery, ShowQuery) @@ -350,7 +349,7 @@ mkTracers blockConfig tOpts@(TracingOnLegacy trSel) tr nodeKern ekgDirect = do -- TODO: startupTracer should ignore severity level (i.e. it should always -- be printed)! , startupTracer = toLogObject' verb (appendName "startup" tr) - <> Tracer (\(ev :: StartupTrace blk) -> traceForgeEnabledMetric ekgDirect ev) + <> Tracer (\(ev :: StartupTrace blk ProtocolInstantiationError) -> traceForgeEnabledMetric ekgDirect ev) , shutdownTracer = toLogObject' verb $ appendName "shutdown" tr , nodeVersionTracer = Tracer (\(ev :: NodeVersionTrace) -> traceVersionMetric ekgDirect ev) @@ -363,7 +362,7 @@ mkTracers blockConfig tOpts@(TracingOnLegacy trSel) tr nodeKern ekgDirect = do , ledgerMetricsTracer = nullTracer } where - traceForgeEnabledMetric :: Maybe EKGDirect -> StartupTrace blk -> IO () + traceForgeEnabledMetric :: Maybe EKGDirect -> StartupTrace blk ProtocolInstantiationError -> IO () traceForgeEnabledMetric mbEKGDirect ev = case mbEKGDirect of Just ekgDirect' -> diff --git a/cardano-testnet/cardano-testnet.cabal b/cardano-testnet/cardano-testnet.cabal index c9f6102ea36..c7a5367d34b 100644 --- a/cardano-testnet/cardano-testnet.cabal +++ b/cardano-testnet/cardano-testnet.cabal @@ -55,7 +55,7 @@ library , cardano-ledger-core:{cardano-ledger-core, testlib} , cardano-ledger-dijkstra , cardano-ledger-shelley - , cardano-node + , cardano-node:{cardano-node,cardano-configuration} , cardano-ping ^>= 0.9 , cardano-prelude , contra-tracer