[erlang-questions] non-trivial supervisor idioms?

Ulf Wiger ulf.wiger@REDACTED
Mon Sep 27 16:31:47 CEST 2010


On 27/09/2010 16:15, Daniel Goertzen wrote:
> I've read the documentation on supervision and have seen a few tutorials,
> but they don't seem to move beyond the core concepts.  For example, what
> happens if you want to check and optionally setup an mnesia schema during
> startup...where should this code go?  In the supervisor init() or
> start_link() function?  Should I have my supervisor create a worker process
> whole sole job is to do this kind of setup and then dynamically add other
> workers (or supervisors) to the supervisor with start_child()?

I strongly recommend doing that sort of thing in a separate procedure,
rather than in the startup phase.

If you want your application to be able to bootstrap itself, I would
suggest that you either:

- create a special application that runs before your other apps,
   and verifies that the installation is ok. To this end, it might be
   useful to know that you can pre-sort the .rel file. The systools lib
   will only change the sort order if needed to respect start
   dependencies.
- Introduce start_phases, then do minimal work in the init function,
   and push the rest to functions that are called from start phase
   hooks. This also has the advantage that you know that your processes
   are all started and ready to respond during the init phase.

Start phases are documented in
http://www.erlang.org/doc/apps/kernel/application.html#Module:start_phase-3

BR,
Ulf W

-- 
Ulf Wiger
CTO, Erlang Solutions Ltd, formerly Erlang Training & Consulting Ltd
http://www.erlang-solutions.com


More information about the erlang-questions mailing list