<div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Vance<div><br></div><div>thanks for your advice !</div><div><br></div><div>> However that would have the side effect of kill stun_worker and srtp_worker when dtls_worker exited.</div><div>that's expected, because they share same socket which timeouted.</div><div><br></div><div>> Yes, exit the child and have the supervisor's restart strategy do it's job.</div><span class="gmail-im" style="color:rgb(80,0,80)">> <span style="color:rgb(34,34,34)">You could set the restart strategy of the above udp_sup to be </span><span style="color:rgb(34,34,34)">'rest_for_one' which would kill all the other workers when it died.</span></span><div><br></div><div><span class="gmail-im"><div>I don't wanna restart child workers, so make it `restart => temporary` in childspec.</div><div>but in that case, if udp_woker terminates, udp_sup doesn't terminate. only igore it.</div><div><br></div><div>make if make `restart => permanent` and sup flag like below</div><div><br></div><div>```</div><div>SupFlags = #{<br></div></span><div>      strategy  => rest_for_one, # same for one_for_all</div><div>      intensity => 0,</div><div>      period    => 1</div><div>},</div></div><div><span class="gmail-im">```</span></div><div><span class="gmail-im">that's terminates supervisor with ErrorReport with</span></div><div><span class="gmail-im">reached_max_restart_intensity.</span></div><div><span class="gmail-im"><br></span></div><div>it's terminates all supervision tree include udp_sup as I expected</div><div>but I don't intent to restart, only shutdown like temporary :(</div><div><br></div><div><br></div><div>> The right way is to have a seperate supervisor for [dtls|stun|srtp]_worker as a sibling to udp_worker.</div><div><br></div><div>I think you mean like this.</div><div><br></div><div>udp_sup - udp_worker</div><div>               |- dtls_sup - dtls_woker</div><div>               .... (same for stun,srtp)</div><div><br></div><div>if udp_worker be temporary, udp_sup will ignore,</div><div>if udp_wokrer be permanent and intensity = 0, period = 1</div><div>udp_sup will terminate with error because of restart error (even if I don't intent to restart)</div><div><br></div><div><br></div><div>if I misreading something, please mention me.</div><div><br></div><div>thanks</div><div>Jxck</div><div><br></div><div><br></div><div><br></div><div><br></div><div><span class="gmail-im"><br></span><div><br></div><div><span class="gmail-im" style="color:rgb(80,0,80)"><br></span></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">2019年2月14日(木) 15:53 Vance Shipley <<a href="mailto:vances@motivity.ca">vances@motivity.ca</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Feb 14, 2019 at 11:52 AM <a href="mailto:block.rxckin.beats@gmail.com" target="_blank">block.rxckin.beats@gmail.com</a><br>
<<a href="mailto:block.rxckin.beats@gmail.com" target="_blank">block.rxckin.beats@gmail.com</a>> wrote:<br>
> I'm writing udp server with supervision tree like below.<br>
...<br>
>               (s1for1)      (1for1)<br>
> server_sup - udp_sup -  |- udp_worker<br>
>                                        |- dtls_worker<br>
>                                        |- stun_worker<br>
>                                        |- srtp_worker<br>
<br>
> is there any way to terminate supervisor from it's child process ?<br>
<br>
Yes, exit the child and have the supervisor's restart strategy do it's job.<br>
<br>
> or any other recommended process architecture for UDP server ?<br>
<br>
You could set the restart strategy of the above udp_sup to be<br>
'rest_for_one' which would kill all the other workers when it died.<br>
However that would have the side effect of kill stun_worker and<br>
srtp_worker when dtls_worker exited.<br>
<br>
The right way is to have a seperate supervisor for<br>
[dtls|stun|srtp]_worker as a sibling to udp_worker.<br>
<br>
<br>
-- <br>
     -Vance<br>
</blockquote></div>