Skip to content
hyperthunk edited this page Apr 19, 2011 · 3 revisions

This page explains the supervision trees for each of the nodewatch applications.

DxKit

This is the most complex supervision tree in the system, consisting of several sub-trees and using a variety of supervision models. The overall structure looks like this:

 x-------------------------x x------------------| dxkit_sup (one_for_one) |-----------------x | x-------------------------x | | | | | | | x------------x----------x x--------x------------x x-------------------x------------------x | dxkit_event_subsystem | | dxkit_net_subsystem | | dxkit_monitor_subscription_subsystem | | <<supervisor>> | | <<supervisor>> | | <<supervisor>> | x-----------------------x x---------------------x x--------------------------------------x 

The event subsystem comprises a locally registered gen_event manager and a simple_one_for_one supervisor which acts as a bridge between the event manager and the gen_event handler (callback modules), by wrapping the handler(s) in a gen_server. This handler bridge catches abnormal exits in the event handlers and stops, which in turn triggers the event_bridge to restart the handler. The branch supervisor uses rest_for_one so that the event bridge will restart independently, but a crash in the event handler will force the bridge to also restart - a necessary step if we want to re-register the gen_event handlers with the new manager instance.

 x-----------------------x | dxkit_event_subsystem | x-----------| <<supervisor>> |------------x | x-----------------------x | | | x-----------x---------x x----------x---------x | dxkit_event_handler | | dxkit_event_bridge | | <<gen_event/mgr>> | | <<supervisor>> | x---------------------x x----------x---------x v v v x----------V-----------x | event handler bridge | | <<gen_server>> | x----------------------x 

TBC.

Clone this wiki locally