[erlang-questions] non-trivial supervisor idioms?
Edmond Begumisa
ebegumisa@REDACTED
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
<ulf.wiger@REDACTED> 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