@@ -17,16 +17,14 @@
1717--
1818-- [Enabling Tracing]
1919--
20−-- Tracing is disabled by default, because it carries a relatively small, but
21−-- tangible cost. To enable tracing, the environment variable
22−-- @DISTRIBUTED_PROCESS_TRACE_ENABLED@ must be set to some value (actual content
23−-- is ignored). When the environment variable /is/ set, the system will
24−-- generate /trace events/ in various circumstances - see 'TraceEvent' for a
25−-- list of all the published events. A user can additionally publish custom
26−-- trace events in the form of 'TraceEvLog' log messages or pass custom
27−-- (i.e., completely user defined) event data using the 'traceMessage' function.
28−-- If the environment variable is not set, no trace events will ever be
29−-- published.
20+-- Throughout the lifecycle of a local node, the distributed-process runtime
21+-- generates /trace events/, describing internal runtime activities such as
22+-- the spawning and death of processes, message sending, delivery and so on.
23+-- See the 'TraceEvent' type's documentation for a list of all the published
24+-- event types.
25+-- Users can additionally publish custom trace events in the form of
26+-- 'TraceEvLog' log messages or pass custom (i.e., completely user defined)
27+-- event data using the 'traceMessage' function.
3028--
3129-- All published traces are forwarded to a /tracer process/, which can be
3230-- specified (and changed) at runtime using 'traceEnable'. Some pre-defined
@@ -37,15 +35,15 @@
3735--
3836-- [Working with multiple tracer processes]
3937--
40−-- The system tracing facility only ever writes to a single tracer process. This
38+-- The tracing facility only ever writes to a single tracer process. This
4139-- invariant insulates the tracer controller and ensures a fast path for
4240-- handling all trace events. /This/ module provides facilities for layering
4341-- trace handlers using Cloud Haskell's built-in delegation primitives.
4442--
4543-- The 'startTracer' function wraps the registered @tracer@ process with the
46−-- supplied handler and also forwarding trace events to the original tracer.
44+-- supplied handler and also forwards trace events to the original tracer.
4745-- The corresponding 'stopTracer' function terminates tracer processes in
48−-- reverse of the order in which they were started, and re-establishes the
46+-- reverse of the order in which they were started, and re-registers the
4947-- previous tracer process.
5048--
5149-- [Built in tracers]
@@ -53,22 +51,21 @@
5351-- The built in tracers provide a simple /logging/ facility that writes trace
5452-- events out to either a log file, @stderr@ or the GHC eventlog. These tracers
5553-- can be configured using environment variables, or specified manually using
56−-- the 'traceEnable' function. The base tracer process cannot be
54+-- the 'traceEnable' function.
5755--
5856-- When a new local node is started, the contents of several environment
59−-- variables are checked to determine how the default tracer process
60−-- will handle trace events. If none of these variables is set, then the
61−-- trace events will be effectively ignored, although they will still be
62−-- generated and passed through the system. Only one configuration will be
63−-- chosen - the first that contains a (valid) value. These environment
64−-- variables, in the order they're checked, are:
57+-- variables are checked to determine which default tracer process is selected.
58+-- If none of these variables is set, a no-op tracer process is installed,
59+-- which effectively ignores all trace messages. Note that in this case,
60+-- trace events are still generated and passed through the system.
61+-- Only one default tracer will be chosen - the first that contains a (valid)
62+-- value. These environment variables, in the order they're examined, are:
6563--
6664-- 1. @DISTRIBUTED_PROCESS_TRACE_FILE@
6765-- This is checked for a valid file path. If it exists and the file can be
6866-- opened for writing, all trace output will be directed thence. If the supplied
69−-- path is invalid, or the file is unavailable for writing - e.g., because
70−-- another node has already started tracing to it - then this tracer will be
71−-- disabled.
67+-- path is invalid, or the file is unavailable for writing, this tracer will not
68+-- be selected.
7269--
7370-- 2. @DISTRIBUTED_PROCESS_TRACE_CONSOLE@
7471-- This is checked for /any/ non-empty value. If set, then all trace output will
@@ -81,8 +78,10 @@
8178-- Users of the /simplelocalnet/ Cloud Haskell backend should also note that
8279-- because the trace file option only supports trace output from a single node
8380-- (so as to avoid interleaving), a file trace configured for the master node
84−-- will prevent slaves from tracing to the file and will need to fall back to
85−-- the console or eventlog tracers instead.
81+-- will prevent slaves from tracing to the file. They will need to fall back to
82+-- the console or eventlog tracers instead, which can be accomplished by setting
83+-- one of these environment variables /as well/, since the latter will only be
84+-- selected on slaves (when the file tracer selection fails).
8685--
8786-- Support for writing to the eventlog requires specific intervention to work,
8887-- without which, written traces are silently dropped/ignored and no output will
@@ -97,7 +96,6 @@ module Control.Distributed.Process.Debug
9796 , TraceFlags(..)
9897 , TraceSubject(..)
9998 -- * Configuring Tracing
100− , isTracingEnabled
10199 , enableTrace
102100 , enableTraceAsync
103101 , disableTrace
@@ -167,7 +165,6 @@ import Control.Distributed.Process.Internal.Trace.Primitives
167165 , setTraceFlags
168166 , setTraceFlagsAsync
169167 , getTraceFlags
170− , isTracingEnabled
171168 , traceOn
172169 , traceOff
173170 , traceOnly
@@ -264,8 +261,7 @@ traceProxy pid act = do
264261-- supplied tracers (i.e., processes started via 'startTracer') have exited,
265262-- subsequent calls to this function will have no effect.
266263--
267−-- If tracing support is disabled for the node, this function will also
268−-- have no effect. If the last tracer to have been registered was not started
264+-- If the last tracer to have been registered was not started
269265-- with 'startTracer' then the behaviour of this function is /undefined/.
270266stopTracer :: Process ()
271267stopTracer =