ouroboros-network
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.PeerSharing

Synopsis

Documentation

data PeerSharingController peer (m :: Type -> Type) Source #

Request and Result queue for the peer sharing client implementation.

Although Peer Sharing is a request-response protocol we can not run it as one, i.e. starting and terminating the protocol on demand since protocol termination as a different semantics. We have to keep the client and server protocol sides running and only issue the requests on demand.

A workaround to this is to implement the client side with the help of a PeerSharingController which contains two queues: request and result. The client side will be waiting to receive a PeerSharingAmount from the request queue and as soon as it gets something it will send a SendMsgShareRequest and wait for a response before writing it to the result queue.

newtype PeerSharingRegistry peer (m :: Type -> Type) Source #

Peer Sharing Registry is a registry that stores a PeerSharingController for every peer that we connect to.

bracketPeerSharingClient should be used.

bracketPeerSharingClient :: (Ord peer, MonadSTM m, MonadThrow m) => PeerSharingRegistry peer m -> peer -> (PeerSharingController peer m -> m a) -> m a Source #

peerSharingServer :: forall (m :: Type -> Type) peer s. (MonadSTM m, MonadMonotonicTime m, Hashable peer, RandomGen s) => PeerSharingAPI peer s m -> PeerSharingServer peer m Source #

data PeerSharingAPI addr s (m :: Type -> Type) Source #

PeerSharingAPI needed to compute the peers to be shared.

Constructors

PeerSharingAPI 

Fields

newPeerSharingAPI :: MonadSTM m => StrictTVar m (PublicPeerSelectionState addr) -> s -> DiffTime -> PeerSharingAmount -> m (PeerSharingAPI addr s m) Source #

Create a new PeerSharingAPI

Constants

ps_POLICY_PEER_SHARE_STICKY_TIME :: DiffTime Source #

Amount of time between changes to the salt used to pick peers to gossip about.

ps_POLICY_PEER_SHARE_MAX_PEERS :: PeerSharingAmount Source #

Maximum number of peers to respond with in a single request

Re-exports

data PeerSharingResult peerAddress #

PeerSharing Result type.

We need a constructor for the case when the Governor wins the race versus the Mux (when initialising the peer sharing miniprotocol). This leads the Governor to lookup a peer that hasn't been registered yet.

Constructors

PeerSharingResult [peerAddress] 
PeerSharingNotRegisteredYet 

Instances

Instances details
Show peerAddress => Show (PeerSharingResult peerAddress) 
Instance details

Defined in Ouroboros.Network.Protocol.PeerSharing.Type

Methods

showsPrec :: Int -> PeerSharingResult peerAddress -> ShowS #

show :: PeerSharingResult peerAddress -> String #

showList :: [PeerSharingResult peerAddress] -> ShowS #

Eq peerAddress => Eq (PeerSharingResult peerAddress) 
Instance details

Defined in Ouroboros.Network.Protocol.PeerSharing.Type

Methods

(==) :: PeerSharingResult peerAddress -> PeerSharingResult peerAddress -> Bool #

(/=) :: PeerSharingResult peerAddress -> PeerSharingResult peerAddress -> Bool #