-> IO (Maybe AnalysisResult)
analyse DBAnalyserConfig{analysis, confLimit, dbDir, selectDB, validation, verbose} args =
withRegistry $ \registry -> do
-
chainDBTracer <- mkTracer verbose
-
analysisTracer <- mkTracer True
+
chainDBTracer <- mkTracer lock verbose
+
analysisTracer <- mkTracer lock True
ProtocolInfo { pInfoInitLedger = genesisLedger, pInfoConfig = cfg } <-
let chunkInfo = Node.nodeImmutableDbChunkInfo (configStorage cfg)
putStrLn $ "ChainDB tip: " ++ show tipPoint
-
mkTracer False = return nullTracer
+
mkTracer _ False = return nullTracer
+
mkTracer lock True = do
startTime <- getMonotonicTime
-
return $ Tracer $ \ev -> do
+
return $ Tracer $ \ev -> withLock $ do
traceTime <- getMonotonicTime
let diff = diffTime traceTime startTime
hPutStrLn stderr $ concat ["[", show diff, "] ", show ev]
+
withLock = bracket_ (takeMVar lock) (putMVar lock ())
immValidationPolicy = case (analysis, validation) of
(_, Just ValidateAllBlocks) -> ImmutableDB.ValidateAllChunks