[erlang-questions] non-trivial supervisor idioms?
Mon Sep 27 19:19:29 CEST 2010
On 27 Sep 2010, at 18:14, Edmond Begumisa wrote:
> 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.
> - 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
>> - 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
>> Ulf W
> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Ulf Wiger, CTO, Erlang Solutions, Ltd.
More information about the erlang-questions