[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