Skip to content

Commit

Permalink
Merge pull request IntersectMBO#5447 from input-output-hk/jutaro/trac…
Browse files Browse the repository at this point in the history
…e-consistency-checks

Enhance Namespace Consistency Checks and Configuration Validation
  • Loading branch information
mgmeier authored Aug 30, 2023
2 parents de061e9 + aa718c8 commit fa98c84
Show file tree
Hide file tree
Showing 21 changed files with 846 additions and 129 deletions.
2 changes: 2 additions & 0 deletions cardano-node/cardano-node.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ library
Cardano.Node.TraceConstraints
Cardano.Node.Tracing
Cardano.Node.Tracing.API
Cardano.Node.Tracing.Consistency
Cardano.Node.Tracing.Compat
Cardano.Node.Tracing.DefaultTraceConfig
Cardano.Node.Tracing.Documentation
Expand Down Expand Up @@ -262,6 +263,7 @@ test-suite cardano-node-test
Test.Cardano.Node.Gen
Test.Cardano.Node.Json
Test.Cardano.Node.POM
Test.Cardano.Tracing.NewTracing.Consistency
Test.Cardano.Tracing.OrphanInstances.HardFork

ghc-options: -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T
7 changes: 6 additions & 1 deletion cardano-node/src/Cardano/Node/TraceConstraints.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,21 @@ import Cardano.Logging (LogFormatting)
import Cardano.Node.Queries (ConvertTxId, GetKESInfo (..), HasKESInfo (..),
HasKESMetricsData (..), LedgerQueries)
import Cardano.Tracing.HasIssuer (HasIssuer)

import Ouroboros.Consensus.Block (BlockProtocol, CannotForge, ForgeStateUpdateError,
Header)
GetHeader, HasHeader, Header)
import Ouroboros.Consensus.HeaderValidation (OtherHeaderEnvelopeError)
import Ouroboros.Consensus.Ledger.Abstract (LedgerError)
import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent, LedgerUpdate, LedgerWarning)
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, HasTxId, HasTxs (..))
import Ouroboros.Consensus.Node.NetworkProtocolVersion
(HasNetworkProtocolVersion (BlockNodeToClientVersion, BlockNodeToNodeVersion))
import Ouroboros.Consensus.Node.Run (RunNode, SerialiseNodeToNodeConstraints)
import Ouroboros.Consensus.Protocol.Abstract (ValidationErr)
import Ouroboros.Consensus.Shelley.Ledger.Mempool (GenTx, TxId)

import Ouroboros.Network.Block (Serialised)

import Data.Aeson
import Data.Set

Expand All @@ -41,6 +45,7 @@ type TraceConstraints blk =
, HasKESMetricsData blk
, HasKESInfo blk
, GetKESInfo blk
, RunNode blk

, ToObject (ApplyTxErr blk)
, ToObject (GenTx blk)
Expand Down
5 changes: 2 additions & 3 deletions cardano-node/src/Cardano/Node/Tracing/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import Network.Mux.Trace (TraceLabelPeer (..))

import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent)
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
import Ouroboros.Consensus.Node (NetworkP2PMode, RunNode)
import Ouroboros.Consensus.Node (NetworkP2PMode)
import Ouroboros.Network.ConnectionId (ConnectionId)
import Ouroboros.Network.Magic (NetworkMagic)
import Ouroboros.Network.NodeToClient (withIOManager)
Expand All @@ -47,8 +47,7 @@ import Cardano.Node.Tracing.Tracers.Resources (startResourceTracer)

initTraceDispatcher ::
forall blk p2p.
( RunNode blk
, TraceConstraints blk
( TraceConstraints blk
, LogFormatting (LedgerEvent blk)
, LogFormatting
(TraceLabelPeer (ConnectionId RemoteAddress) (TraceChainSyncClientEvent blk))
Expand Down
498 changes: 498 additions & 0 deletions cardano-node/src/Cardano/Node/Tracing/Consistency.hs

Large diffs are not rendered by default.

15 changes: 8 additions & 7 deletions cardano-node/src/Cardano/Node/Tracing/DefaultTraceConfig.hs
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,22 @@ defaultCardanoConfig = emptyTraceConfig {
[ ConfSeverity (SeverityF (Just Info))])
,(["Net", "ConnectionManager", "Remote"],
[ ConfSeverity (SeverityF (Just Info))])
,(["DNSSubscription"],
,(["Net", "Subscription", "DNS"],
[ ConfSeverity (SeverityF (Just Info))])
,(["DiffusionInit"],
,(["Startup", "DiffusionInit"],
[ ConfSeverity (SeverityF (Just Info))])
,(["ErrorPolicy"],
,(["Net", "ErrorPolicy"],
[ ConfSeverity (SeverityF (Just Info))])
,(["Forge"],
,(["Forge", "Loop"],
[ ConfSeverity (SeverityF (Just Info))])
-- includes ["Forge", "KESInfo"]
-- ,(["Forge", "KESInfo"],
-- [ ConfSeverity (SeverityF (Just Info))])
,(["Net", "InboundGovernor", "Remote"],
[ ConfSeverity (SeverityF (Just Info))])
-- includes ["Net", "InboundGovernor", "Remote", "Transition"]
,(["IpSubscription"],
,(["Net", "Subscription", "IP"],
[ ConfSeverity (SeverityF (Just Info))])
,(["LocalErrorPolicy"],
,(["Net", "ErrorPolicy", "Local"],
[ ConfSeverity (SeverityF (Just Info))])
,(["Mempool"],
[ ConfSeverity (SeverityF (Just Info))])
Expand Down
58 changes: 20 additions & 38 deletions cardano-node/src/Cardano/Node/Tracing/Documentation.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,30 +52,24 @@ import Cardano.Node.Handlers.Shutdown (ShutdownTrace)
import Cardano.Node.Startup
import Cardano.Node.TraceConstraints

import Ouroboros.Consensus.Block.Forging
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (RelativeTime)
import Ouroboros.Consensus.BlockchainTime.WallClock.Util (TraceBlockchainTimeEvent (..))
import Ouroboros.Consensus.Cardano.Block
import Ouroboros.Consensus.Ledger.Inspect
import Ouroboros.Consensus.Ledger.Query (Query, ShowQuery)
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTxId,
LedgerSupportsMempool)
import Ouroboros.Consensus.Ledger.SupportsProtocol
import Ouroboros.Consensus.Ledger.Query (Query)
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTxId)
import Ouroboros.Consensus.Mempool (TraceEventMempool (..))
import Ouroboros.Consensus.MiniProtocol.BlockFetch.Server
(TraceBlockFetchServerEvent (..))
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
import Ouroboros.Consensus.MiniProtocol.ChainSync.Server (TraceChainSyncServerEvent)
import Ouroboros.Consensus.MiniProtocol.LocalTxSubmission.Server
(TraceLocalTxSubmissionServerEvent (..))
import Ouroboros.Consensus.Node.NetworkProtocolVersion
import qualified Ouroboros.Consensus.Node.Run as Consensus
import qualified Ouroboros.Consensus.Node.Tracers as Consensus
import qualified Ouroboros.Consensus.Protocol.Ledger.HotKey as HotKey
import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB


import Ouroboros.Network.Block (Point (..), SlotNo, Tip)
import Ouroboros.Network.Block (Point (..), Serialised, SlotNo, Tip)
import qualified Ouroboros.Network.BlockFetch.ClientState as BlockFetch
import Ouroboros.Network.BlockFetch.Decision
import Ouroboros.Network.ConnectionHandler (ConnectionHandlerTrace (..))
Expand Down Expand Up @@ -163,19 +157,10 @@ runTraceDocumentationCmd TraceDocumentationCmd{..} = do
-- Can be changed, when old tracers have gone
docTracers :: forall blk peer remotePeer.
( TraceConstraints blk
, InspectLedger blk
, LedgerSupportsMempool blk
, LedgerSupportsProtocol blk
, Consensus.SerialiseNodeToNodeConstraints blk
, LogFormatting peer
, LogFormatting remotePeer
, Show (BlockNodeToClientVersion blk)
, Show (BlockNodeToNodeVersion blk)
, Show remotePeer
, Show peer
, Show (ForgeStateUpdateError blk)
, Show (CannotForge blk)
, ShowQuery (BlockQuery blk)
)
=> FilePath
-> FilePath
Expand All @@ -193,16 +178,16 @@ docTracers configFileName outputFileName _ _ _ = do
configReflection <- emptyConfigReflection

-- NodeInfo tracer
nodeInfoTr <- mkDataPointTracer
nodeInfoDp <- mkDataPointTracer
trDataPoint
configureTracers configReflection trConfig [nodeInfoTr]
nodeInfoTrDoc <- documentTracer (nodeInfoTr :: Trace IO NodeInfo)
configureTracers configReflection trConfig [nodeInfoDp]
nodeInfoDpDoc <- documentTracer (nodeInfoDp :: Trace IO NodeInfo)

nodeStartupInfoTr <- mkDataPointTracer
nodeStartupInfoDp <- mkDataPointTracer
trDataPoint
configureTracers configReflection trConfig [nodeStartupInfoTr]
nodeStartupInfoTrDoc <- documentTracer
(nodeStartupInfoTr :: Trace IO NodeStartupInfo)
configureTracers configReflection trConfig [nodeStartupInfoDp]
nodeStartupInfoDpDoc <- documentTracer
(nodeStartupInfoDp :: Trace IO NodeStartupInfo)

-- State tracer
stateTr <- mkCardanoTracer
Expand All @@ -212,7 +197,6 @@ docTracers configFileName outputFileName _ _ _ = do
stateTrDoc <- documentTracer (stateTr :: Trace IO SR.NodeState)

-- Peers tracer

peersTr <- mkCardanoTracer
trBase trForward mbTrEKG
["Net", "Peers", "List"]
Expand All @@ -239,7 +223,6 @@ docTracers configFileName outputFileName _ _ _ = do
configureTracers configReflection trConfig [shutdownTr]
shutdownTrDoc <- documentTracer (shutdownTr :: Trace IO ShutdownTrace)


chainDBTr <- mkCardanoTracer'
trBase trForward mbTrEKG
["ChainDB"]
Expand Down Expand Up @@ -314,7 +297,7 @@ docTracers configFileName outputFileName _ _ _ = do

forgeKESInfoTr <- mkCardanoTracer
trBase trForward mbTrEKG
["Forge", "KESInfo"]
["Forge"]
configureTracers configReflection trConfig [forgeKESInfoTr]
forgeKESInfoTrDoc <- documentTracer (forgeKESInfoTr ::
Trace IO (Consensus.TraceLabelCreds HotKey.KESInfo))
Expand Down Expand Up @@ -361,7 +344,7 @@ docTracers configFileName outputFileName _ _ _ = do
-- TODO YUP
-- forgeTr' <- mkCardanoTracer'
-- trBase trForward mbTrEKG
-- ["Forge", "Loop"]
-- ["Forge", "ThreadStats"]
-- forgeThreadStats
-- configureTracers configReflection trConfig [forgeTr']
-- forgeThreadStatsTrDoc <- documentTracer' forgeThreadStats (forgeTr' ::
Expand Down Expand Up @@ -418,8 +401,8 @@ docTracers configFileName outputFileName _ _ _ = do
(GenTx blk) (ApplyTxErr blk)))))

stateQueryTr <- mkCardanoTracer
trBase trForward mbTrEKG
["StateQueryServer"]
trBase trForward mbTrEKG
["StateQueryServer"]
configureTracers configReflection trConfig [stateQueryTr]
stateQueryTrDoc <- documentTracer (stateQueryTr ::
Trace IO
Expand All @@ -435,7 +418,7 @@ docTracers configFileName outputFileName _ _ _ = do
configureTracers configReflection trConfig [chainSyncNodeTr]
chainSyncNodeTrDoc <- documentTracer (chainSyncNodeTr ::
Trace IO (BlockFetch.TraceLabelPeer peer (TraceSendRecv
(ChainSync (Header blk) (Point blk) (Tip blk)))))
(ChainSync (Header blk) (Point blk) (Tip blk)))))

chainSyncSerialisedTr <- mkCardanoTracer
trBase trForward mbTrEKG
Expand Down Expand Up @@ -463,7 +446,7 @@ docTracers configFileName outputFileName _ _ _ = do
Trace IO
(BlockFetch.TraceLabelPeer peer
(TraceSendRecv
(BlockFetch blk (Point blk)))))
(BlockFetch (Serialised blk) (Point blk)))))

txSubmission2Tr <- mkCardanoTracer
trBase trForward mbTrEKG
Expand Down Expand Up @@ -520,7 +503,6 @@ docTracers configFileName outputFileName _ _ _ = do
Trace IO TraceLedgerPeers)

-- DiffusionTracersExtra P2P

localRootPeersTr <- mkCardanoTracer
trBase trForward mbTrEKG
["Net", "Peers", "LocalRoot"]
Expand Down Expand Up @@ -582,12 +564,11 @@ docTracers configFileName outputFileName _ _ _ = do

connectionManagerTransitionsTr <- mkCardanoTracer
trBase trForward mbTrEKG
["Net", "ConnectionManager", "Remote"]
["Net", "ConnectionManager", "Transition"]
configureTracers configReflection trConfig [connectionManagerTransitionsTr]
connectionManagerTransitionsTrDoc <- documentTracer (connectionManagerTransitionsTr ::
Trace IO (ConnectionManager.AbstractTransitionTrace Socket.SockAddr))


serverTr <- mkCardanoTracer
trBase trForward mbTrEKG
["Net", "Server", "Remote"]
Expand Down Expand Up @@ -635,6 +616,7 @@ docTracers configFileName outputFileName _ _ _ = do
localInboundGovernorTrDoc <- documentTracer (localInboundGovernorTr ::
Trace IO (InboundGovernorTrace LocalAddress))


-- -- DiffusionTracersExtra nonP2P

dtIpSubscriptionTr <- mkCardanoTracer
Expand Down Expand Up @@ -679,9 +661,9 @@ docTracers configFileName outputFileName _ _ _ = do
dtAcceptPolicyTrDoc <- documentTracer (dtAcceptPolicyTr ::
Trace IO NtN.AcceptConnectionsPolicyTrace)

let bl = nodeInfoTrDoc
let bl = nodeInfoDpDoc
<> nodeStartupInfoDpDoc
<> stateTrDoc
<> nodeStartupInfoTrDoc
<> resourcesTrDoc
<> startupTrDoc
<> shutdownTrDoc
Expand Down
19 changes: 14 additions & 5 deletions cardano-node/src/Cardano/Node/Tracing/Tracers.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
-- needs different instances on ghc8 and on ghc9

module Cardano.Node.Tracing.Tracers
( mkDispatchTracers
) where

import Codec.CBOR.Read (DeserialiseFailure)
import Control.Monad (unless)
import Data.Proxy (Proxy (..))

import Cardano.Logging

import Cardano.Node.Tracing.Consistency (checkConfiguration')
import Cardano.Node.Tracing.Formatting ()
import Cardano.Node.Tracing.Tracers.BlockReplayProgress
import Cardano.Node.Tracing.Tracers.ChainDB
Expand All @@ -33,7 +37,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 Trace.Forward.Utils.DataPoint (DataPoint)

import Cardano.Node.Protocol.Types (SomeConsensusProtocol)
import Cardano.Node.Queries (NodeKernelData)
Expand All @@ -43,6 +46,8 @@ import Cardano.Node.Tracing.Peers
import qualified Cardano.Node.Tracing.StateRep as SR
import "contra-tracer" Control.Tracer (Tracer (..))

import Network.Mux.Trace (TraceLabelPeer (..))

import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent)
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
import qualified Ouroboros.Consensus.Network.NodeToClient as NodeToClient
Expand All @@ -56,8 +61,6 @@ import qualified Ouroboros.Consensus.Node.Tracers as Consensus
import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
import qualified Ouroboros.Consensus.Storage.LedgerDB as LedgerDB

import Network.Mux.Trace (TraceLabelPeer (..))

import qualified Ouroboros.Network.BlockFetch.ClientState as BlockFetch
import Ouroboros.Network.ConnectionId (ConnectionId)
import qualified Ouroboros.Network.Diffusion as Diffusion
Expand All @@ -66,6 +69,8 @@ import qualified Ouroboros.Network.Diffusion.P2P as P2P
import Ouroboros.Network.NodeToClient (LocalAddress)
import Ouroboros.Network.NodeToNode (RemoteAddress)

import Trace.Forward.Utils.DataPoint (DataPoint)

-- | Construct tracers for all system components.
--
mkDispatchTracers
Expand Down Expand Up @@ -160,6 +165,10 @@ mkDispatchTracers nodeKernel trBase trForward mbTrEKG trDataPoint trConfig enabl

traceTracerInfo trBase trForward configReflection

let warnings = checkConfiguration' trConfig
unless (null warnings) $
traceConfigWarnings trBase trForward warnings

pure Tracers
{
chainDBTracer = Tracer (traceWith chainDBTr')
Expand Down Expand Up @@ -279,7 +288,7 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf

!forgeThreadStatsTr <- mkCardanoTracer'
trBase trForward mbTrEKG
["Forge"]
["Forge", "ThreadStats"]
forgeThreadStats
configureTracers configReflection trConfig [forgeThreadStatsTr]

Expand Down
Loading

0 comments on commit fa98c84

Please sign in to comment.