[erlang-questions] Understanding supervisor / start_link behaviour
Thu Jun 2 10:50:43 CEST 2011
On Jun 2, 2011, at 09:15 , Steve Strong wrote:
> Yeah, that makes perfect sense and would obviously solve the problem.
> The reason we'd gone down this path was that we had a number of
> "sub" processes (the gen_event just being one example) that we felt
> would be "polluting" the supervisor; these sub-processes were just
> helpers of the primary gen_servers that the supervisor was
> controlling - using a start_link in the primary gen_servers felt
> like a very clean and easy way of spinning up these other processes
> in a way that (we thought) would still be resilient to failures.
I dealt with such a situation using a supervisor that starts all
mandatory process and a child supervisor.
The child supervisor starts all other processes that needs those
> The thing that bit us was that we naively thought that, due to the
> sub-process being linked, it would die when the parent died. Of
> course, it does, but its death is asynchronous to the notification
> that the supervisor receives and hence it may well still be alive
> (doomed, but alive) when the supervisor begins the restart cycle.
> Our servers don't crash that often, and when they do this race
> condition is was rarely seen, which was reinforced our
> misconceptions. The only thing that does surprise me is how many
> times the supervisor can go round the restart loop before the doomed
> process finally exits - we have seen it thrash round this loop about
> 1000 times before the supervisor itself finally fails; I guess it's
> just down to how things are being scheduled by the VM, and in those
> cases we were just getting unlucky.
> Sounds like best-practice within the OTP world is to have everything
> started via a supervisor - is that a fair comment?
is a way "observe" the whole starting process, and see what could be
> Steve Strong, Director, id3as
> On Wednesday, 1 June 2011 at 23:57, Ahmed Omar wrote:
>> Agree with Roberto, you should put under supervisor. Regarding your
>> case, i would guess you are trapping exit in your init in
>> On Wed, Jun 1, 2011 at 11:15 PM, Roberto Ostinelli <
>> > wrote:
>>> hi steve,
>>> your gen_event should be started by your supervisor too. in this
>>> case, since you specified a one_for_all behaviour, when gen_server
>>> crashes, gen_event will be restarted too.
>>> erlang-questions mailing list
>> Best Regards,
>> - Ahmed Omar
>> Follow me on twitter
> erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions