<div dir="ltr">Hello!<div><br></div><div>Taking the idea from this patch, I have now implemented a similar solution using maps instead of proplists. This is planned to be included in OTP 18.</div><div><br></div><div>The reason for choosing maps is mostly the simplicity compared to proplists. We do not expect supervisor to be used with earlier releases of OTP, so we see no problem in introducing maps here.</div>
<div><br></div><div>After some discussions we have chosen slightly different default values than in the original patch. First we discussed whether or not to have default values at all, but decided to have it in order to somehow lower the start barrier and make it easy to get "something" running.</div>
<div><br></div><div>Next we found that it would be very difficult to give default values that in general are "good", so we decided to use values that are "extreme" in one direction or the other - hopefully forcing the user to really think about which values to set instead of just settling with the defaults. So the defaults are not so much for the final product as for the first prototype.</div>
<div><br></div><div><div>Default values are as follows:</div><div>    </div><div>Supervisor flags:</div><div><br></div><div>Strategy: one_for_one.</div><div>Just pick one - 'one_for_one' is most used in OTP so we chose that.</div>
<div>    </div><div>Intensity: 0.</div><div>Better too few restarts by default than too many, in order to avoid scaling to extreme amounts of restarts if the depth of the supervisor tree grows.</div><div><br></div><div>Period: 1.</div>
<div>Since Intensity is by default 0, the Period will really not matter but setting a large value as default could potentially be a problem if the intensity is changed.</div><div><br></div><div>Child specs:</div><div><br>
</div><div>Restart: permanent.</div><div>Just pick one - 'permanent' is fairly common.</div><div><br></div><div>Shutdown: brutal_kill.</div><div>We want to avoid doing the same mistake as the 5 seconds default for gen_server:call, so we chose between 'brutal_kill' and 'inifinity', then settled for 'brutal_kill' since 'infinity' can cause bigger problems.</div>
<div><br></div><div>Type: worker.</div><div>Just pick one - we believe that 'worker' is most common.</div><div><br></div><div>Modules: [M].</div><div>where M comes from the child's start {M,F,A}.</div></div><div>
<br></div><div>Any comments on this?</div><div><br></div><div>Regards</div><div>/siri</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2012-01-03 22:11 GMT+01:00 Richard Carlsson <span dir="ltr"><<a href="mailto:carlsson.richard@gmail.com" target="_blank">carlsson.richard@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The formats of the supervisor flags (the 3-tuple {one_for_one, Restarts, Time}) and the child specifications (6-tuples {name, etc., etc.}) are annoyingly hard both to read and write. This patch makes it possible to pass lists of options instead, and sets useful defaults for most fields. This also opens for the possibility to add more flags both to supervisors and children in the future.<br>

<br>
  git fetch git://<a href="http://github.com/richcarl/otp.git" target="_blank">github.com/richcarl/otp.<u></u>git</a> proplist-child-spec<br>
<br>
For example:<br>
<br>
  init()<br>
     SupFlags = [{period,10}],<br>
     Child = [{name, foo}, {start, {M,F,A}}]<br>
     {ok, {SupFlags, [Child]}}.<br>
<br>
This gets you a one-for-one supervisor with a particular restart time period, and a single child with default behaviour. The name and start options are required.<br>
<br>
The supervisor flag defaults are:<br>
<br>
    strategy = one_for_one<br>
    intensity = 10<br>
    period = 30<br>
<br>
I.e., one-for-one supervision and at most 10 restarts in the last 30 seconds. This restart frequency seems like a useful default; let me know if you think some other numbers would be significantly better.<br>
<br>
The child spec defaults are:<br>
    restart_type = permanent<br>
    shutdown = 2000<br>
    child_type = worker<br>
    modules = [M], where M is the module in the start MFA<br>
<br>
Finally, there is a new function supervisor:get_childspec(Sup, Child) which can be used to get the full child specification (as a list) needed to restart the same child or another child like it.<br>
<br>
Note that the documentation has not been updated as part of this patch.<br>
<br>
  /Richard<br>
______________________________<u></u>_________________<br>
erlang-patches mailing list<br>
<a href="mailto:erlang-patches@erlang.org" target="_blank">erlang-patches@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-patches" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-patches</a><br>
</blockquote></div><br></div>