From 71c79d828acfd7362938b94c7aa1b8e64bcb83b9 Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Mon, 15 Dec 2025 12:24:51 +0100 Subject: [PATCH 1/2] Do not elide eb hash in traces --- cabal.project | 7 ++----- .../src/Cardano/Node/Tracing/Tracers/NodeToNode.hs | 5 +++-- .../src/Cardano/Tracing/OrphanInstances/Network.hs | 5 +++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/cabal.project b/cabal.project index 3bc1c83c3fa..2b3d57add58 100644 --- a/cabal.project +++ b/cabal.project @@ -101,15 +101,12 @@ constraints: source-repository-package type: git location: https://github.com/IntersectMBO/ouroboros-consensus - tag: a2e3c598b96efa1e2add0bc7b893a7a007ace606 - --sha256: sha256-uMImzqUvdDCyuso/fN0BEJuhj1BuT8U1Gafbhz4CBRU= + tag: e3ffce853e85d6e5e9ff6c7c078816fea689a5b1 + --sha256: sha256-tFUNTbyhnaaNv8AFSCSs+pPhQydGgOuhfJMGv3pvE1M= subdir: ouroboros-consensus ouroboros-consensus-cardano - ouroboros-consensus-protocol ouroboros-consensus-diffusion - sop-extras - strict-sop-core -- Points to ouroboros-network/nfrisby/leios-202511-demo source-repository-package diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs index da4acd4d472..0ffd771c84f 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs @@ -37,7 +37,7 @@ import Network.TypedProtocol.Codec (AnyMessage (AnyMessageAndAgency)) import qualified Data.Bits as Bits import qualified Data.Vector as V -import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash) +import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash, hashLeiosEb) import qualified LeiosDemoOnlyTestFetch as LF import qualified LeiosDemoOnlyTestNotify as LN @@ -508,6 +508,7 @@ instance LogFormatting (AnyMessage (LN.LeiosNotify LeiosPoint ())) where instance LogFormatting (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) where forHuman = showT + -- FIXME: Duplicated (orphan!) instance with Cardano.Tracing.OrphanInstances.Network forMachine _dtal (AnyMessageAndAgency _stok msg) = case msg of LF.MsgLeiosBlockRequest (MkLeiosPoint ebSlot ebHash) -> @@ -518,7 +519,7 @@ instance LogFormatting (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) w LF.MsgLeiosBlock eb -> mconcat [ "kind" .= String "MsgLeiosBlock" - , "eb" .= String "" + , "eb" .= hashLeiosEb eb , "ebBytesSize" .= Number (fromIntegral $ leiosEbBytesSize eb) ] diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs index 87055bddf1d..2e5f3799ea3 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -144,7 +144,7 @@ import qualified Network.TypedProtocol.Stateful.Codec as Stateful import qualified Data.Bits as Bits import qualified Data.Vector as V -import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash) +import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash, hashLeiosEb) import LeiosDemoTypes (TraceLeiosKernel, TraceLeiosPeer, traceLeiosKernelToObject, traceLeiosPeerToObject) import qualified LeiosDemoOnlyTestFetch as LF import qualified LeiosDemoOnlyTestNotify as LN @@ -2924,6 +2924,7 @@ instance ToObject peer trTransformer = trStructured instance ToObject (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) where + -- FIXME: Duplicated (orphan!) instance with Cardano.Node.Tracing.Tracers.NodeToNode toObject _verb (AnyMessageAndAgency _stok msg) = case msg of LF.MsgLeiosBlockRequest (MkLeiosPoint ebSlot ebHash) -> @@ -2934,7 +2935,7 @@ instance ToObject (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) where LF.MsgLeiosBlock eb -> mconcat [ "kind" .= String "MsgLeiosBlock" - , "eb" .= String "" + , "eb" .= hashLeiosEb eb , "ebBytesSize" .= Number (fromIntegral $ leiosEbBytesSize eb) ] From b6a9eb6d692ffbfe412c0dc3377c33a08eb3c55f Mon Sep 17 00:00:00 2001 From: Sebastian Nagel Date: Mon, 15 Dec 2025 15:28:35 +0100 Subject: [PATCH 2/2] Upstream trace conversion into ouroboros-consensus --- cabal.project | 4 +- cardano-node/cardano-node.cabal | 1 - .../Node/Tracing/Tracers/NodeToNode.hs | 57 ++----------- .../Tracing/OrphanInstances/Network.hs | 84 +++++-------------- 4 files changed, 28 insertions(+), 118 deletions(-) diff --git a/cabal.project b/cabal.project index 2b3d57add58..191d2fd6e16 100644 --- a/cabal.project +++ b/cabal.project @@ -101,8 +101,8 @@ constraints: source-repository-package type: git location: https://github.com/IntersectMBO/ouroboros-consensus - tag: e3ffce853e85d6e5e9ff6c7c078816fea689a5b1 - --sha256: sha256-tFUNTbyhnaaNv8AFSCSs+pPhQydGgOuhfJMGv3pvE1M= + tag: ed637941fc1a252ecdf2a1b1600ef95d17b52101 + --sha256: sha256-hvK7R9f28LV9daPn7PFBJZexh2cbsZGDYEGNdvew4nw= subdir: ouroboros-consensus ouroboros-consensus-cardano diff --git a/cardano-node/cardano-node.cabal b/cardano-node/cardano-node.cabal index da31ad77524..1624a529e08 100644 --- a/cardano-node/cardano-node.cabal +++ b/cardano-node/cardano-node.cabal @@ -226,7 +226,6 @@ library , transformers-except , typed-protocols >= 0.3 , typed-protocols-stateful >= 0.3 - , vector , yaml executable cardano-node diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs index 0ffd771c84f..ccddf7ad479 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/NodeToNode.hs @@ -23,23 +23,22 @@ 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 (Array, Number, String), (.=)) +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)) -import qualified Data.Bits as Bits -import qualified Data.Vector as V -import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash, hashLeiosEb) import qualified LeiosDemoOnlyTestFetch as LF import qualified LeiosDemoOnlyTestNotify as LN +import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, + messageLeiosFetchToObject, prettyEbHash) -------------------------------------------------------------------------------- -- BlockFetch Tracer @@ -508,50 +507,8 @@ instance LogFormatting (AnyMessage (LN.LeiosNotify LeiosPoint ())) where instance LogFormatting (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) where forHuman = showT - -- FIXME: Duplicated (orphan!) instance with Cardano.Tracing.OrphanInstances.Network - forMachine _dtal (AnyMessageAndAgency _stok msg) = case msg of - - LF.MsgLeiosBlockRequest (MkLeiosPoint ebSlot ebHash) -> - mconcat [ "kind" .= String "MsgLeiosBlockRequest" - , "ebSlot" .= ebSlot - , "ebHash" .= ebHash - ] - - LF.MsgLeiosBlock eb -> - mconcat [ "kind" .= String "MsgLeiosBlock" - , "eb" .= hashLeiosEb eb - , "ebBytesSize" .= Number (fromIntegral $ leiosEbBytesSize eb) - ] - - LF.MsgLeiosBlockTxsRequest (MkLeiosPoint ebSlot ebHash) bitmaps -> - mconcat [ "kind" .= String "MsgLeiosBlockTxsRequest" - , "ebSlot" .= ebSlot - , "ebHash" .= ebHash - , "numTxs" .= Number (fromIntegral $ sum $ map (Bits.popCount . snd) bitmaps) - , "bitmaps" .= Array (V.fromList $ map (String . pack . prettyBitmap) bitmaps) - ] - - LF.MsgLeiosBlockTxs txs -> - mconcat [ "kind" .= String "MsgLeiosBlockTxs" - , "numTxs" .= Number (fromIntegral (V.length txs)) - , "txsBytesSize" .= Number (fromIntegral $ V.sum $ V.map leiosTxBytesSize txs) - , "txs" .= String "" - ] - - -- LF.MsgLeiosVotesRequest - -- LF.MsgLeiosVoteDelivery - - -- LF.MsgLeiosBlockRangeRequest - -- LF.MsgLeiosNextBlockAndTxsInRange - -- LF.MsgLeiosLastBlockAndTxsInRange - - LF.MsgDone -> - mconcat [ "kind" .= String "MsgDone" - ] - - where --- agency :: Aeson.Object --- agency = "agency" .= show stok + forMachine _dtal (AnyMessageAndAgency _stok msg) = + messageLeiosFetchToObject msg instance MetaTrace (AnyMessage (LN.LeiosNotify LeiosPoint ())) where namespaceFor (AnyMessageAndAgency _stok msg) = case msg of diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs index 2e5f3799ea3..35b4dda95e3 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -27,20 +27,20 @@ module Cardano.Tracing.OrphanInstances.Network , FetchDecisionToJSON (..) ) where +import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..)) +import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable (..)) +import Cardano.Network.Types (LedgerStateJudgement (..)) import Cardano.Node.Queries (ConvertTxId) import Cardano.Tracing.OrphanInstances.Common import Cardano.Tracing.Render +import qualified Ouroboros.Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano +import qualified Ouroboros.Cardano.Network.PeerSelection.Governor.Types as Cardano +import qualified Ouroboros.Cardano.Network.PublicRootPeers as Cardano.PublicRootPeers import Ouroboros.Consensus.Block (ConvertRawHash (..), Header, getHeader) import Ouroboros.Consensus.Ledger.Query (BlockQuery, Query) import Ouroboros.Consensus.Ledger.SupportsMempool (ApplyTxErr, GenTx, GenTxId, HasTxs (..), TxId, txId) import Ouroboros.Consensus.Node.Run (RunNode, estimateBlockSize) -import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers(..)) -import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable(..)) -import Cardano.Network.Types (LedgerStateJudgement(..)) -import qualified Ouroboros.Cardano.Network.PeerSelection.Governor.PeerSelectionState as Cardano -import qualified Ouroboros.Cardano.Network.PeerSelection.Governor.Types as Cardano -import qualified Ouroboros.Cardano.Network.PublicRootPeers as Cardano.PublicRootPeers import qualified Ouroboros.Network.AnchoredFragment as AF import qualified Ouroboros.Network.AnchoredSeq as AS import Ouroboros.Network.Block @@ -51,15 +51,14 @@ import Ouroboros.Network.BlockFetch.Decision (FetchDecision, FetchDecl import qualified Ouroboros.Network.BlockFetch.Decision.Trace as BlockFetch import Ouroboros.Network.ConnectionHandler (ConnectionHandlerTrace (..)) import Ouroboros.Network.ConnectionId (ConnectionId (..)) -import Ouroboros.Network.ConnectionManager.Core as ConnMgr (Trace (..)) import Ouroboros.Network.ConnectionManager.ConnMap (ConnMap (..), LocalAddr (..)) +import Ouroboros.Network.ConnectionManager.Core as ConnMgr (Trace (..)) import Ouroboros.Network.ConnectionManager.State (ConnStateId (..)) import Ouroboros.Network.ConnectionManager.Types (AbstractState (..), - ConnectionManagerCounters (..), - OperationResult (..)) + ConnectionManagerCounters (..), OperationResult (..)) import qualified Ouroboros.Network.ConnectionManager.Types as ConnMgr -import qualified Ouroboros.Network.Diffusion.Common as Diffusion import Ouroboros.Network.DeltaQ (GSV (..), PeerGSV (..)) +import qualified Ouroboros.Network.Diffusion.Common as Diffusion import Ouroboros.Network.Driver.Limits (ProtocolLimitFailure (..)) import qualified Ouroboros.Network.Driver.Stateful as Stateful import Ouroboros.Network.ExitPolicy (RepromoteDelay (..)) @@ -73,10 +72,10 @@ import qualified Ouroboros.Network.NodeToClient as NtC import Ouroboros.Network.NodeToNode (ErrorPolicyTrace (..), NodeToNodeVersion (..), NodeToNodeVersionData (..), RemoteAddress, TraceSendRecv (..), WithAddr (..)) import qualified Ouroboros.Network.NodeToNode as NtN -import Ouroboros.Network.PeerSelection.Governor (AssociationMode (..), DebugPeerSelection (..), - DebugPeerSelectionState (..), PeerSelectionCounters, PeerSelectionState (..), - PeerSelectionTargets (..), PeerSelectionView (..), TracePeerSelection (..), - peerSelectionStateToCounters) +import Ouroboros.Network.PeerSelection.Governor (AssociationMode (..), + DebugPeerSelection (..), DebugPeerSelectionState (..), PeerSelectionCounters, + PeerSelectionState (..), PeerSelectionTargets (..), PeerSelectionView (..), + TracePeerSelection (..), peerSelectionStateToCounters) import Ouroboros.Network.PeerSelection.LedgerPeers import Ouroboros.Network.PeerSelection.PeerSharing (PeerSharing (..)) import Ouroboros.Network.PeerSelection.PeerStateActions (PeerSelectionActionsTrace (..)) @@ -89,7 +88,7 @@ import Ouroboros.Network.PeerSelection.RootPeersDNS.PublicRootPeers import Ouroboros.Network.PeerSelection.State.KnownPeers (KnownPeerInfo (..)) import qualified Ouroboros.Network.PeerSelection.State.KnownPeers as KnownPeers import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValency (..), - LocalRootPeers, WarmValency (..), LocalRootConfig (..)) + LocalRootConfig (..), LocalRootPeers, WarmValency (..)) import qualified Ouroboros.Network.PeerSelection.State.LocalRootPeers as LocalRootPeers import Ouroboros.Network.PeerSelection.Types (PeerStatus (..)) import Ouroboros.Network.Protocol.BlockFetch.Type (BlockFetch, Message (..)) @@ -140,14 +139,11 @@ import Network.Socket (SockAddr (..)) import Network.TypedProtocol.Codec (AnyMessage (AnyMessageAndAgency)) import qualified Network.TypedProtocol.Stateful.Codec as Stateful -{- HLINT ignore "Use record patterns" -} - -import qualified Data.Bits as Bits -import qualified Data.Vector as V -import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, leiosEbBytesSize, leiosTxBytesSize, prettyBitmap, prettyEbHash, hashLeiosEb) -import LeiosDemoTypes (TraceLeiosKernel, TraceLeiosPeer, traceLeiosKernelToObject, traceLeiosPeerToObject) import qualified LeiosDemoOnlyTestFetch as LF import qualified LeiosDemoOnlyTestNotify as LN +import LeiosDemoTypes (EbHash (..), LeiosEb, LeiosPoint (..), LeiosTx, TraceLeiosKernel, + TraceLeiosPeer, messageLeiosFetchToObject, prettyEbHash, + traceLeiosKernelToObject, traceLeiosPeerToObject) -- -- * instances of @HasPrivacyAnnotation@ and @HasSeverityAnnotation@ @@ -2924,50 +2920,8 @@ instance ToObject peer trTransformer = trStructured instance ToObject (AnyMessage (LF.LeiosFetch LeiosPoint LeiosEb LeiosTx)) where - -- FIXME: Duplicated (orphan!) instance with Cardano.Node.Tracing.Tracers.NodeToNode - toObject _verb (AnyMessageAndAgency _stok msg) = case msg of - - LF.MsgLeiosBlockRequest (MkLeiosPoint ebSlot ebHash) -> - mconcat [ "kind" .= String "MsgLeiosBlockRequest" - , "ebSlot" .= ebSlot - , "ebHash" .= ebHash - ] - - LF.MsgLeiosBlock eb -> - mconcat [ "kind" .= String "MsgLeiosBlock" - , "eb" .= hashLeiosEb eb - , "ebBytesSize" .= Number (fromIntegral $ leiosEbBytesSize eb) - ] - - LF.MsgLeiosBlockTxsRequest (MkLeiosPoint ebSlot ebHash) bitmaps -> - mconcat [ "kind" .= String "MsgLeiosBlockTxsRequest" - , "ebSlot" .= ebSlot - , "ebHash" .= ebHash - , "numTxs" .= Number (fromIntegral $ sum $ map (Bits.popCount . snd) bitmaps) - , "bitmaps" .= Array (V.fromList $ map (String . pack . prettyBitmap) bitmaps) - ] - - LF.MsgLeiosBlockTxs txs -> - mconcat [ "kind" .= String "MsgLeiosBlockTxs" - , "numTxs" .= Number (fromIntegral (V.length txs)) - , "txsBytesSize" .= Number (fromIntegral $ V.sum $ V.map leiosTxBytesSize txs) - , "txs" .= String "" - ] - - -- LF.MsgLeiosVotesRequest - -- LF.MsgLeiosVoteDelivery - - -- LF.MsgLeiosBlockRangeRequest - -- LF.MsgLeiosNextBlockAndTxsInRange - -- LF.MsgLeiosLastBlockAndTxsInRange - - LF.MsgDone -> - mconcat [ "kind" .= String "MsgDone" - ] - - where --- agency :: Aeson.Object --- agency = "agency" .= show stok + toObject _verb (AnyMessageAndAgency _stok msg) = + messageLeiosFetchToObject msg instance Transformable Text IO TraceLeiosKernel where trTransformer = trStructured