{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NamedFieldPuns #-}
module Test.Consensus.PeerSimulator.ScheduledChainSyncServer
( ChainSyncServerHandlers (..)
, FindIntersect (..)
, RequestNext (..)
, ScheduledChainSyncServer (..)
, runScheduledChainSyncServer
) where
import Control.Tracer (Tracer (Tracer), traceWith)
import Ouroboros.Consensus.Block (Header)
import Ouroboros.Consensus.Block.Abstract (Point (..))
import Ouroboros.Consensus.Util.IOLike (IOLike, MonadSTM (STM))
import Ouroboros.Network.Block (Tip (..))
import Ouroboros.Network.Protocol.ChainSync.Server
( ChainSyncServer (..)
, ServerStIdle (ServerStIdle, recvMsgDoneClient, recvMsgFindIntersect, recvMsgRequestNext)
, ServerStIntersect (SendMsgIntersectFound, SendMsgIntersectNotFound)
, ServerStNext (SendMsgRollBackward, SendMsgRollForward)
)
import Test.Consensus.PeerSimulator.ScheduledServer
( ScheduledServer (..)
, awaitOnlineState
, runHandler
)
import Test.Consensus.PeerSimulator.Trace
( TraceEvent (TraceScheduledChainSyncServerEvent)
, TraceScheduledChainSyncServerEvent (..)
)
import Test.Consensus.PointSchedule.NodeState (NodeState)
import Test.Consensus.PointSchedule.Peers (PeerId)
data RequestNext blk
= RollForward (Header blk) (Tip blk)
| RollBackward (Point blk) (Tip blk)
| AwaitReply
data FindIntersect blk
= IntersectFound (Point blk) (Tip blk)
| IntersectNotFound (Tip blk)
data ChainSyncServerHandlers m state blk
= ChainSyncServerHandlers
{ forall (m :: * -> *) state blk.
ChainSyncServerHandlers m state blk
-> state
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent state blk])
csshRequestNext ::
state ->
STM m (Maybe (RequestNext blk), [TraceScheduledChainSyncServerEvent state blk])
, forall (m :: * -> *) state blk.
ChainSyncServerHandlers m state blk
-> [Point blk]
-> state
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent state blk])
csshFindIntersection ::
[Point blk] ->
state ->
STM m (Maybe (FindIntersect blk), [TraceScheduledChainSyncServerEvent state blk])
}
data ScheduledChainSyncServer m state blk
= ScheduledChainSyncServer
{ forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk -> ScheduledServer m state blk
scssServer :: ScheduledServer m state blk
, forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk
-> Tracer m (TraceScheduledChainSyncServerEvent state blk)
scssTracer :: Tracer m (TraceScheduledChainSyncServerEvent state blk)
, forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk
-> ChainSyncServerHandlers m state blk
scssHandlers :: ChainSyncServerHandlers m state blk
}
scheduledChainSyncServer ::
IOLike m =>
ScheduledChainSyncServer m a blk ->
ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
scheduledChainSyncServer :: forall (m :: * -> *) a blk.
IOLike m =>
ScheduledChainSyncServer m a blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
scheduledChainSyncServer ScheduledChainSyncServer{ChainSyncServerHandlers m a blk
scssHandlers :: forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk
-> ChainSyncServerHandlers m state blk
scssHandlers :: ChainSyncServerHandlers m a blk
scssHandlers, Tracer m (TraceScheduledChainSyncServerEvent a blk)
scssTracer :: forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk
-> Tracer m (TraceScheduledChainSyncServerEvent state blk)
scssTracer :: Tracer m (TraceScheduledChainSyncServerEvent a blk)
scssTracer, ScheduledServer m a blk
scssServer :: forall (m :: * -> *) state blk.
ScheduledChainSyncServer m state blk -> ScheduledServer m state blk
scssServer :: ScheduledServer m a blk
scssServer} =
ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go
where
ChainSyncServerHandlers{a
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent a blk])
csshRequestNext :: forall (m :: * -> *) state blk.
ChainSyncServerHandlers m state blk
-> state
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent state blk])
csshRequestNext :: a
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent a blk])
csshRequestNext, [Point blk]
-> a
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent a blk])
csshFindIntersection :: forall (m :: * -> *) state blk.
ChainSyncServerHandlers m state blk
-> [Point blk]
-> state
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent state blk])
csshFindIntersection :: [Point blk]
-> a
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent a blk])
csshFindIntersection} = ChainSyncServerHandlers m a blk
scssHandlers
go :: ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go =
m (ServerStIdle (Header blk) (Point blk) (Tip blk) m ())
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
forall header point tip (m :: * -> *) a.
m (ServerStIdle header point tip m a)
-> ChainSyncServer header point tip m a
ChainSyncServer (m (ServerStIdle (Header blk) (Point blk) (Tip blk) m ())
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ())
-> m (ServerStIdle (Header blk) (Point blk) (Tip blk) m ())
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
forall a b. (a -> b) -> a -> b
$
ServerStIdle (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIdle (Header blk) (Point blk) (Tip blk) m ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
ServerStIdle
{ m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
recvMsgRequestNext :: m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
recvMsgRequestNext :: m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
recvMsgRequestNext
, [Point blk]
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
recvMsgFindIntersect :: [Point blk]
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
recvMsgFindIntersect :: [Point blk]
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
recvMsgFindIntersect
, m ()
recvMsgDoneClient :: m ()
recvMsgDoneClient :: m ()
recvMsgDoneClient
}
recvMsgRequestNext :: m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
recvMsgRequestNext =
ScheduledServer m a blk
-> String
-> (a
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent a blk]))
-> Tracer m (TraceScheduledChainSyncServerEvent a blk)
-> (RequestNext blk
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall (m :: * -> *) state blk msg traceMsg h.
IOLike m =>
ScheduledServer m state blk
-> String
-> (state -> STM m (Maybe msg, [traceMsg]))
-> Tracer m traceMsg
-> (msg -> m h)
-> m h
runHandler ScheduledServer m a blk
scssServer String
"MsgRequestNext" a
-> STM
m
(Maybe (RequestNext blk),
[TraceScheduledChainSyncServerEvent a blk])
csshRequestNext Tracer m (TraceScheduledChainSyncServerEvent a blk)
scssTracer ((RequestNext blk
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> (RequestNext blk
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a b. (a -> b) -> a -> b
$ \case
RollForward Header blk
header Tip blk
tip -> do
TraceScheduledChainSyncServerEvent a blk -> m ()
trace (TraceScheduledChainSyncServerEvent a blk -> m ())
-> TraceScheduledChainSyncServerEvent a blk -> m ()
forall a b. (a -> b) -> a -> b
$ Header blk -> Tip blk -> TraceScheduledChainSyncServerEvent a blk
forall state blk.
Header blk
-> Tip blk -> TraceScheduledChainSyncServerEvent state blk
TraceRollForward Header blk
header Tip blk
tip
Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a b. (a -> b) -> a -> b
$ ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. a -> Either a b
Left (ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
-> ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. (a -> b) -> a -> b
$ Header blk
-> Tip blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
-> ServerStNext (Header blk) (Point blk) (Tip blk) m ()
forall header tip point (m :: * -> *) a.
header
-> tip
-> ChainSyncServer header point tip m a
-> ServerStNext header point tip m a
SendMsgRollForward Header blk
header Tip blk
tip ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go
RollBackward Point blk
point Tip blk
tip -> do
TraceScheduledChainSyncServerEvent a blk -> m ()
trace (TraceScheduledChainSyncServerEvent a blk -> m ())
-> TraceScheduledChainSyncServerEvent a blk -> m ()
forall a b. (a -> b) -> a -> b
$ Point blk -> Tip blk -> TraceScheduledChainSyncServerEvent a blk
forall state blk.
Point blk
-> Tip blk -> TraceScheduledChainSyncServerEvent state blk
TraceRollBackward Point blk
point Tip blk
tip
Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a b. (a -> b) -> a -> b
$ ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. a -> Either a b
Left (ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
-> ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. (a -> b) -> a -> b
$ Point blk
-> Tip blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
-> ServerStNext (Header blk) (Point blk) (Tip blk) m ()
forall point tip header (m :: * -> *) a.
point
-> tip
-> ChainSyncServer header point tip m a
-> ServerStNext header point tip m a
SendMsgRollBackward Point blk
point Tip blk
tip ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go
RequestNext blk
AwaitReply ->
Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))))
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a b. (a -> b) -> a -> b
$ m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. b -> Either a b
Right (m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
-> m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
-> Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
forall a b. (a -> b) -> a -> b
$ do
m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
restart m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
-> (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (ServerStNext (Header blk) (Point blk) (Tip blk) m ()))
-> m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Right m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
cont -> m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
cont
Left ServerStNext (Header blk) (Point blk) (Tip blk) m ()
msg -> ServerStNext (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ServerStNext (Header blk) (Point blk) (Tip blk) m ()
msg
where
restart :: m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
restart = ScheduledServer m a blk -> m a
forall (m :: * -> *) state blk.
IOLike m =>
ScheduledServer m state blk -> m state
awaitOnlineState ScheduledServer m a blk
scssServer m a
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
-> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
forall a b. m a -> m b -> m b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> m (Either
(ServerStNext (Header blk) (Point blk) (Tip blk) m ())
(m (ServerStNext (Header blk) (Point blk) (Tip blk) m ())))
recvMsgRequestNext
recvMsgFindIntersect :: [Point blk]
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
recvMsgFindIntersect [Point blk]
pts =
ScheduledServer m a blk
-> String
-> (a
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent a blk]))
-> Tracer m (TraceScheduledChainSyncServerEvent a blk)
-> (FindIntersect blk
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall (m :: * -> *) state blk msg traceMsg h.
IOLike m =>
ScheduledServer m state blk
-> String
-> (state -> STM m (Maybe msg, [traceMsg]))
-> Tracer m traceMsg
-> (msg -> m h)
-> m h
runHandler ScheduledServer m a blk
scssServer String
"MsgFindIntersect" ([Point blk]
-> a
-> STM
m
(Maybe (FindIntersect blk),
[TraceScheduledChainSyncServerEvent a blk])
csshFindIntersection [Point blk]
pts) Tracer m (TraceScheduledChainSyncServerEvent a blk)
scssTracer ((FindIntersect blk
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> (FindIntersect blk
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall a b. (a -> b) -> a -> b
$ \case
IntersectNotFound Tip blk
tip -> do
TraceScheduledChainSyncServerEvent a blk -> m ()
trace TraceScheduledChainSyncServerEvent a blk
forall state blk. TraceScheduledChainSyncServerEvent state blk
TraceIntersectionNotFound
ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall a b. (a -> b) -> a -> b
$ Tip blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
-> ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
forall tip header point (m :: * -> *) a.
tip
-> ChainSyncServer header point tip m a
-> ServerStIntersect header point tip m a
SendMsgIntersectNotFound Tip blk
tip ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go
IntersectFound Point blk
intersection Tip blk
tip -> do
TraceScheduledChainSyncServerEvent a blk -> m ()
trace (TraceScheduledChainSyncServerEvent a blk -> m ())
-> TraceScheduledChainSyncServerEvent a blk -> m ()
forall a b. (a -> b) -> a -> b
$ Point blk -> TraceScheduledChainSyncServerEvent a blk
forall state blk.
Point blk -> TraceScheduledChainSyncServerEvent state blk
TraceIntersectionFound Point blk
intersection
ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()))
-> ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
-> m (ServerStIntersect (Header blk) (Point blk) (Tip blk) m ())
forall a b. (a -> b) -> a -> b
$ Point blk
-> Tip blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
-> ServerStIntersect (Header blk) (Point blk) (Tip blk) m ()
forall point tip header (m :: * -> *) a.
point
-> tip
-> ChainSyncServer header point tip m a
-> ServerStIntersect header point tip m a
SendMsgIntersectFound Point blk
intersection Tip blk
tip ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
go
recvMsgDoneClient :: m ()
recvMsgDoneClient =
TraceScheduledChainSyncServerEvent a blk -> m ()
trace TraceScheduledChainSyncServerEvent a blk
forall state blk. TraceScheduledChainSyncServerEvent state blk
TraceClientIsDone
trace :: TraceScheduledChainSyncServerEvent a blk -> m ()
trace = Tracer m (TraceScheduledChainSyncServerEvent a blk)
-> TraceScheduledChainSyncServerEvent a blk -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
traceWith Tracer m (TraceScheduledChainSyncServerEvent a blk)
scssTracer
runScheduledChainSyncServer ::
IOLike m =>
PeerId ->
STM m () ->
STM m (Maybe (NodeState blk)) ->
Tracer m (TraceEvent blk) ->
ChainSyncServerHandlers m (NodeState blk) blk ->
ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
runScheduledChainSyncServer :: forall (m :: * -> *) blk.
IOLike m =>
PeerId
-> STM m ()
-> STM m (Maybe (NodeState blk))
-> Tracer m (TraceEvent blk)
-> ChainSyncServerHandlers m (NodeState blk) blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
runScheduledChainSyncServer PeerId
ssPeerId STM m ()
ssTickStarted STM m (Maybe (NodeState blk))
ssCurrentState Tracer m (TraceEvent blk)
tracer ChainSyncServerHandlers m (NodeState blk) blk
scssHandlers =
ScheduledChainSyncServer m (NodeState blk) blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
forall (m :: * -> *) a blk.
IOLike m =>
ScheduledChainSyncServer m a blk
-> ChainSyncServer (Header blk) (Point blk) (Tip blk) m ()
scheduledChainSyncServer
ScheduledChainSyncServer
{ scssServer :: ScheduledServer m (NodeState blk) blk
scssServer =
ScheduledServer
{ PeerId
ssPeerId :: PeerId
ssPeerId :: PeerId
ssPeerId
, STM m ()
ssTickStarted :: STM m ()
ssTickStarted :: STM m ()
ssTickStarted
, STM m (Maybe (NodeState blk))
ssCurrentState :: STM m (Maybe (NodeState blk))
ssCurrentState :: STM m (Maybe (NodeState blk))
ssCurrentState
, ssCommonTracer :: Tracer m (TraceScheduledServerHandlerEvent (NodeState blk) blk)
ssCommonTracer =
(TraceScheduledServerHandlerEvent (NodeState blk) blk -> m ())
-> Tracer m (TraceScheduledServerHandlerEvent (NodeState blk) blk)
forall (m :: * -> *) a. (a -> m ()) -> Tracer m a
Tracer (Tracer m (TraceEvent blk) -> TraceEvent blk -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
traceWith Tracer m (TraceEvent blk)
tracer (TraceEvent blk -> m ())
-> (TraceScheduledServerHandlerEvent (NodeState blk) blk
-> TraceEvent blk)
-> TraceScheduledServerHandlerEvent (NodeState blk) blk
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PeerId
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk
forall blk.
PeerId
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk
TraceScheduledChainSyncServerEvent PeerId
ssPeerId (TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk)
-> (TraceScheduledServerHandlerEvent (NodeState blk) blk
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk)
-> TraceScheduledServerHandlerEvent (NodeState blk) blk
-> TraceEvent blk
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TraceScheduledServerHandlerEvent (NodeState blk) blk
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
forall state blk.
TraceScheduledServerHandlerEvent state blk
-> TraceScheduledChainSyncServerEvent state blk
TraceHandlerEventCS)
}
, scssTracer :: Tracer m (TraceScheduledChainSyncServerEvent (NodeState blk) blk)
scssTracer = (TraceScheduledChainSyncServerEvent (NodeState blk) blk -> m ())
-> Tracer
m (TraceScheduledChainSyncServerEvent (NodeState blk) blk)
forall (m :: * -> *) a. (a -> m ()) -> Tracer m a
Tracer (Tracer m (TraceEvent blk) -> TraceEvent blk -> m ()
forall (m :: * -> *) a. Tracer m a -> a -> m ()
traceWith Tracer m (TraceEvent blk)
tracer (TraceEvent blk -> m ())
-> (TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk)
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PeerId
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk
forall blk.
PeerId
-> TraceScheduledChainSyncServerEvent (NodeState blk) blk
-> TraceEvent blk
TraceScheduledChainSyncServerEvent PeerId
ssPeerId)
, ChainSyncServerHandlers m (NodeState blk) blk
scssHandlers :: ChainSyncServerHandlers m (NodeState blk) blk
scssHandlers :: ChainSyncServerHandlers m (NodeState blk) blk
scssHandlers
}