Hi, I’m just curious what the blue lines/edges mean in the supervision tree that observer draws. The dark lines I assume represent the links between the processes. In this example, significant_event_logger_worker
is a poolboy “supervisor” or whatever the root process is classified as. Thanks!
The two processes on the same blue line are linked to each other but not in a supervising-supervised way. Maybe the significant_event_logger_worker
just wants to get notified whenever a child of <0.545.0>
dies (by trapping exit), or maybe the system designer wants to kill the whole sub-tree from significant_event_logger_worker
whenever one of its grandchildren dies.
Unless I am gravely mistaken, the blue lines are monitors: whenever the lower-level process dies the higher-up process will get a notification. Monitors are usually used to allow some cleanup to be done when a process that is important to the efforts of the current process quits.
The difference with normal linking is that normal linking is bi-directional (where the behaviour can then be altered by one side to trap exits) whereas monitors are uni-directional (one-sided): the monitored process does not know/care that it is being monitored.
Monitoring is commonly used in pools, a very common supervision pattern. See the Process.monitor/1 documentation and also “the need for monitoring” in the ‘getting started’ guide for more information.
EDIT: I was mistaken. @Aetherus’s answer is correct: The blue lines indicate (bidirectional) links between processes that are ‘extra’ (on top of the normal child/parent links between a supervisor and its supervising processes).
Sorry to tell you that you are wrong. I did my experiment before I answer this question.
What I did
- Create 2
GenServer
processes, named:worker1
and:worker2
, supervised by the top supervisor. - Link them together
- Create a
GenServer
process named:monitor
, also supervised by the top supervisor. - Make the
:monitor
process monitor the:worker1
. - Open the observer
What I saw