| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Network.InboundGovernor.State
Contents
Description
Inbound protocol governor state.
The module should be imported qualified.
Synopsis
- data PublicState peerAddr versionData = PublicState {
- inboundDuplexPeers :: !(Map peerAddr versionData)
- remoteStateMap :: Map (ConnectionId peerAddr) RemoteSt
- mkPublicState :: forall (muxMode :: Mode) initatorCtx versionData peerAddr (m :: Type -> Type) a b. State muxMode initatorCtx peerAddr versionData m a b -> PublicState peerAddr versionData
- data State (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b = State {
- connections :: !(Map (ConnectionId peerAddr) (ConnectionState muxMode initiatorCtx peerAddr versionData m a b))
- matureDuplexPeers :: !(Map peerAddr versionData)
- freshDuplexPeers :: !(OrdPSQ peerAddr Time versionData)
- countersCache :: !(Cache Counters)
- data ConnectionState (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b = ConnectionState {
- csMux :: !(Mux muxMode m)
- csVersionData :: !versionData
- csMiniProtocolMap :: !(Map MiniProtocolNum (MiniProtocolData muxMode initiatorCtx peerAddr m a b))
- csCompletionMap :: !(Map MiniProtocolNum (STM m (Either SomeException b)))
- csRemoteState :: !(RemoteState m)
- data ResponderCounters = ResponderCounters {}
- data Counters = Counters {
- coldPeersRemote :: !Int
- idlePeersRemote :: !Int
- warmPeersRemote :: !Int
- hotPeersRemote :: !Int
- counters :: forall (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b. State muxMode initiatorCtx peerAddr versionData m a b -> Counters
- unregisterConnection :: forall peerAddr (muxMode :: Mode) initiatorCtx versionData (m :: Type -> Type) a b. Ord peerAddr => Bool -> ConnectionId peerAddr -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b
- updateMiniProtocol :: forall peerAddr (m :: Type -> Type) b (muxMode :: Mode) initiatorCtx versionData a. Ord peerAddr => ConnectionId peerAddr -> MiniProtocolNum -> STM m (Either SomeException b) -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b
- data RemoteState (m :: Type -> Type) where
- RemoteWarm
- RemoteHot
- RemoteIdle !(STM m Bool)
- RemoteCold
- pattern RemoteEstablished :: RemoteState m
- data RemoteSt
- mkRemoteSt :: forall (m :: Type -> Type). RemoteState m -> RemoteSt
- updateRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: Mode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> RemoteState m -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b
- mapRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: Mode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> (RemoteState m -> RemoteState m) -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b
- data MiniProtocolData (muxMode :: Mode) initiatorCtx peerAddr (m :: Type -> Type) a b = MiniProtocolData {
- mpdMiniProtocol :: !(MiniProtocol muxMode initiatorCtx (ResponderContext peerAddr) ByteString m a b)
- mpdResponderContext :: !(ResponderContext peerAddr)
- mpdMiniProtocolTemp :: !ProtocolTemperature
Documentation
data PublicState peerAddr versionData Source #
Public inbound governor state.
Constructors
| PublicState | |
Fields
| |
Internals
mkPublicState :: forall (muxMode :: Mode) initatorCtx versionData peerAddr (m :: Type -> Type) a b. State muxMode initatorCtx peerAddr versionData m a b -> PublicState peerAddr versionData Source #
Smart constructor for PublicState.
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 State) bind the server address. This allows us to use
mapKeysMonotonic.
data State (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #
State, 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
| State | |
Fields
| |
data ConnectionState (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #
Per connection state tracked by inbound protocol governor.
Constructors
| ConnectionState | |
Fields
| |
data ResponderCounters Source #
The IG maintains a state of the number of hot and warm miniprotocol responders to track transitions and notify the connection manager for interesting events.
Constructors
| ResponderCounters | |
Fields | |
Counters for tracing and analysis purposes
Constructors
| Counters | |
Fields
| |
counters :: forall (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b. State muxMode initiatorCtx peerAddr versionData m a b -> Counters Source #
unregisterConnection :: forall peerAddr (muxMode :: Mode) initiatorCtx versionData (m :: Type -> Type) a b. Ord peerAddr => Bool -> ConnectionId peerAddr -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b Source #
Remove connection from State.
updateMiniProtocol :: forall peerAddr (m :: Type -> Type) b (muxMode :: Mode) initiatorCtx versionData a. Ord peerAddr => ConnectionId peerAddr -> MiniProtocolNum -> STM m (Either SomeException b) -> State muxMode initiatorCtx peerAddr versionData m a b -> State 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 |
| RemoteHot | In this state all established and hot mini-protocols are running and none of the warm mini-protocols is running. |
| RemoteIdle !(STM m Bool) | After
|
| RemoteCold | The For a For a |
Bundled Patterns
| pattern RemoteEstablished :: RemoteState m |
Remote connection state tracked by inbound protocol governor.
This type is used for tracing.
Constructors
| RemoteWarmSt | |
| RemoteHotSt | |
| RemoteIdleSt | |
| RemoteColdSt |
mkRemoteSt :: forall (m :: Type -> Type). RemoteState m -> RemoteSt Source #
updateRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: Mode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> RemoteState m -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b Source #
Set csRemoteState for a given connection.
mapRemoteState :: forall peerAddr (m :: Type -> Type) (muxMode :: Mode) initiatorCtx versionData a b. Ord peerAddr => ConnectionId peerAddr -> (RemoteState m -> RemoteState m) -> State muxMode initiatorCtx peerAddr versionData m a b -> State muxMode initiatorCtx peerAddr versionData m a b Source #
data MiniProtocolData (muxMode :: Mode) initiatorCtx peerAddr (m :: Type -> Type) a b Source #
Constructors
| MiniProtocolData | |
Fields
| |