ouroboros-network-framework
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.InboundGovernor.State

Contents

Synopsis

Documentation

data PublicInboundGovernorState peerAddr versionData Source #

Public inbound governor state.

Constructors

PublicInboundGovernorState 

Fields

Internals

mkPublicInboundGovernorState :: forall (muxMode :: MuxMode) initatorCtx versionData peerAddr (m :: Type -> Type) a b. InboundGovernorState muxMode initatorCtx peerAddr versionData m a b -> PublicInboundGovernorState peerAddr versionData Source #

Smart constructor for PublicInboundGovernorState.

NOTE: we assume that all inbound connections share the same address. This is true in P2P mode since all outbound connections (which also can end up in the InboundGovernorState) bind the server address. This allows us to use mapKeysMonotonic.

data InboundGovernorState (muxMode :: MuxMode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #

InboundGovernorState, which consist of pure part, and a mutable part. The mutable part can be observable from outside. Future version could contain additional statistics on the peers.

Constructors

InboundGovernorState 

Fields

data ConnectionState (muxMode :: MuxMode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #

Per connection state tracked by inbound protocol governor.

Constructors

ConnectionState 

Fields

data InboundGovernorCounters Source #

Counters for tracing and analysis purposes

Constructors

InboundGovernorCounters 

Fields

Instances

Instances details
Monoid InboundGovernorCounters Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

Semigroup InboundGovernorCounters Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

Show InboundGovernorCounters Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

Eq InboundGovernorCounters Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

Ord InboundGovernorCounters Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

inboundGovernorCounters :: forall (muxMode :: MuxMode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b. InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b -> InboundGovernorCounters Source #

unregisterConnection :: forall peerAddr (muxMode :: MuxMode) initiatorCtx versionData (m :: Type -> Type) a b. Ord peerAddr => ConnectionId peerAddr -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b Source #

Remove connection from InboundGovernorState.

updateMiniProtocol :: forall peerAddr (m :: Type -> Type) b (muxMode :: MuxMode) initiatorCtx versionData a. Ord peerAddr => ConnectionId peerAddr -> MiniProtocolNum -> STM m (Either SomeException b) -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b Source #

Update a mini-protocol in ConnectionState. Once a mini-protocol was restarted we put the new completion action into csCompletionMap.

data RemoteState (m :: Type -> Type) Source #

Each inbound connection is either in RemoteIdle, RemoteCold or RemoteEstablished state. We only need to support PromotedToWarm^{Duplex}_{Remote}, DemotedToCold^{Duplex}_{Remote} and DemotedToCold^{Unidirectional}_{Remote} transitions.

Constructors

RemoteWarm

After PromotedToWarm^{dataFlow}_{Remote} a connection is in RemoteWarm state.

RemoteHot

In this state all established and hot mini-protocols are running and none of the warm mini-protocols is running.

RemoteIdle !(STM m ())

After DemotedToCold^{dataFlow}_{Remote} is detected. This state corresponds to InboundIdleState. In this state we are checking if the responder protocols are idle during protocol idle timeout (represented by an STM action)

RemoteIdle is the initial state of an accepted a connection.

RemoteCold

The RemoteCold state for Duplex connections allows us to have responders started using the on-demand strategy. This assures that once the remote peer start using the connection the local side will be ready to serve it.

For a Duplex connection: a RemoteIdle connection transitions to RemoteCold state after all responders being idle for protocolIdleTimeout. This triggers unregisterInboundConnection.

For a Unidreictional connection: after all responders terminated.

Bundled Patterns

pattern RemoteEstablished :: RemoteState m 

data RemoteSt Source #

Remote connection state tracked by inbound protocol governor.

This type is used for tracing.

Instances

Instances details
Show RemoteSt Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

Eq RemoteSt Source # 
Instance details

Defined in Ouroboros.Network.InboundGovernor.State

mkRemoteSt :: forall (m :: Type -> Type). RemoteState m -> RemoteSt Source #

updateRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: MuxMode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> RemoteState m -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b Source #

Set csRemoteState for a given connection.

mapRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: MuxMode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> (RemoteState m -> RemoteState m) -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b -> InboundGovernorState muxMode initiatorCtx peerAddr versionData m a b Source #

data MiniProtocolData (muxMode :: MuxMode) initiatorCtx peerAddr (m :: Type -> Type) a b Source #

Constructors

MiniProtocolData 

Fields