Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ouroboros.Network.InboundGovernor
Description
Server implementation based on ConnectionManager
This module should be imported qualified.
Synopsis
- data PublicState peerAddr versionData = PublicState {
- inboundDuplexPeers :: !(Map peerAddr versionData)
- remoteStateMap :: Map (ConnectionId peerAddr) RemoteSt
- data Arguments (muxMode :: Mode) handlerTrace socket peerAddr initiatorCtx responderCtx handle handleError versionNumber versionData bytes (m :: Type -> Type) a b x = Arguments {
- transitionTracer :: Tracer m (RemoteTransitionTrace peerAddr)
- tracer :: Tracer m (Trace peerAddr)
- debugTracer :: Tracer m (Debug peerAddr versionData)
- connectionDataFlow :: versionData -> DataFlow
- infoChannel :: InboundGovernorInfoChannel muxMode initiatorCtx peerAddr versionData ByteString m a b
- idleTimeout :: Maybe DiffTime
- withConnectionManager :: ConnectionHandler muxMode handlerTrace socket peerAddr handle handleError versionNumber versionData m -> (ConnectionManager muxMode socket peerAddr handle handleError m -> m x) -> m x
- mkConnectionHandler :: (StrictTVar m (StrictMaybe ResponderCounters) -> Tracer m (WithBearer (ConnectionId peerAddr) Trace)) -> ConnectionHandler muxMode handlerTrace socket peerAddr handle handleError versionNumber versionData m
- with :: forall (muxMode :: Mode) socket peerAddr initiatorCtx responderCtx handle handlerTrace handleError versionData versionNumber bytes m a b x. (Alternative (STM m), MonadAsync m, MonadCatch m, MonadEvaluate m, MonadLabelledSTM m, MonadThrow m, MonadThrow (STM m), MonadTime m, MonadTimer m, MonadMask m, Ord peerAddr, HasResponder muxMode ~ 'True, MonadTraceSTM m, MonadFork m, MonadDelay m, Show peerAddr) => Arguments muxMode handlerTrace socket peerAddr initiatorCtx responderCtx handle handleError versionNumber versionData bytes m a b x -> (Async m Void -> m (PublicState peerAddr versionData) -> ConnectionManager muxMode socket peerAddr handle handleError m -> m x) -> m x
- data Trace peerAddr
- = TrNewConnection !Provenance !(ConnectionId peerAddr)
- | TrResponderRestarted !(ConnectionId peerAddr) !MiniProtocolNum
- | TrResponderStartFailure !(ConnectionId peerAddr) !MiniProtocolNum !SomeException
- | TrResponderErrored !(ConnectionId peerAddr) !MiniProtocolNum !SomeException
- | TrResponderStarted !(ConnectionId peerAddr) !MiniProtocolNum
- | TrResponderTerminated !(ConnectionId peerAddr) !MiniProtocolNum
- | TrPromotedToWarmRemote !(ConnectionId peerAddr) !(OperationResult AbstractState)
- | TrPromotedToHotRemote !(ConnectionId peerAddr)
- | TrDemotedToWarmRemote !(ConnectionId peerAddr)
- | TrDemotedToColdRemote !(ConnectionId peerAddr) !(OperationResult DemotedToColdRemoteTr)
- | TrWaitIdleRemote !(ConnectionId peerAddr) !(OperationResult AbstractState)
- | TrMuxCleanExit !(ConnectionId peerAddr)
- | TrMuxErrored !(ConnectionId peerAddr) SomeException
- | TrInboundGovernorCounters !Counters
- | TrRemoteState !(Map (ConnectionId peerAddr) RemoteSt)
- | TrUnexpectedlyFalseAssertion !(IGAssertionLocation peerAddr)
- | TrInboundGovernorError !SomeException
- | TrMaturedConnections !(Set peerAddr) !(Set peerAddr)
- | TrInactive ![(peerAddr, Time)]
- data Debug peerAddr versionData = Debug (State muxMode initiatorCtx peerAddr versionData m a b)
- data Event (muxMode :: Mode) handle initiatorCtx peerAddr versionData (m :: Type -> Type) a b
- = NewConnection !(NewConnectionInfo peerAddr handle)
- | MuxFinished !(ConnectionId peerAddr) (STM m (Maybe SomeException))
- | MiniProtocolTerminated !(Terminated muxMode initiatorCtx peerAddr m a b)
- | WaitIdleRemote !(ConnectionId peerAddr)
- | RemotePromotedToHot !(ConnectionId peerAddr)
- | RemoteDemotedToWarm !(ConnectionId peerAddr)
- | CommitRemote !(ConnectionId peerAddr)
- | AwakeRemote !(ConnectionId peerAddr)
- | MaturedDuplexPeers !(Map peerAddr versionData) !(OrdPSQ peerAddr Time versionData)
- | InactivityTimeout
- data NewConnectionInfo peerAddr handle = NewConnectionInfo !Provenance !(ConnectionId peerAddr) !DataFlow !handle
- data RemoteSt
- type RemoteTransition = Transition' (Maybe RemoteSt)
- type RemoteTransitionTrace peerAddr = TransitionTrace' peerAddr (Maybe RemoteSt)
- data AcceptConnectionsPolicyTrace
- data Transition' state = Transition {}
- data TransitionTrace' id state = TransitionTrace {
- ttPeerAddr :: id
- ttTransition :: Transition' state
- data ResponderCounters = ResponderCounters {}
- maturedPeers :: Ord peerAddr => Time -> OrdPSQ peerAddr Time versionData -> (Map peerAddr versionData, OrdPSQ peerAddr Time versionData)
Run Inbound Protocol Governor
data PublicState peerAddr versionData Source #
Public inbound governor state.
Constructors
PublicState | |
Fields
|
data Arguments (muxMode :: Mode) handlerTrace socket peerAddr initiatorCtx responderCtx handle handleError versionNumber versionData bytes (m :: Type -> Type) a b x Source #
Constructors
Arguments | |
Fields
|
with :: forall (muxMode :: Mode) socket peerAddr initiatorCtx responderCtx handle handlerTrace handleError versionData versionNumber bytes m a b x. (Alternative (STM m), MonadAsync m, MonadCatch m, MonadEvaluate m, MonadLabelledSTM m, MonadThrow m, MonadThrow (STM m), MonadTime m, MonadTimer m, MonadMask m, Ord peerAddr, HasResponder muxMode ~ 'True, MonadTraceSTM m, MonadFork m, MonadDelay m, Show peerAddr) => Arguments muxMode handlerTrace socket peerAddr initiatorCtx responderCtx handle handleError versionNumber versionData bytes m a b x -> (Async m Void -> m (PublicState peerAddr versionData) -> ConnectionManager muxMode socket peerAddr handle handleError m -> m x) -> m x Source #
Run the server, which consists of the following components:
- inbound governor, it corresponds to p2p-governor on outbound side
- accept loop(s), one per given ip address. We support up to one ipv4 address and up to one ipv6 address, i.e. an ipv6 enabled node will run two accept loops on listening on different addresses with shared inbound governor.
The server can be run in either of two Mode
-es:
InitiatorResponderMode
ResponderMode
The first one is used in data diffusion for Node-To-Node protocol, while the other is useful for running a server for the Node-To-Client protocol.
Trace
Constructors
data Event (muxMode :: Mode) handle initiatorCtx peerAddr versionData (m :: Type -> Type) a b Source #
Edge triggered events to which the inbound protocol governor reacts.
Constructors
NewConnection !(NewConnectionInfo peerAddr handle) | A request to start mini-protocol bundle, either from the server or from connection manager after a duplex connection was negotiated. |
MuxFinished !(ConnectionId peerAddr) (STM m (Maybe SomeException)) | A multiplexer exited. |
MiniProtocolTerminated !(Terminated muxMode initiatorCtx peerAddr m a b) | A mini-protocol terminated either cleanly or abruptly. |
WaitIdleRemote !(ConnectionId peerAddr) | Transition from |
RemotePromotedToHot !(ConnectionId peerAddr) | A remote |
RemoteDemotedToWarm !(ConnectionId peerAddr) | A |
CommitRemote !(ConnectionId peerAddr) | Transition from |
AwakeRemote !(ConnectionId peerAddr) | Transition from |
MaturedDuplexPeers | Update |
InactivityTimeout |
data NewConnectionInfo peerAddr handle Source #
Announcement message for a new connection.
Constructors
NewConnectionInfo !Provenance !(ConnectionId peerAddr) !DataFlow !handle | Announce a new connection. Inbound protocol governor will start
responder protocols using |
Instances
Show peerAddr => Show (NewConnectionInfo peerAddr handle) Source # | |
Defined in Ouroboros.Network.InboundGovernor Methods showsPrec :: Int -> NewConnectionInfo peerAddr handle -> ShowS # show :: NewConnectionInfo peerAddr handle -> String # showList :: [NewConnectionInfo peerAddr handle] -> ShowS # |
Remote connection state tracked by inbound protocol governor.
This type is used for tracing.
Constructors
RemoteWarmSt | |
RemoteHotSt | |
RemoteIdleSt | |
RemoteColdSt |
type RemoteTransition = Transition' (Maybe RemoteSt) Source #
Nothing
represents uninitialised state.
type RemoteTransitionTrace peerAddr = TransitionTrace' peerAddr (Maybe RemoteSt) Source #
data AcceptConnectionsPolicyTrace Source #
Trace for the AcceptConnectionsLimit
policy.
Constructors
ServerTraceAcceptConnectionRateLimiting DiffTime Int | |
ServerTraceAcceptConnectionHardLimit Word32 | |
ServerTraceAcceptConnectionResume Int |
Instances
Re-exports
data Transition' state Source #
Constructors
Transition | |
Instances
Functor Transition' Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods fmap :: (a -> b) -> Transition' a -> Transition' b # (<$) :: a -> Transition' b -> Transition' a # | |
Show state => Show (Transition' state) Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods showsPrec :: Int -> Transition' state -> ShowS # show :: Transition' state -> String # showList :: [Transition' state] -> ShowS # | |
Eq state => Eq (Transition' state) Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods (==) :: Transition' state -> Transition' state -> Bool # (/=) :: Transition' state -> Transition' state -> Bool # |
data TransitionTrace' id state Source #
Constructors
TransitionTrace | |
Fields
|
Instances
Functor (TransitionTrace' id) Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods fmap :: (a -> b) -> TransitionTrace' id a -> TransitionTrace' id b # (<$) :: a -> TransitionTrace' id b -> TransitionTrace' id a # | |
(Show peerAddr, Show state) => Show (TransitionTrace' peerAddr state) Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods showsPrec :: Int -> TransitionTrace' peerAddr state -> ShowS # show :: TransitionTrace' peerAddr state -> String # showList :: [TransitionTrace' peerAddr state] -> ShowS # |
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 |