[erlang-questions] Understanding supervisor / start_link behaviour

Steve Strong steve@REDACTED
Thu Jun 2 09:15:17 CEST 2011

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.

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?



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 my_gen_event?
> On Wed, Jun 1, 2011 at 11:15 PM, Roberto Ostinelli <roberto@REDACTED (mailto: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 (mailto: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 (http://twitter.com/#!/spawn_think)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110602/7d1448ae/attachment.htm>

More information about the erlang-questions mailing list