Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data FetchClientRegistry peer header block m
- newFetchClientRegistry :: MonadSTM m => m ( FetchClientRegistry peer header block m)
- bracketFetchClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, MonadMask m, Ord peer) => FetchClientRegistry peer header block m -> NodeToNodeVersion -> peer -> ( FetchClientContext header block m -> m a) -> m a
- bracketKeepAliveClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, MonadMask m, Ord peer) => FetchClientRegistry peer header block m -> peer -> ( StrictTVar m ( Map peer PeerGSV ) -> m a) -> m a
- bracketSyncWithFetchClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, Ord peer) => FetchClientRegistry peer header block m -> peer -> m a -> m a
- setFetchClientContext :: MonadSTM m => FetchClientRegistry peer header block m -> Tracer m ( TraceLabelPeer peer ( TraceFetchClientState header)) -> ( WhetherReceivingTentativeBlocks -> STM m ( FetchClientPolicy header block m)) -> m ()
-
data
FetchClientPolicy
header block m =
FetchClientPolicy
{
- blockFetchSize :: header -> SizeInBytes
- blockMatchesHeader :: header -> block -> Bool
- addFetchedBlock :: Point block -> block -> m ()
- blockForgeUTCTime :: FromConsensus block -> STM m UTCTime
- readFetchClientsStatus :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer ( PeerFetchStatus header))
- readFetchClientsStateVars :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer ( FetchClientStateVars m header))
- readPeerGSVs :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer PeerGSV )
Registry of block fetch clients
data FetchClientRegistry peer header block m Source #
A registry for the threads that are executing the client side of the
BlockFetch
protocol to communicate with our peers.
The registry contains the shared variables we use to communicate with these threads, both to track their status and to provide instructions.
The threads add/remove themselves to/from this registry when they start up and shut down.
newFetchClientRegistry :: MonadSTM m => m ( FetchClientRegistry peer header block m) Source #
bracketFetchClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, MonadMask m, Ord peer) => FetchClientRegistry peer header block m -> NodeToNodeVersion -> peer -> ( FetchClientContext header block m -> m a) -> m a Source #
This is needed to start a block fetch client. It provides the required
FetchClientContext
. It registers and unregisters the fetch client on
start and end.
It also manages synchronisation with the corresponding chain sync client.
bracketKeepAliveClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, MonadMask m, Ord peer) => FetchClientRegistry peer header block m -> peer -> ( StrictTVar m ( Map peer PeerGSV ) -> m a) -> m a Source #
bracketSyncWithFetchClient :: forall m a peer header block. ( MonadThrow m, MonadSTM m, MonadFork m, Ord peer) => FetchClientRegistry peer header block m -> peer -> m a -> m a Source #
The block fetch and chain sync clients for each peer need to synchronise their startup and shutdown. This bracket operation provides that synchronisation for the chain sync client.
This must be used for the chain sync client outside of its own state registration and deregistration.
setFetchClientContext :: MonadSTM m => FetchClientRegistry peer header block m -> Tracer m ( TraceLabelPeer peer ( TraceFetchClientState header)) -> ( WhetherReceivingTentativeBlocks -> STM m ( FetchClientPolicy header block m)) -> m () Source #
data FetchClientPolicy header block m Source #
The policy used by the fetch clients. It is set by the central block fetch
logic, and passed to them via the
FetchClientRegistry
.
FetchClientPolicy | |
|
readFetchClientsStatus :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer ( PeerFetchStatus header)) Source #
A read-only
STM
action to get the current
PeerFetchStatus
for all
fetch clients in the
FetchClientRegistry
.
readFetchClientsStateVars :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer ( FetchClientStateVars m header)) Source #
A read-only
STM
action to get the
FetchClientStateVars
for all fetch
clients in the
FetchClientRegistry
.
readPeerGSVs :: MonadSTM m => FetchClientRegistry peer header block m -> STM m ( Map peer PeerGSV ) Source #
A read-only
STM
action to get the
PeerGSV
s for all fetch
clients in the
FetchClientRegistry
.