[erlang-questions] non-trivial supervisor idioms?
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
- 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
CTO, Erlang Solutions Ltd, formerly Erlang Training & Consulting Ltd
More information about the erlang-questions