Skip to content

Commit 6217f7f

Browse files
committed
GDD: add separate trace event for disconnections
1 parent 1eff83b commit 6217f7f

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

ouroboros-consensus-diffusion/changelog.d/20240912_105915_alexander.esgen_gdd_disconnect_trace.md

Whitespace-only changes.

ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/PeerSimulator/Trace.hs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@ module Test.Consensus.PeerSimulator.Trace (
2323
import Control.Tracer (Tracer (Tracer), contramap, traceWith)
2424
import Data.Bifunctor (second)
2525
import Data.List (intersperse)
26+
import qualified Data.List.NonEmpty as NE
2627
import Data.Time.Clock (DiffTime, diffTimeToPicoseconds)
2728
import Ouroboros.Consensus.Block (GenesisWindow (..), Header, Point,
2829
WithOrigin (NotOrigin, Origin), succWithOrigin)
2930
import Ouroboros.Consensus.Genesis.Governor (DensityBounds (..),
30-
TraceGDDEvent (..))
31+
GDDDebugInfo (..), TraceGDDEvent (..))
3132
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client
3233
(TraceChainSyncClientEvent (..))
3334
import Ouroboros.Consensus.MiniProtocol.ChainSync.Client.Jumping
@@ -490,7 +491,15 @@ showPeers = map (\ (peer, v) -> " " ++ condense peer ++ ": " ++ v)
490491
-- * Other utilities
491492
terseGDDEvent :: TraceGDDEvent PeerId TestBlock -> String
492493
terseGDDEvent = \case
493-
TraceGDDEvent {sgen = GenesisWindow sgen, curChain, bounds, candidates, candidateSuffixes, losingPeers, loeHead} ->
494+
TraceGDDDisconnected peers -> "GDD | Disconnected " <> show (NE.toList peers)
495+
TraceGDDDebug GDDDebugInfo {
496+
sgen = GenesisWindow sgen
497+
, curChain, bounds
498+
, candidates
499+
, candidateSuffixes
500+
, losingPeers
501+
, loeHead
502+
} ->
494503
unlines $ [
495504
"GDD | Window: " ++ window sgen loeHead,
496505
" Selection: " ++ terseHFragment curChain,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
### Breaking
2+
3+
- Made `TraceGDDEvent` into a sum type, added a new terse constructor for when
4+
we disconnect from peers (this is supposed to get a high severity in the
5+
tracing system).

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Genesis/Governor.hs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
--
2626
module Ouroboros.Consensus.Genesis.Governor (
2727
DensityBounds (..)
28+
, GDDDebugInfo (..)
2829
, GDDStateView (..)
2930
, TraceGDDEvent (..)
3031
, densityDisconnect
@@ -38,6 +39,8 @@ import Data.Bifunctor (second)
3839
import Data.Containers.ListUtils (nubOrd)
3940
import Data.Foldable (for_, toList)
4041
import Data.Functor.Compose (Compose (..))
42+
import Data.List.NonEmpty (NonEmpty)
43+
import qualified Data.List.NonEmpty as NE
4144
import Data.Map.Strict (Map)
4245
import qualified Data.Map.Strict as Map
4346
import Data.Maybe (mapMaybe, maybeToList)
@@ -215,9 +218,12 @@ evaluateGDD cfg tracer stateView = do
215218
densityDisconnect sgen (configSecurityParam cfg) states candidateSuffixes loeFrag
216219
loeHead = AF.headAnchor loeFrag
217220

218-
traceWith tracer TraceGDDEvent {sgen, curChain, bounds, candidates, candidateSuffixes, losingPeers, loeHead}
221+
traceWith tracer $ TraceGDDDebug
222+
GDDDebugInfo {sgen, curChain, bounds, candidates, candidateSuffixes, losingPeers, loeHead}
219223

220-
for_ losingPeers $ \peer -> killActions Map.! peer
224+
whenJust (NE.nonEmpty losingPeers) $ \losingPeersNE -> do
225+
for_ losingPeersNE $ \peer -> killActions Map.! peer
226+
traceWith tracer $ TraceGDDDisconnected losingPeersNE
221227

222228
pure loeFrag
223229

@@ -424,8 +430,8 @@ densityDisconnect (GenesisWindow sgen) (SecurityParam k) states candidateSuffixe
424430
-- after the intersection. If both chains agree on the next header after
425431
-- the intersection, we don't disconnect peer1 either.
426432

427-
data TraceGDDEvent peer blk =
428-
TraceGDDEvent {
433+
data GDDDebugInfo peer blk =
434+
GDDDebugInfo {
429435
bounds :: [(peer, DensityBounds blk)],
430436
curChain :: AnchoredFragment (Header blk),
431437
candidates :: [(peer, AnchoredFragment (Header blk))],
@@ -435,6 +441,16 @@ data TraceGDDEvent peer blk =
435441
sgen :: GenesisWindow
436442
}
437443

444+
deriving stock instance
445+
( GetHeader blk, Show (Header blk), Show peer
446+
) => Show (GDDDebugInfo peer blk)
447+
448+
data TraceGDDEvent peer blk =
449+
-- | The GDD disconnected from the given peers due to insufficient density.
450+
TraceGDDDisconnected (NonEmpty peer)
451+
|
452+
TraceGDDDebug (GDDDebugInfo peer blk)
453+
438454
deriving stock instance
439455
( GetHeader blk, Show (Header blk), Show peer
440456
) => Show (TraceGDDEvent peer blk)

0 commit comments

Comments
 (0)