[erlang-questions] Re: non-trivial supervisor idioms?
Mazen Harake
mazen.harake@REDACTED
Tue Sep 28 08:05:17 CEST 2010
On 28/09/2010 08:09, Steve Davis wrote:
> I defined mnesia/
> crypto and other dependencies as included apps and started their own
> sups under the main app sup (as recommended
> http://www.erlang.org/doc/design_principles/included_applications.html).
I'm not sure this is a good idea imho, I think included applications are
meant to be used for your own specific applications only and not the
generic ones like mnesia, crypto etc. I could be wrong but doing it the
way you described just feels wrong.
The way I understand included applications is that lets say you build
application A1.0 and you want to generalize some part of that and move
that part into its own application B1.0. Application B in this case
doesn't make sense on its own (I.e. you remove application A) but it
does make sense in the way that if you want to build a new A, and make
it A2.0 then B1.0 could still apply (perhaps it implements some core
protocol or what ever). In THIS case it would make sense to have
application B as an included application and not as a primary
application. However, I usually start all applications as primary
applications and specify dependencies instead. I make the
assumption/argument that if Application B can't start up then there is
no point for A to start thus the normal boot up sequence is most of the
time (I'd say 98%) good enough.
The way I usually handle the scenario OP mentioned: always make sure
data, configuration, mnesia tables exist and are sane in the start
function of my application (myapp:start/2). You can spread out the
various test functions in their respective modules to encapsulate the
functionality (E.g. myapp_data:check_fix(), myapp_conf:validate(),
myapp_db:ensure_tables() etc...) but essentially it is all tested from
the application's start function. I _never_ start other applications in
my application... I believe this is unnecessary and that it makes the
release centered around one application and I rarely write a system
where I have a release with only one application.
I have personally very little experience with start phases but I have
never come across any situation that couldn't be solved in a
(conceptually) equally good way.
My 2 cents :)
/Mazen
More information about the erlang-questions
mailing list