@@ -6,13 +6,14 @@ module Cardano.Tracer.Acceptors.Run
66 ) where
77
88import Cardano.Logging.Types (TraceObject )
9- import Cardano.Logging.Utils (runInLoop )
9+ import Cardano.Logging.Utils (runInLoop , RunInLoopTermination ( .. ) )
1010import Cardano.Tracer.Acceptors.Client
1111import Cardano.Tracer.Acceptors.Server
1212import Cardano.Tracer.Configuration
1313import Cardano.Tracer.Environment
1414import Cardano.Tracer.MetaTrace
1515
16+ import Control.Concurrent.Chan.Unagi (dupChan )
1617import Control.Concurrent.Async (forConcurrently_ )
1718import Control.Exception (SomeException (.. ))
1819import "contra-tracer" Control.Tracer (Tracer , contramap , nullTracer , stdoutTracer )
@@ -33,20 +34,24 @@ import qualified Trace.Forward.Protocol.TraceObject.Type as TOF
3334-- 1. Server mode, when the tracer accepts connections from any number of nodes.
3435-- 2. Client mode, when the tracer initiates connections to specified number of nodes.
3536runAcceptors :: TracerEnv -> TracerEnvRTView -> IO ()
36- runAcceptors tracerEnv@ TracerEnv {teTracer} tracerEnvRTView = do
37+ runAcceptors tracerEnv@ TracerEnv {teTracer, teInChan = inChan } tracerEnvRTView = do
3738 traceWith teTracer $ TracerStartedAcceptors network
3839 case network of
39- AcceptAt howToConnect ->
40+ AcceptAt howToConnect -> let
4041 -- Run one server that accepts connections from the nodes.
41- runInLoop
42- (runAcceptorsServer tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect))
43- (handleOnInterruption howToConnect) initialPauseInSec 10
42+ action :: IO ()
43+ action = do
44+ dieOnShutdown =<< dupChan inChan
45+ runAcceptorsServer tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect)
46+ in runInLoop action TerminateNever (handleOnInterruption howToConnect) initialPauseInSec 10
4447 ConnectTo localSocks ->
4548 -- Run N clients that initiate connections to the nodes.
46- forConcurrently_ (NE. nub localSocks) \ howToConnect ->
47- runInLoop
48- (runAcceptorsClient tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect))
49- (handleOnInterruption howToConnect) initialPauseInSec 30
49+ forConcurrently_ (NE. nub localSocks) \ howToConnect -> let
50+ action :: IO ()
51+ action = do
52+ dieOnShutdown =<< dupChan inChan
53+ runAcceptorsClient tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect)
54+ in runInLoop action TerminateNever (handleOnInterruption howToConnect) initialPauseInSec 30
5055 where
5156 handleOnInterruption howToConnect (SomeException e)
5257 | verbosity == Just Minimum = pure ()
0 commit comments