Skip to content

Commit fa98c84

Browse files
authored
Merge pull request #5447 from input-output-hk/jutaro/trace-consistency-checks
Enhance Namespace Consistency Checks and Configuration Validation
2 parents de061e9 + aa718c8 commit fa98c84

File tree

21 files changed

+846
-129
lines changed

21 files changed

+846
-129
lines changed

cardano-node/cardano-node.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ library
8585
Cardano.Node.TraceConstraints
8686
Cardano.Node.Tracing
8787
Cardano.Node.Tracing.API
88+
Cardano.Node.Tracing.Consistency
8889
Cardano.Node.Tracing.Compat
8990
Cardano.Node.Tracing.DefaultTraceConfig
9091
Cardano.Node.Tracing.Documentation
@@ -262,6 +263,7 @@ test-suite cardano-node-test
262263
Test.Cardano.Node.Gen
263264
Test.Cardano.Node.Json
264265
Test.Cardano.Node.POM
266+
Test.Cardano.Tracing.NewTracing.Consistency
265267
Test.Cardano.Tracing.OrphanInstances.HardFork
266268

267269
ghc-options: -threaded -rtsopts -with-rtsopts=-N -with-rtsopts=-T

cardano-node/src/Cardano/Node/TraceConstraints.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,21 @@ import Cardano.Logging (LogFormatting)
1515
import Cardano.Node.Queries (ConvertTxId, GetKESInfo (..), HasKESInfo (..),
1616
HasKESMetricsData (..), LedgerQueries)
1717
import Cardano.Tracing.HasIssuer (HasIssuer)
18+
1819
import Ouroboros.Consensus.Block (BlockProtocol, CannotForge, ForgeStateUpdateError,
19-
Header)
20+
GetHeader, HasHeader, Header)
2021
import Ouroboros.Consensus.HeaderValidation (OtherHeaderEnvelopeError)
2122
import Ouroboros.Consensus.Ledger.Abstract (LedgerError)
2223
import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent, LedgerUpdate, LedgerWarning)
2324
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, HasTxId, HasTxs (..))
2425
import Ouroboros.Consensus.Node.NetworkProtocolVersion
2526
(HasNetworkProtocolVersion (BlockNodeToClientVersion, BlockNodeToNodeVersion))
27+
import Ouroboros.Consensus.Node.Run (RunNode, SerialiseNodeToNodeConstraints)
2628
import Ouroboros.Consensus.Protocol.Abstract (ValidationErr)
2729
import Ouroboros.Consensus.Shelley.Ledger.Mempool (GenTx, TxId)
2830

31+
import Ouroboros.Network.Block (Serialised)
32+
2933
import Data.Aeson
3034
import Data.Set
3135

@@ -41,6 +45,7 @@ type TraceConstraints blk =
4145
, HasKESMetricsData blk
4246
, HasKESInfo blk
4347
, GetKESInfo blk
48+
, RunNode blk
4449

4550
, ToObject (ApplyTxErr blk)
4651
, ToObject (GenTx blk)

cardano-node/src/Cardano/Node/Tracing/API.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Network.Mux.Trace (TraceLabelPeer (..))
2323

2424
import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent)
2525
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
26-
import Ouroboros.Consensus.Node (NetworkP2PMode, RunNode)
26+
import Ouroboros.Consensus.Node (NetworkP2PMode)
2727
import Ouroboros.Network.ConnectionId (ConnectionId)
2828
import Ouroboros.Network.Magic (NetworkMagic)
2929
import Ouroboros.Network.NodeToClient (withIOManager)
@@ -47,8 +47,7 @@ import Cardano.Node.Tracing.Tracers.Resources (startResourceTracer)
4747

4848
initTraceDispatcher ::
4949
forall blk p2p.
50-
( RunNode blk
51-
, TraceConstraints blk
50+
( TraceConstraints blk
5251
, LogFormatting (LedgerEvent blk)
5352
, LogFormatting
5453
(TraceLabelPeer (ConnectionId RemoteAddress) (TraceChainSyncClientEvent blk))

cardano-node/src/Cardano/Node/Tracing/Consistency.hs

Lines changed: 498 additions & 0 deletions
Large diffs are not rendered by default.

cardano-node/src/Cardano/Node/Tracing/DefaultTraceConfig.hs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,22 @@ defaultCardanoConfig = emptyTraceConfig {
2828
[ ConfSeverity (SeverityF (Just Info))])
2929
,(["Net", "ConnectionManager", "Remote"],
3030
[ ConfSeverity (SeverityF (Just Info))])
31-
,(["DNSSubscription"],
31+
,(["Net", "Subscription", "DNS"],
3232
[ ConfSeverity (SeverityF (Just Info))])
33-
,(["DiffusionInit"],
33+
,(["Startup", "DiffusionInit"],
3434
[ ConfSeverity (SeverityF (Just Info))])
35-
,(["ErrorPolicy"],
35+
,(["Net", "ErrorPolicy"],
3636
[ ConfSeverity (SeverityF (Just Info))])
37-
,(["Forge"],
37+
,(["Forge", "Loop"],
3838
[ ConfSeverity (SeverityF (Just Info))])
39-
-- includes ["Forge", "KESInfo"]
39+
-- ,(["Forge", "KESInfo"],
40+
-- [ ConfSeverity (SeverityF (Just Info))])
4041
,(["Net", "InboundGovernor", "Remote"],
4142
[ ConfSeverity (SeverityF (Just Info))])
4243
-- includes ["Net", "InboundGovernor", "Remote", "Transition"]
43-
,(["IpSubscription"],
44+
,(["Net", "Subscription", "IP"],
4445
[ ConfSeverity (SeverityF (Just Info))])
45-
,(["LocalErrorPolicy"],
46+
,(["Net", "ErrorPolicy", "Local"],
4647
[ ConfSeverity (SeverityF (Just Info))])
4748
,(["Mempool"],
4849
[ ConfSeverity (SeverityF (Just Info))])

cardano-node/src/Cardano/Node/Tracing/Documentation.hs

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,24 @@ import Cardano.Node.Handlers.Shutdown (ShutdownTrace)
5252
import Cardano.Node.Startup
5353
import Cardano.Node.TraceConstraints
5454

55-
import Ouroboros.Consensus.Block.Forging
5655
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (RelativeTime)
5756
import Ouroboros.Consensus.BlockchainTime.WallClock.Util (TraceBlockchainTimeEvent (..))
5857
import Ouroboros.Consensus.Cardano.Block
59-
import Ouroboros.Consensus.Ledger.Inspect
60-
import Ouroboros.Consensus.Ledger.Query (Query, ShowQuery)
61-
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTxId,
62-
LedgerSupportsMempool)
63-
import Ouroboros.Consensus.Ledger.SupportsProtocol
58+
import Ouroboros.Consensus.Ledger.Query (Query)
59+
import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTxId)
6460
import Ouroboros.Consensus.Mempool (TraceEventMempool (..))
6561
import Ouroboros.Consensus.MiniProtocol.BlockFetch.Server
6662
(TraceBlockFetchServerEvent (..))
6763
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
6864
import Ouroboros.Consensus.MiniProtocol.ChainSync.Server (TraceChainSyncServerEvent)
6965
import Ouroboros.Consensus.MiniProtocol.LocalTxSubmission.Server
7066
(TraceLocalTxSubmissionServerEvent (..))
71-
import Ouroboros.Consensus.Node.NetworkProtocolVersion
72-
import qualified Ouroboros.Consensus.Node.Run as Consensus
7367
import qualified Ouroboros.Consensus.Node.Tracers as Consensus
7468
import qualified Ouroboros.Consensus.Protocol.Ledger.HotKey as HotKey
7569
import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
7670

7771

78-
import Ouroboros.Network.Block (Point (..), SlotNo, Tip)
72+
import Ouroboros.Network.Block (Point (..), Serialised, SlotNo, Tip)
7973
import qualified Ouroboros.Network.BlockFetch.ClientState as BlockFetch
8074
import Ouroboros.Network.BlockFetch.Decision
8175
import Ouroboros.Network.ConnectionHandler (ConnectionHandlerTrace (..))
@@ -163,19 +157,10 @@ runTraceDocumentationCmd TraceDocumentationCmd{..} = do
163157
-- Can be changed, when old tracers have gone
164158
docTracers :: forall blk peer remotePeer.
165159
( TraceConstraints blk
166-
, InspectLedger blk
167-
, LedgerSupportsMempool blk
168-
, LedgerSupportsProtocol blk
169-
, Consensus.SerialiseNodeToNodeConstraints blk
170160
, LogFormatting peer
171161
, LogFormatting remotePeer
172-
, Show (BlockNodeToClientVersion blk)
173-
, Show (BlockNodeToNodeVersion blk)
174162
, Show remotePeer
175163
, Show peer
176-
, Show (ForgeStateUpdateError blk)
177-
, Show (CannotForge blk)
178-
, ShowQuery (BlockQuery blk)
179164
)
180165
=> FilePath
181166
-> FilePath
@@ -193,16 +178,16 @@ docTracers configFileName outputFileName _ _ _ = do
193178
configReflection <- emptyConfigReflection
194179

195180
-- NodeInfo tracer
196-
nodeInfoTr <- mkDataPointTracer
181+
nodeInfoDp <- mkDataPointTracer
197182
trDataPoint
198-
configureTracers configReflection trConfig [nodeInfoTr]
199-
nodeInfoTrDoc <- documentTracer (nodeInfoTr :: Trace IO NodeInfo)
183+
configureTracers configReflection trConfig [nodeInfoDp]
184+
nodeInfoDpDoc <- documentTracer (nodeInfoDp :: Trace IO NodeInfo)
200185

201-
nodeStartupInfoTr <- mkDataPointTracer
186+
nodeStartupInfoDp <- mkDataPointTracer
202187
trDataPoint
203-
configureTracers configReflection trConfig [nodeStartupInfoTr]
204-
nodeStartupInfoTrDoc <- documentTracer
205-
(nodeStartupInfoTr :: Trace IO NodeStartupInfo)
188+
configureTracers configReflection trConfig [nodeStartupInfoDp]
189+
nodeStartupInfoDpDoc <- documentTracer
190+
(nodeStartupInfoDp :: Trace IO NodeStartupInfo)
206191

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

214199
-- Peers tracer
215-
216200
peersTr <- mkCardanoTracer
217201
trBase trForward mbTrEKG
218202
["Net", "Peers", "List"]
@@ -239,7 +223,6 @@ docTracers configFileName outputFileName _ _ _ = do
239223
configureTracers configReflection trConfig [shutdownTr]
240224
shutdownTrDoc <- documentTracer (shutdownTr :: Trace IO ShutdownTrace)
241225

242-
243226
chainDBTr <- mkCardanoTracer'
244227
trBase trForward mbTrEKG
245228
["ChainDB"]
@@ -314,7 +297,7 @@ docTracers configFileName outputFileName _ _ _ = do
314297

315298
forgeKESInfoTr <- mkCardanoTracer
316299
trBase trForward mbTrEKG
317-
["Forge", "KESInfo"]
300+
["Forge"]
318301
configureTracers configReflection trConfig [forgeKESInfoTr]
319302
forgeKESInfoTrDoc <- documentTracer (forgeKESInfoTr ::
320303
Trace IO (Consensus.TraceLabelCreds HotKey.KESInfo))
@@ -361,7 +344,7 @@ docTracers configFileName outputFileName _ _ _ = do
361344
-- TODO YUP
362345
-- forgeTr' <- mkCardanoTracer'
363346
-- trBase trForward mbTrEKG
364-
-- ["Forge", "Loop"]
347+
-- ["Forge", "ThreadStats"]
365348
-- forgeThreadStats
366349
-- configureTracers configReflection trConfig [forgeTr']
367350
-- forgeThreadStatsTrDoc <- documentTracer' forgeThreadStats (forgeTr' ::
@@ -418,8 +401,8 @@ docTracers configFileName outputFileName _ _ _ = do
418401
(GenTx blk) (ApplyTxErr blk)))))
419402

420403
stateQueryTr <- mkCardanoTracer
421-
trBase trForward mbTrEKG
422-
["StateQueryServer"]
404+
trBase trForward mbTrEKG
405+
["StateQueryServer"]
423406
configureTracers configReflection trConfig [stateQueryTr]
424407
stateQueryTrDoc <- documentTracer (stateQueryTr ::
425408
Trace IO
@@ -435,7 +418,7 @@ docTracers configFileName outputFileName _ _ _ = do
435418
configureTracers configReflection trConfig [chainSyncNodeTr]
436419
chainSyncNodeTrDoc <- documentTracer (chainSyncNodeTr ::
437420
Trace IO (BlockFetch.TraceLabelPeer peer (TraceSendRecv
438-
(ChainSync (Header blk) (Point blk) (Tip blk)))))
421+
(ChainSync (Header blk) (Point blk) (Tip blk)))))
439422

440423
chainSyncSerialisedTr <- mkCardanoTracer
441424
trBase trForward mbTrEKG
@@ -463,7 +446,7 @@ docTracers configFileName outputFileName _ _ _ = do
463446
Trace IO
464447
(BlockFetch.TraceLabelPeer peer
465448
(TraceSendRecv
466-
(BlockFetch blk (Point blk)))))
449+
(BlockFetch (Serialised blk) (Point blk)))))
467450

468451
txSubmission2Tr <- mkCardanoTracer
469452
trBase trForward mbTrEKG
@@ -520,7 +503,6 @@ docTracers configFileName outputFileName _ _ _ = do
520503
Trace IO TraceLedgerPeers)
521504

522505
-- DiffusionTracersExtra P2P
523-
524506
localRootPeersTr <- mkCardanoTracer
525507
trBase trForward mbTrEKG
526508
["Net", "Peers", "LocalRoot"]
@@ -582,12 +564,11 @@ docTracers configFileName outputFileName _ _ _ = do
582564

583565
connectionManagerTransitionsTr <- mkCardanoTracer
584566
trBase trForward mbTrEKG
585-
["Net", "ConnectionManager", "Remote"]
567+
["Net", "ConnectionManager", "Transition"]
586568
configureTracers configReflection trConfig [connectionManagerTransitionsTr]
587569
connectionManagerTransitionsTrDoc <- documentTracer (connectionManagerTransitionsTr ::
588570
Trace IO (ConnectionManager.AbstractTransitionTrace Socket.SockAddr))
589571

590-
591572
serverTr <- mkCardanoTracer
592573
trBase trForward mbTrEKG
593574
["Net", "Server", "Remote"]
@@ -635,6 +616,7 @@ docTracers configFileName outputFileName _ _ _ = do
635616
localInboundGovernorTrDoc <- documentTracer (localInboundGovernorTr ::
636617
Trace IO (InboundGovernorTrace LocalAddress))
637618

619+
638620
-- -- DiffusionTracersExtra nonP2P
639621

640622
dtIpSubscriptionTr <- mkCardanoTracer
@@ -679,9 +661,9 @@ docTracers configFileName outputFileName _ _ _ = do
679661
dtAcceptPolicyTrDoc <- documentTracer (dtAcceptPolicyTr ::
680662
Trace IO NtN.AcceptConnectionsPolicyTrace)
681663

682-
let bl = nodeInfoTrDoc
664+
let bl = nodeInfoDpDoc
665+
<> nodeStartupInfoDpDoc
683666
<> stateTrDoc
684-
<> nodeStartupInfoTrDoc
685667
<> resourcesTrDoc
686668
<> startupTrDoc
687669
<> shutdownTrDoc

cardano-node/src/Cardano/Node/Tracing/Tracers.hs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@
99
{-# LANGUAGE ScopedTypeVariables #-}
1010
{-# LANGUAGE TypeApplications #-}
1111

12+
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
13+
-- needs different instances on ghc8 and on ghc9
14+
1215
module Cardano.Node.Tracing.Tracers
1316
( mkDispatchTracers
1417
) where
1518

1619
import Codec.CBOR.Read (DeserialiseFailure)
20+
import Control.Monad (unless)
1721
import Data.Proxy (Proxy (..))
1822

1923
import Cardano.Logging
20-
24+
import Cardano.Node.Tracing.Consistency (checkConfiguration')
2125
import Cardano.Node.Tracing.Formatting ()
2226
import Cardano.Node.Tracing.Tracers.BlockReplayProgress
2327
import Cardano.Node.Tracing.Tracers.ChainDB
@@ -33,7 +37,6 @@ import Cardano.Node.Tracing.Tracers.P2P ()
3337
import Cardano.Node.Tracing.Tracers.Peer ()
3438
import Cardano.Node.Tracing.Tracers.Shutdown ()
3539
import Cardano.Node.Tracing.Tracers.Startup ()
36-
import Trace.Forward.Utils.DataPoint (DataPoint)
3740

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

49+
import Network.Mux.Trace (TraceLabelPeer (..))
50+
4651
import Ouroboros.Consensus.Ledger.Inspect (LedgerEvent)
4752
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client (TraceChainSyncClientEvent)
4853
import qualified Ouroboros.Consensus.Network.NodeToClient as NodeToClient
@@ -56,8 +61,6 @@ import qualified Ouroboros.Consensus.Node.Tracers as Consensus
5661
import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
5762
import qualified Ouroboros.Consensus.Storage.LedgerDB as LedgerDB
5863

59-
import Network.Mux.Trace (TraceLabelPeer (..))
60-
6164
import qualified Ouroboros.Network.BlockFetch.ClientState as BlockFetch
6265
import Ouroboros.Network.ConnectionId (ConnectionId)
6366
import qualified Ouroboros.Network.Diffusion as Diffusion
@@ -66,6 +69,8 @@ import qualified Ouroboros.Network.Diffusion.P2P as P2P
6669
import Ouroboros.Network.NodeToClient (LocalAddress)
6770
import Ouroboros.Network.NodeToNode (RemoteAddress)
6871

72+
import Trace.Forward.Utils.DataPoint (DataPoint)
73+
6974
-- | Construct tracers for all system components.
7075
--
7176
mkDispatchTracers
@@ -160,6 +165,10 @@ mkDispatchTracers nodeKernel trBase trForward mbTrEKG trDataPoint trConfig enabl
160165

161166
traceTracerInfo trBase trForward configReflection
162167

168+
let warnings = checkConfiguration' trConfig
169+
unless (null warnings) $
170+
traceConfigWarnings trBase trForward warnings
171+
163172
pure Tracers
164173
{
165174
chainDBTracer = Tracer (traceWith chainDBTr')
@@ -279,7 +288,7 @@ mkConsensusTracers configReflection trBase trForward mbTrEKG _trDataPoint trConf
279288

280289
!forgeThreadStatsTr <- mkCardanoTracer'
281290
trBase trForward mbTrEKG
282-
["Forge"]
291+
["Forge", "ThreadStats"]
283292
forgeThreadStats
284293
configureTracers configReflection trConfig [forgeThreadStatsTr]
285294

0 commit comments

Comments
 (0)