[erlang-questions] non-trivial supervisor idioms?

Edmond Begumisa <>
Mon Sep 27 18:14:39 CEST 2010


Ulf,

I've been doing such initialisation in the init function of a worker  
manager process. Using Daniel's example, I might have a gen_server child  
of the main supervisor called db_mgr and set up the mnesia schema in  
db_mgr:init

Have I been doing the 'wrong' thing OTP-wise?

- Edmond  -

On Tue, 28 Sep 2010 00:31:47 +1000, Ulf Wiger  
<> wrote:

> 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
>


-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/


More information about the erlang-questions mailing list