Safe Haskell | None |
---|---|
Language | Haskell2010 |
IP subscription worker implentation.
Synopsis
- data SubscriptionParams a target = SubscriptionParams { }
- type IPSubscriptionParams a = SubscriptionParams a IPSubscriptionTarget
- ipSubscriptionWorker :: forall a. Snocket IO Socket SockAddr -> Tracer IO ( WithIPList ( SubscriptionTrace SockAddr )) -> Tracer IO ( WithAddr SockAddr ErrorPolicyTrace ) -> NetworkMutableState SockAddr -> IPSubscriptionParams a -> ( Socket -> IO a) -> IO Void
- subscriptionWorker :: Snocket IO Socket SockAddr -> Tracer IO ( SubscriptionTrace SockAddr ) -> Tracer IO ( WithAddr SockAddr ErrorPolicyTrace ) -> NetworkMutableState SockAddr -> WorkerParams IO LocalAddresses SockAddr -> ErrorPolicies -> Main IO ( PeerStates IO SockAddr ) x -> ( Socket -> IO a) -> IO x
-
data
IPSubscriptionTarget
=
IPSubscriptionTarget
{
- ispIps :: ![ SockAddr ]
- ispValency :: ! Int
- ipSubscriptionTarget :: forall m addr. ( MonadSTM m, MonadTime m, Ord addr) => Tracer m ( SubscriptionTrace addr) -> StrictTVar m ( PeerStates m addr) -> [addr] -> SubscriptionTarget m addr
-
data
SubscriptionTrace
addr
- = SubscriptionTraceConnectStart addr
- | SubscriptionTraceConnectEnd addr ConnectResult
- | forall e. Exception e => SubscriptionTraceSocketAllocationException addr e
- | forall e. Exception e => SubscriptionTraceConnectException addr e
- | forall e. Exception e => SubscriptionTraceApplicationException addr e
- | SubscriptionTraceTryConnectToPeer addr
- | SubscriptionTraceSkippingPeer addr
- | SubscriptionTraceSubscriptionRunning
- | SubscriptionTraceSubscriptionWaiting Int
- | SubscriptionTraceSubscriptionFailed
- | SubscriptionTraceSubscriptionWaitingNewConnection DiffTime
- | SubscriptionTraceStart Int
- | SubscriptionTraceRestart DiffTime Int Int
- | SubscriptionTraceConnectionExist addr
- | SubscriptionTraceUnsupportedRemoteAddr addr
- | SubscriptionTraceMissingLocalAddress
- | SubscriptionTraceAllocateSocket addr
- | SubscriptionTraceCloseSocket addr
-
data
ErrorPolicyTrace
- = ErrorPolicySuspendPeer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime DiffTime
- | ErrorPolicySuspendConsumer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime
- | ErrorPolicyLocalNodeError (ConnectionOrApplicationExceptionTrace SomeException )
- | ErrorPolicyResumePeer
- | ErrorPolicyKeepSuspended
- | ErrorPolicyResumeConsumer
- | ErrorPolicyResumeProducer
- | ErrorPolicyUnhandledApplicationException SomeException
- | ErrorPolicyUnhandledConnectionException SomeException
- | ErrorPolicyAcceptException IOException
- data WithIPList a = WithIPList { }
- type BeforeConnect m s addr = Time -> addr -> s -> STM m ( ConnectDecision s)
- runBeforeConnect :: ( MonadSTM m, MonadTime m) => StrictTVar m s -> BeforeConnect m s addr -> addr -> m Bool
- beforeConnectTx :: forall m addr. ( MonadSTM m, Ord addr) => BeforeConnect m ( PeerStates m addr) addr
- completeApplicationTx :: forall m addr a. ( MonadAsync m, Ord addr, Ord ( Async m ())) => ErrorPolicies -> CompleteApplication m ( PeerStates m addr) addr a
- socketStateChangeTx :: Ord addr => SocketStateChange IO ( PeerStates IO addr) addr
- mainTx :: ( MonadThrow ( STM m), MonadSTM m) => Main m ( PeerStates m addr) Void
- selectSockAddr :: SockAddr -> LocalAddresses SockAddr -> Maybe SockAddr
Documentation
data SubscriptionParams a target Source #
ipSubscriptionWorker
and
dnsSubscriptionWorker
parameters
SubscriptionParams | |
|
ipSubscriptionWorker :: forall a. Snocket IO Socket SockAddr -> Tracer IO ( WithIPList ( SubscriptionTrace SockAddr )) -> Tracer IO ( WithAddr SockAddr ErrorPolicyTrace ) -> NetworkMutableState SockAddr -> IPSubscriptionParams a -> ( Socket -> IO a) -> IO Void Source #
Spawns a subscription worker which will attempt to keep the specified number of connections (Valency) active towards the list of IP addresses given in IPSubscriptionTarget.
:: Snocket IO Socket SockAddr | |
-> Tracer IO ( SubscriptionTrace SockAddr ) | |
-> Tracer IO ( WithAddr SockAddr ErrorPolicyTrace ) | |
-> NetworkMutableState SockAddr | |
-> WorkerParams IO LocalAddresses SockAddr | |
-> ErrorPolicies | |
-> Main IO ( PeerStates IO SockAddr ) x |
main callback |
-> ( Socket -> IO a) |
application to run on each connection |
-> IO x |
Like
worker
but in
IO
; It provides address selection function,
SocketStateChange
and
CompleteApplication
callbacks. The
Main
callback is left as it's useful for testing purposes.
data IPSubscriptionTarget Source #
IPSubscriptionTarget | |
|
Instances
Eq IPSubscriptionTarget Source # | |
Defined in Ouroboros.Network.Subscription.Ip (==) :: IPSubscriptionTarget -> IPSubscriptionTarget -> Bool Source # (/=) :: IPSubscriptionTarget -> IPSubscriptionTarget -> Bool Source # |
|
Show IPSubscriptionTarget Source # | |
Defined in Ouroboros.Network.Subscription.Ip |
ipSubscriptionTarget :: forall m addr. ( MonadSTM m, MonadTime m, Ord addr) => Tracer m ( SubscriptionTrace addr) -> StrictTVar m ( PeerStates m addr) -> [addr] -> SubscriptionTarget m addr Source #
data SubscriptionTrace addr Source #
Instances
Show addr => Show ( SubscriptionTrace addr) Source # | |
Defined in Ouroboros.Network.Subscription.Worker |
data ErrorPolicyTrace Source #
Trace data for error policies
ErrorPolicySuspendPeer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime DiffTime |
suspending peer with a given exception until |
ErrorPolicySuspendConsumer ( Maybe (ConnectionOrApplicationExceptionTrace SomeException )) DiffTime |
suspending consumer until |
ErrorPolicyLocalNodeError (ConnectionOrApplicationExceptionTrace SomeException ) |
caught a local exception |
ErrorPolicyResumePeer |
resume a peer (both consumer and producer) |
ErrorPolicyKeepSuspended |
consumer was suspended until producer will resume |
ErrorPolicyResumeConsumer |
resume consumer |
ErrorPolicyResumeProducer |
resume producer |
ErrorPolicyUnhandledApplicationException SomeException |
an application throwed an exception, which was not handled by any
|
ErrorPolicyUnhandledConnectionException SomeException |
|
ErrorPolicyAcceptException IOException |
|
Instances
Show ErrorPolicyTrace Source # | |
Defined in Ouroboros.Network.ErrorPolicy |
data WithIPList a Source #
Instances
Show a => Show ( WithIPList a) Source # | |
Defined in Ouroboros.Network.Subscription.Ip |
PeerState
STM transactions
type BeforeConnect m s addr = Time -> addr -> s -> STM m ( ConnectDecision s) Source #
Check state before connecting to a remote peer. We will connect only if
it retuns
True
.
runBeforeConnect :: ( MonadSTM m, MonadTime m) => StrictTVar m s -> BeforeConnect m s addr -> addr -> m Bool Source #
Run
BeforeConnect
callback in a
MonadTime
monad.
beforeConnectTx :: forall m addr. ( MonadSTM m, Ord addr) => BeforeConnect m ( PeerStates m addr) addr Source #
BeforeConnect
callback: it updates peer state and return boolean value
wheather to connect to it or not. If a peer hasn't been recorded in
PeerStates
, we add it and try to connect to it.
completeApplicationTx :: forall m addr a. ( MonadAsync m, Ord addr, Ord ( Async m ())) => ErrorPolicies -> CompleteApplication m ( PeerStates m addr) addr a Source #
CompleteApplication
callback
socketStateChangeTx :: Ord addr => SocketStateChange IO ( PeerStates IO addr) addr Source #
mainTx :: ( MonadThrow ( STM m), MonadSTM m) => Main m ( PeerStates m addr) Void Source #
Main callback. It throws an exception when the state becomes
ThrowException
. This exception is thrown from the main thread.
Utilitity functions
selectSockAddr :: SockAddr -> LocalAddresses SockAddr -> Maybe SockAddr Source #