ouroboros-consensus-diffusion-0.16.0.0: Integration for the Ouroboros Network layer
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ouroboros.Consensus.Node.Tracers

Synopsis

All tracers of a node bundled together

type Tracers m remotePeer localPeer blk = Tracers' remotePeer localPeer blk (Tracer m) Source #

A record of Tracers for the node.

data Tracers' remotePeer localPeer blk f Source #

Instances

Instances details
(∀ a. Semigroup (f a)) ⇒ Semigroup (Tracers' remotePeer localPeer blk f) Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers

Methods

(<>)Tracers' remotePeer localPeer blk f → Tracers' remotePeer localPeer blk f → Tracers' remotePeer localPeer blk f #

sconcatNonEmpty (Tracers' remotePeer localPeer blk f) → Tracers' remotePeer localPeer blk f #

stimesIntegral b ⇒ b → Tracers' remotePeer localPeer blk f → Tracers' remotePeer localPeer blk f #

nullTracersMonad m ⇒ Tracers m remotePeer localPeer blk Source #

Use a nullTracer for each of the Tracers in Tracers'

showTracers ∷ (Show blk, Show (GenTx blk), Show (Validated (GenTx blk)), Show (GenTxId blk), Show (ApplyTxErr blk), Show (Header blk), Show (ForgeStateInfo blk), Show (ForgeStateUpdateError blk), Show (CannotForge blk), Show remotePeer, LedgerSupportsProtocol blk) ⇒ Tracer m StringTracers m remotePeer localPeer blk Source #

Specific tracers

data TraceForgeEvent blk Source #

Trace the forging of a block as a slot leader.

The flow of trace events here can be visualized as follows:

TraceStartLeadershipCheck
         |
         +--- TraceSlotIsImmutable (leadership check failed)
         |
         +--- TraceBlockFromFuture (leadership check failed)
         |
 TraceBlockContext
         |
         +--- TraceNoLedgerState (leadership check failed)
         |
  TraceLedgerState
         |
         +--- TraceNoLedgerView (leadership check failed)
         |
  TraceLedgerView
         |
         +--- TraceForgeStateUpdateError (leadership check failed)
         |
         +--- TraceNodeCannotForge (leadership check failed)
         |
         +--- TraceNodeNotLeader
         |
  TraceNodeIsLeader
         |
   TraceForgedBlock
         |
         +--- TraceDidntAdoptBlock
         |
         +--- TraceForgedInvalidBlock
         |
 TraceAdoptedBlock

Constructors

TraceStartLeadershipCheck SlotNo

Start of the leadership check

We record the current slot number.

TraceSlotIsImmutable SlotNo (Point blk) BlockNo

Leadership check failed: the tip of the ImmutableDB inhabits the current slot

This might happen in two cases.

  1. the clock moved backwards, on restart we ignored everything from the VolatileDB since it's all in the future, and now the tip of the ImmutableDB points to a block produced in the same slot we're trying to produce a block in
  2. k = 0 and we already adopted a block from another leader of the same slot.

We record both the current slot number as well as the tip of the ImmutableDB.

See also https://github.com/IntersectMBO/ouroboros-network/issues/1462

TraceBlockFromFuture SlotNo SlotNo

Leadership check failed: the current chain contains a block from a slot after the current slot

This can only happen if the system is under heavy load.

We record both the current slot number as well as the slot number of the block at the tip of the chain.

See also https://github.com/IntersectMBO/ouroboros-network/issues/1462

TraceBlockContext SlotNo BlockNo (Point blk)

We found out to which block we are going to connect the block we are about to forge.

We record the current slot number, the block number of the block to connect to and its point.

Note that block number of the block we will try to forge is one more than the recorded block number.

TraceNoLedgerState SlotNo (Point blk)

Leadership check failed: we were unable to get the ledger state for the point of the block we want to connect to

This can happen if after choosing which block to connect to the node switched to a different fork. We expect this to happen only rather rarely, so this certainly merits a warning; if it happens a lot, that merits an investigation.

We record both the current slot number as well as the point of the block we attempt to connect the new block to (that we requested the ledger state for).

TraceLedgerState SlotNo (Point blk)

We obtained a ledger state for the point of the block we want to connect to

We record both the current slot number as well as the point of the block we attempt to connect the new block to (that we requested the ledger state for).

TraceNoLedgerView SlotNo OutsideForecastRange

Leadership check failed: we were unable to get the ledger view for the current slot number

This will only happen if there are many missing blocks between the tip of our chain and the current slot.

We record also the failure returned by forecastFor.

TraceLedgerView SlotNo

We obtained a ledger view for the current slot number

We record the current slot number.

TraceForgeStateUpdateError SlotNo (ForgeStateUpdateError blk)

Updating the forge state failed.

For example, the KES key could not be evolved anymore.

We record the error returned by updateForgeState.

TraceNodeCannotForge SlotNo (CannotForge blk)

We did the leadership check and concluded that we should lead and forge a block, but cannot.

This should only happen rarely and should be logged with warning severity.

Records why we cannot forge a block.

TraceNodeNotLeader SlotNo

We did the leadership check and concluded we are not the leader

We record the current slot number

TraceNodeIsLeader SlotNo

We did the leadership check and concluded we are the leader

The node will soon forge; it is about to read its transactions from the Mempool. This will be followed by TraceForgedBlock.

TraceForgeTickedLedgerState SlotNo (Point blk)

We ticked the ledger state for the slot of the to-be-forged block.

We record the current slot number and the point of the block we attempt to connect the new block to.

TraceForgingMempoolSnapshot SlotNo (Point blk) (ChainHash blk) SlotNo

We acquired a mempool snapshot.

We record the the point of the state we are starting from (ie the point from TraceLedgerState) and point the mempool had most last synced wrt.

TraceForgedBlock SlotNo (Point blk) blk MempoolSize

We forged a block

We record the current slot number, the point of the predecessor, the block itself, and the total size of the mempool snapshot at the time we produced the block (which may be significantly larger than the block, due to maximum block size)

This will be followed by one of three messages:

  • TraceAdoptedBlock (normally)
  • TraceDidntAdoptBlock (rarely)
  • TraceForgedInvalidBlock (hopefully never -- this would indicate a bug)
TraceDidntAdoptBlock SlotNo blk

We did not adopt the block we produced, but the block was valid. We must have adopted a block that another leader of the same slot produced before we got the chance of adopting our own block. This is very rare, this warrants a warning.

TraceAdoptionThreadDied SlotNo blk

We did not adopt the block we produced, because the adoption thread died. Most likely because of an async exception.

TraceForgedInvalidBlock SlotNo blk (InvalidBlockReason blk)

We forged a block that is invalid according to the ledger in the ChainDB. This means there is an inconsistency between the mempool validation and the ledger validation. This is a serious error!

TraceAdoptedBlock SlotNo blk [Validated (GenTx blk)]

We adopted the block we produced, we also trace the transactions that were adopted.

Instances

Instances details
(LedgerSupportsProtocol blk, Show blk, Show (Validated (GenTx blk)), Show (ForgeStateUpdateError blk), Show (CannotForge blk)) ⇒ Show (TraceForgeEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers

Methods

showsPrecIntTraceForgeEvent blk → ShowS #

showTraceForgeEvent blk → String #

showList ∷ [TraceForgeEvent blk] → ShowS #

(LedgerSupportsProtocol blk, Eq blk, Eq (Validated (GenTx blk)), Eq (ForgeStateUpdateError blk), Eq (CannotForge blk)) ⇒ Eq (TraceForgeEvent blk) Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers

Methods

(==)TraceForgeEvent blk → TraceForgeEvent blk → Bool #

(/=)TraceForgeEvent blk → TraceForgeEvent blk → Bool #

data TraceLabelCreds a Source #

Label a forge-related trace event with the label associated with its credentials.

This is useful when a node is running with multiple sets of credentials.

Constructors

TraceLabelCreds Text a 

Instances

Instances details
Functor TraceLabelCreds Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers

Methods

fmap ∷ (a → b) → TraceLabelCreds a → TraceLabelCreds b #

(<$) ∷ a → TraceLabelCreds b → TraceLabelCreds a #

Show a ⇒ Show (TraceLabelCreds a) Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers

Eq a ⇒ Eq (TraceLabelCreds a) Source # 
Instance details

Defined in Ouroboros.Consensus.Node.Tracers