Safe Haskell | None |
---|---|
Language | Haskell2010 |
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 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 => 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 ())
- 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.
PublicState | |
|
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.
State | |
|
data ConnectionState (muxMode :: Mode) initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #
Per connection state tracked by inbound protocol governor.
ConnectionState | |
|
Counters for tracing and analysis purposes
Counters | |
|
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 => 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.
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 ()) | After
|
RemoteCold | The For a For a |
pattern RemoteEstablished :: RemoteState m |
Remote connection state tracked by inbound protocol governor.
This type is used for tracing.
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 #
MiniProtocolData | |
|