@@ -99,7 +99,7 @@ import Control.Distributed.Process.Internal.Types
99
99
, LocalProcessId (.. )
100
100
, ProcessId (.. )
101
101
, LocalNode (.. )
102
- , Tracer
102
+ , Tracer ( InactiveTracer )
103
103
, LocalNodeState (.. )
104
104
, LocalProcess (.. )
105
105
, LocalProcessState (.. )
@@ -144,9 +144,9 @@ import Control.Distributed.Process.Internal.Types
144
144
, ImplicitReconnect (WithImplicitReconnect , NoImplicitReconnect )
145
145
)
146
146
import Control.Distributed.Process.Internal.Trace
147
- ( trace
147
+ ( TraceArg ( .. )
148
148
, traceFormat
149
- , defaultTracer
149
+ , startTracing
150
150
, stopTracer
151
151
)
152
152
import Control.Distributed.Process.Serializable (Serializable )
@@ -200,18 +200,18 @@ createBareLocalNode endPoint rtable = do
200
200
, _localPidUnique = unq
201
201
, _localConnections = Map. empty
202
202
}
203
- tracer <- defaultTracer
204
203
ctrlChan <- newChan
205
204
let node = LocalNode { localNodeId = NodeId $ NT. address endPoint
206
205
, localEndPoint = endPoint
207
206
, localState = state
208
207
, localCtrlChan = ctrlChan
209
- , localTracer = tracer
208
+ , localTracer = InactiveTracer
210
209
, remoteTable = rtable
211
210
}
212
- void . forkIO $ runNodeController node
213
- void . forkIO $ handleIncomingMessages node
214
- return node
211
+ tracedNode <- startTracing node
212
+ void . forkIO $ runNodeController tracedNode
213
+ void . forkIO $ handleIncomingMessages tracedNode
214
+ return tracedNode
215
215
216
216
-- | Start and register the service processes on a node
217
217
-- (for now, this is only the logger)
@@ -225,6 +225,10 @@ startServiceProcesses node = do
225
225
[ match $ \ ((time, pid, string) :: (String , ProcessId , String )) -> do
226
226
liftIO . hPutStrLn stderr $ time ++ " " ++ show pid ++ " : " ++ string
227
227
loop
228
+ , match $ \ ((time, string) :: (String , String )) -> do
229
+ -- this is a 'trace' message from the local node tracer
230
+ liftIO . hPutStrLn stderr $ time ++ " [trace] " ++ string
231
+ loop
228
232
, match $ \ (ch :: SendPort () ) -> -- a shutdown request
229
233
sendChan ch ()
230
234
]
@@ -431,23 +435,27 @@ handleIncomingMessages node = go initConnectionState
431
435
$ st
432
436
)
433
437
NT. ErrorEvent (NT. TransportError NT. EventEndPointFailed str) ->
434
- fail $ " Cloud Haskell fatal error: end point failed: " ++ str
438
+ fatal $ " Cloud Haskell fatal error: end point failed: " ++ str
435
439
NT. ErrorEvent (NT. TransportError NT. EventTransportFailed str) ->
436
- fail $ " Cloud Haskell fatal error: transport failed: " ++ str
440
+ fatal $ " Cloud Haskell fatal error: transport failed: " ++ str
437
441
NT. EndPointClosed ->
438
- return ()
442
+ stopTracer (localTracer node) >> return ()
439
443
NT. ReceivedMulticast _ _ ->
440
444
-- If we received a multicast message, something went horribly wrong
441
445
-- and we just give up
442
- fail " Cloud Haskell fatal error: received unexpected multicast"
446
+ fatal " Cloud Haskell fatal error: received unexpected multicast"
447
+
448
+ fatal :: String -> IO ()
449
+ fatal msg = stopTracer (localTracer node) >> fail msg
443
450
444
451
invalidRequest :: NT. ConnectionId -> ConnectionState -> IO ()
445
452
invalidRequest cid st = do
446
453
-- TODO: We should treat this as a fatal error on the part of the remote
447
454
-- node. That is, we should report the remote node as having died, and we
448
455
-- should close incoming connections (this requires a Transport layer
449
456
-- extension).
450
- traceEventFmtIO node " " [" [network] invalid request: " , (show cid)]
457
+ traceEventFmtIO node " " [(TraceStr " [network] invalid request: " ),
458
+ (Trace cid)]
451
459
go ( incomingAt cid ^= Nothing
452
460
$ st
453
461
)
@@ -510,21 +518,17 @@ traceNotifyDied node ident reason =
510
518
case reason of
511
519
DiedNormal -> return ()
512
520
_ -> traceNcEventFmt node " "
513
- [" [node-controller]" , (show ident), (show reason)]
521
+ [(TraceStr " [node-controller]" ),
522
+ (Trace ident),
523
+ (Trace reason)]
514
524
515
- traceNcEvent :: LocalNode -> String -> NC ()
516
- traceNcEvent node msg = liftIO $ traceEventIO node msg
517
-
518
- traceNcEventFmt :: LocalNode -> String -> [String ] -> NC ()
525
+ traceNcEventFmt :: LocalNode -> String -> [TraceArg ] -> NC ()
519
526
traceNcEventFmt node fmt args =
520
527
liftIO $ traceEventFmtIO node fmt args
521
528
522
- traceEventIO :: LocalNode -> String -> IO ()
523
- traceEventIO node msg = withLocalTracer node $ \ t -> trace t msg
524
-
525
529
traceEventFmtIO :: LocalNode
526
530
-> String
527
- -> [String ]
531
+ -> [TraceArg ]
528
532
-> IO ()
529
533
traceEventFmtIO node fmt args =
530
534
withLocalTracer node $ \ t -> traceFormat t fmt args
0 commit comments