@@ -15,16 +15,20 @@ module Test.Consensus.PeerSimulator.BlockFetch (
15
15
, startKeepAliveThread
16
16
) where
17
17
18
- import Control.Monad (void )
18
+ import Cardano.Slotting.Slot (SlotNo (unSlotNo ))
19
+ import Control.Monad (join , void )
19
20
import Control.Monad.Class.MonadTime
20
21
import Control.Monad.Class.MonadTimer.SI (MonadTimer )
21
22
import Control.ResourceRegistry
22
- import Control.Tracer (Tracer , nullTracer , traceWith )
23
+ import Control.Tracer (Tracer , contramap , nullTracer , traceWith )
23
24
import Data.Functor.Contravariant ((>$<) )
25
+ import Data.Map (Map )
24
26
import Network.TypedProtocol.Codec (ActiveState , AnyMessage ,
25
27
StateToken , notActiveState )
26
28
import Ouroboros.Consensus.Block (HasHeader )
27
29
import Ouroboros.Consensus.Block.Abstract (Header , Point (.. ))
30
+ import Ouroboros.Consensus.Block.RealPoint
31
+ (pointToWithOriginRealPoint , realPointSlot )
28
32
import Ouroboros.Consensus.Config
29
33
import Ouroboros.Consensus.HeaderValidation (HeaderWithTime (.. ))
30
34
import qualified Ouroboros.Consensus.MiniProtocol.BlockFetch.ClientInterface as BlockFetchClientInterface
@@ -37,6 +41,7 @@ import Ouroboros.Consensus.Node.ProtocolInfo
37
41
import Ouroboros.Consensus.Storage.ChainDB.API
38
42
import Ouroboros.Consensus.Util (ShowProxy )
39
43
import Ouroboros.Consensus.Util.IOLike
44
+ import qualified Ouroboros.Network.AnchoredFragment as AF
40
45
import Ouroboros.Network.BlockFetch (BlockFetchConfiguration (.. ),
41
46
FetchClientRegistry , GenesisBlockFetchConfiguration (.. ),
42
47
blockFetchLogic , bracketFetchClient ,
@@ -68,6 +73,8 @@ import Test.Consensus.PeerSimulator.Trace
68
73
TraceEvent (.. ))
69
74
import Test.Consensus.PointSchedule (BlockFetchTimeout (.. ))
70
75
import Test.Consensus.PointSchedule.Peers (PeerId )
76
+ import qualified Test.CsjModel as CsjModel
77
+ import qualified Test.CsjModel.Jumping as CsjModel
71
78
import Test.Util.Orphans.IOLike ()
72
79
import Test.Util.TestBlock (BlockConfig (TestBlockConfig ), TestBlock )
73
80
@@ -80,8 +87,11 @@ startBlockFetchLogic ::
80
87
-> ChainDB m TestBlock
81
88
-> FetchClientRegistry PeerId (HeaderWithTime TestBlock ) TestBlock m
82
89
-> ChainSyncClientHandleCollection PeerId m TestBlock
90
+ -> SlotNo
91
+ -> StrictTVar m (CsjModel. F (CsjModel. CsjState PeerId ) TestBlock )
92
+ -> StrictTVar m (Map PeerId (CsjModel. Inbox m TestBlock ))
83
93
-> m ()
84
- startBlockFetchLogic enableChainSelStarvation registry tracer chainDb fetchClientRegistry csHandlesCol = do
94
+ startBlockFetchLogic enableChainSelStarvation registry tracer chainDb fetchClientRegistry csHandlesCol jumpSize varCsj varInboxes = do
85
95
let blockFetchConsensusInterface =
86
96
BlockFetchClientInterface. mkBlockFetchConsensusInterface
87
97
nullTracer -- FIXME
@@ -94,6 +104,19 @@ startBlockFetchLogic enableChainSelStarvation registry tracer chainDb fetchClien
94
104
-- This is a syncing test, so we use 'FetchModeGenesis'.
95
105
(pure FetchModeGenesis )
96
106
DiffusionPipeliningOn
107
+ (\ _tracer _cschcol peer -> join $ atomically $ do
108
+ imm <- (pointToWithOriginRealPoint . AF. castPoint . AF. anchorPoint) <$> getCurrentChain chainDb
109
+ CsjModel. rotateDynamo
110
+ (contramap TraceCsjModelEvent tracer)
111
+ CsjModel. CsjEnv {
112
+ CsjModel. minJumpSlots = unSlotNo jumpSize
113
+ , CsjModel. realPointSlot = realPointSlot
114
+ }
115
+ varCsj
116
+ varInboxes
117
+ peer
118
+ imm
119
+ )
97
120
98
121
bfcGenesisBFConfig = if enableChainSelStarvation
99
122
then GenesisBlockFetchConfiguration
0 commit comments