[erlang-questions] Understanding supervisor / start_link behaviour
Antoine Koener
antoine.koener@REDACTED
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
mandatory processes.
>
> 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?
Yes, and
application:start(sasl).
is a way "observe" the whole starting process, and see what could be
wrong.
>
> Cheers,
>
> Steve
>
> --
> Steve Strong, Director, id3as
> twitter.com/srstrong
>
> 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
>> my_gen_event?
>>
>> On Wed, Jun 1, 2011 at 11:15 PM, Roberto Ostinelli <roberto@REDACTED
>> > 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.
>>>
>>> r.
>>>
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>>
>>
>>
>> --
>> Best Regards,
>> - Ahmed Omar
>> http://nl.linkedin.com/in/adiaa
>> Follow me on twitter
>> @spawn_think
>>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110602/aa303ed9/attachment.htm>
More information about the erlang-questions
mailing list