[erlang-questions] Custom supervisor
Sat Jan 17 12:27:51 CET 2009
Le 17 janv. 09 à 10:52, Dominic Williams a écrit :
> Hi Paul,
> Paul Guyot a écrit :
> > [...]
>> Is there a more OTP-way to perform this, i.e. to track the death/
>> restarts of the children of a supervisor?
> In the OTP approach, you should not mix supervision with work. Your
> manager is doing work, so it should not be a supervisor as well.
> One solution would be for the manager to attach the workers as
> dynamic childs to its own supervisor. This would be if the number of
> workers is variable.
> If the number of workers is fixed, everyone (manager and workers)
> could be declared as fixed children in the same supervisor.
> Both of the above approaches are right if the restart strategies are
> the same for manager and workers, though, which is rarely the case.
> The "standard" solution in your kind of case is to have a top
> supervisor that supervises the manager and another supervisor. The
> sub-supervisor supervises all the workers. You'd probably need to
> have the workers register themselves with the manager when they
> start or restart.
Thank you for your reply.
What you describe is what we did at first, i.e. a tree with a
manager_sup that has the manager and a worker_sup as its children, the
worker_sup having a simple_one_for_one strategy (we have a variable
number of workers). We abandoned this approach because the worker
needs to know when its started or restarted. Hence the idea of a
custom supervisor that would change a parameter to start_link whenever
the process is started or restarted. But maybe we outlook the standard
supervisor and there is a way to figure out if a worker is started or
restarted by the supervisor?
I also realize that having a supervisor doing some work is a very bad
idea as it implies that the workers are killed if the manager dies,
which might not be desirable.
More information about the erlang-questions