ouroboros-network
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.BlockFetch.ClientRegistry

Synopsis

Registry of block fetch clients

data FetchClientRegistry peer header block (m :: Type -> Type) 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.

bracketFetchClient :: forall m a peer header block version. (MonadFork m, MonadMask m, MonadTimer m, Ord peer) => FetchClientRegistry peer header block m -> version -> 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. (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. (MonadSTM m, MonadFork m, MonadCatch 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)) -> STM m (FetchClientPolicy header block m) -> m () Source #

data FetchClientPolicy header block (m :: Type -> Type) Source #

The policy used by the fetch clients. It is set by the central block fetch logic, and passed to them via the FetchClientRegistry.

Constructors

FetchClientPolicy 

Fields

readFetchClientsStatus :: forall (m :: Type -> Type) peer header block. 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 :: forall (m :: Type -> Type) peer header block. 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 :: forall block header (m :: Type -> Type) peer. (MonadSTM m, Ord peer) => FetchClientRegistry peer header block m -> STM m (Map peer PeerGSV) Source #

A read-only STM action to get the PeerGSVs for all fetch clients in the FetchClientRegistry.