[erlang-questions] Supervision trees and child startup ordering

Youngkin, Rich richard.youngkin@REDACTED
Wed Apr 30 20:59:50 CEST 2014


Hi,

I'm using a supervision tree to manage multiple sets of gen_servers.  I've
got a situation where gen_servers in one supervision tree (e.g., Tree-B)
are clients of gen_servers in another supervision tree (e.g., Tree-A).  I'd
like Tree-A and all of it's children to complete their initialization
processing before starting any of the children in Tree-B.

                        Root Supervisor
                              |
              ----------------------------------
              |                                |
         Supervisor-A                     Supervisor-B
              |                                |
      -----------------                  -------------
      |       |       |                  |           |
      1       2       3                  4           5

So given this diagram, A and its children 1,2 and 3 start and complete
initialization before B and children 4 and 5 are started and complete
initialization. Furthermore, initialization in this case means that in
module:init/1 the child casts itself a message to complete initialization.
E.g.,

    ...

    init([]) ->
       gen_server:cast(?MODULE, complete_initialization),
       {ok, []}.

    ...

During Child 4's initialization it calls a function on Child 1 (which has
an init/1 implementation as described above).

In reading http://www.erlang.org/doc/man/supervisor.html#start_link-2 I
understand that Supervisor-A and all it's children will be started and
available before Supervisor-B and its children are started.  It's also my
understanding that when a child casts itself a message in its init/1
function that that message is guaranteed to be the first message in its
mailbox. Is my understanding of this correct and if so, is this a
reasonable way to do what I'm trying to accomplish?

Thanks,
Rich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140430/f9c8a2de/attachment.htm>


More information about the erlang-questions mailing list