<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 21, 2015 at 5:00 PM, Roger Lipscombe <span dir="ltr"><<a href="mailto:roger@differentpla.net" target="_blank">roger@differentpla.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":xs" class="a3s" style="overflow:hidden">I need delayed _restart_. Is this what Jesper refers to when he talks<br>
about "a delay_manager"? Such that init queries that and then<br>
might/might not delay?</div></blockquote></div><div class="gmail_extra"><br></div>%% The delay manager decouples delay policy from a worker by tracking delays in one place.</div><div class="gmail_extra">%% As such, it has global knowledge and can opt to delay registered processes more or less</div><div class="gmail_extra">%% depending on current load.<br>-module(delay_mgr).</div><div class="gmail_extra">-behaviour(gen_server).</div><div class="gmail_extra"><br></div><div class="gmail_extra">[..]</div><div class="gmail_extra"><br></div><div class="gmail_extra">%% Call this from a newly started worker, but not in it's init/1 callback since that blocks the supervisor</div><div class="gmail_extra">%% Send the process itself a message in init/1 and do it in that state.</div><div class="gmail_extra">delay(Reg) -></div><div class="gmail_extra">    gen_server:call(?MODULE, {delay, Reg}, infinity).</div><div class="gmail_extra"><br></div><div class="gmail_extra">[..]</div><div class="gmail_extra"><br></div><div class="gmail_extra">handle_call({delay, Reg}, From, #state { conf = Conf }) -></div><div class="gmail_extra">    Delay = maps:get(Reg, Conf),</div><div class="gmail_extra">    erlang:send_after(Delay, self(), {go, From}),</div><div class="gmail_extra">    {noreply, State};</div><div class="gmail_extra"><br></div><div class="gmail_extra">handle_info({go, Reg}, State) -></div><div class="gmail_extra">    gen_server:reply(From, ok),</div><div class="gmail_extra">    {noreply, State};</div><div class="gmail_extra"><br></div><div class="gmail_extra">[..]</div><div class="gmail_extra"><br clear="all"><div>This is static skeleton, but:</div><div><br></div><div>* Add monitoring of delayed processes. Increase the delay for processes that respawn too often</div><div>* Decay delays for processes which operates as they should</div><div>* Add metrics and stats</div><div><br></div>-- <br><div class="gmail_signature">J.</div>
</div></div>