1+ {-# LANGUAGE LambdaCase #-}
12{-# LANGUAGE FlexibleContexts #-}
23{-# LANGUAGE MonoLocalBinds #-}
34{-# LANGUAGE PackageImports #-}
@@ -37,7 +38,8 @@ import Prelude
3738
3839import Control.DeepSeq (deepseq )
3940import Control.Monad (forM_ )
40- import "contra-tracer" Control.Tracer (traceWith )
41+ import "contra-tracer" Control.Tracer (traceWith , Tracer )
42+ import qualified "contra-tracer" Control.Tracer as CT
4143import "trace-dispatcher" Control.Tracer (nullTracer )
4244import qualified Data.Map.Strict as Map
4345import Data.Maybe
@@ -48,7 +50,11 @@ import System.Metrics as EKG
4850
4951import Trace.Forward.Forwarding (initForwardingDelayed )
5052import Trace.Forward.Utils.TraceObject (writeToSink )
51-
53+ import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
54+ import Ouroboros.Consensus.Util.Enclose
55+ import qualified Ouroboros.Consensus.Storage.LedgerDB.Snapshots as LedgerDB
56+ import qualified Ouroboros.Consensus.Storage.LedgerDB.TraceEvent as LedgerDB
57+ import Cardano.Snapshots.Run
5258
5359initTraceDispatcher ::
5460 forall blk .
@@ -69,7 +75,16 @@ initTraceDispatcher nc p networkMagic nodeKernel noBlockForging = do
6975 (unConfigPath $ ncConfigFile nc)
7076 defaultCardanoConfig
7177
72- (kickoffForwarder, kickoffPrometheusSimple, tracers) <- mkTracers trConfig
78+ let onChainDbEvent = if isJust (ncCanonicalSnapshotOutputPath nc)
79+ then CT. Tracer $ \ case
80+ (ChainDB. TraceLedgerDBEvent
81+ (LedgerDB. LedgerDBSnapshotEvent
82+ (LedgerDB. TookSnapshot _ _ (FallingEdgeWith _)))
83+ ) -> spawnCanonicalizer
84+ _ -> pure ()
85+ else CT. nullTracer
86+
87+ (kickoffForwarder, kickoffPrometheusSimple, tracers) <- mkTracers trConfig onChainDbEvent
7388
7489 -- The NodeInfo DataPoint needs to be fully evaluated and stored
7590 -- before it is queried for the first time by cardano-tracer.
@@ -107,11 +122,12 @@ initTraceDispatcher nc p networkMagic nodeKernel noBlockForging = do
107122
108123 mkTracers
109124 :: TraceConfig
125+ -> Tracer IO (ChainDB. TraceEvent blk )
110126 -> IO ( IO ()
111127 , IO (Maybe String )
112128 , Tracers RemoteAddress LocalAddress blk IO
113129 )
114- mkTracers trConfig = do
130+ mkTracers trConfig onChainDbEvent = do
115131 ekgStore <- EKG. newStore
116132 EKG. registerGcMetrics ekgStore
117133 ekgTrace <- ekgTracer trConfig ekgStore
@@ -144,6 +160,7 @@ initTraceDispatcher nc p networkMagic nodeKernel noBlockForging = do
144160 nodeKernel
145161 stdoutTrace
146162 fwdTracer
163+ onChainDbEvent
147164 (Just ekgTrace)
148165 dpTracer
149166 trConfig
0 commit comments