2525--
2626module Ouroboros.Consensus.Genesis.Governor (
2727 DensityBounds (.. )
28+ , GDDDebugInfo (.. )
2829 , GDDStateView (.. )
2930 , TraceGDDEvent (.. )
3031 , densityDisconnect
@@ -38,6 +39,8 @@ import Data.Bifunctor (second)
3839import Data.Containers.ListUtils (nubOrd )
3940import Data.Foldable (for_ , toList )
4041import Data.Functor.Compose (Compose (.. ))
42+ import Data.List.NonEmpty (NonEmpty )
43+ import qualified Data.List.NonEmpty as NE
4144import Data.Map.Strict (Map )
4245import qualified Data.Map.Strict as Map
4346import 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+
438454deriving stock instance
439455 ( GetHeader blk , Show (Header blk ), Show peer
440456 ) => Show (TraceGDDEvent peer blk )
0 commit comments