[erlang-questions] non-trivial supervisor idioms?

Ulf Wiger <>
Mon Sep 27 19:19:29 CEST 2010


On 27 Sep 2010, at 18:14, Edmond Begumisa wrote:

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

Not necessarily, but my personal preference is to cleanly separate setup code
from application startup. This is in part because I used to work on a very complex
product, where the setup was decidedly non-trivial, and the startup process had 
to be optimised in several steps.

Still, even there, I believe that the setup logic was bootstrapped into the startup
phase, but the code was still kept cleanly separated. The only thing that was 
part of the startup was a simple check to see if the setup code had been run.

BR,
Ulf W


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

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com





More information about the erlang-questions mailing list