start phases

Thomas Lindgren thomasl_erlang@REDACTED
Fri Mar 4 11:57:24 CET 2005

--- "Ulf Wiger (AL/EAB)" <ulf.wiger@REDACTED>

> While you can still specify dependencies in the
> 'applications' attribute
> as before, you can now also specify dependencies for
> each start phase,
> like so: /.../

This sounds like a good idea. It subsumes a number of
ad hoc hacks (mnesia:wait_for_tables, anyone?) and may
eventually get rid of a number of existing race
conditions in OTP as well: the shell, as mentioned, as
well as orber, apparently, and perhaps more than that.

That is, today you can't rely on an application being
fully started (and its API functions working) even
when application:start(App) has returned. Likewise for
failover, etc. This can be annoying.

Cellpoint used (and their later incarnation perhaps
still uses) an approach similar to what you propose,
but entirely separate from the
applications/releases/... framework. Each subsystem
depended on a collection of others, did not advertise
itself until they all were available, and
de-advertised when and if one disappeared. This worked
fairly well. I think Per Bergqvist and Adam Aquilon
were the guys behind it.

The drawback, as I recall, is that it can be difficult
to see why the system refuses to start. Some sort of
inspection tool, as you suggest, may be necessary.


Celebrate Yahoo!'s 10th Birthday! 
Yahoo! Netrospective: 100 Moments of the Web

More information about the erlang-questions mailing list