<div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div><br></div>call(Msg) -><br></div>    gen_server:call({Msg, erlang:monotonic_time()}).<br><br></div>receive<br></div>    {Msg, In} -><br></div>      Out = erlang:monotonic_time(),<br></div>      Sojourn = erlang:convert_time_unit(Out - In, native, milli_seconds),<br></div>      case Sojourn > 5000 of<br></div>          true -> {reply, argh, State}<br></div>          false -> ...<br></div>       end<br></div>end<br><br></div>is usually a better way of tracking calls if you have overflow troubles. Sojourn tracking and head-drop from the FIFO is what CoDel does, and it works wonders on network connections. It can avoid having to process messages in the queue which already fell for a timeout. Better, you can do case (Sojourn + ExpectedProcessingTime) > ?LIMIT of ..., which can avoid doing work which will break the time limit anyway, proactively.<br><br><br></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jan 23, 2018 at 12:35 PM Guilherme Andrade <<a href="mailto:g@gandrade.net">g@gandrade.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 23 January 2018 at 10:30, Max Lapshin <span dir="ltr"><<a href="mailto:max.lapshin@gmail.com" target="_blank">max.lapshin@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"></div><div class="gmail_extra">1) client comes to HTTP</div><div class="gmail_extra">2) http handler makes gen_server:call to singleton server</div><div class="gmail_extra">3) waits for 5 or 60 seconds and then exits, but message is already in process queue</div><div class="gmail_extra">4) server fetches this useless message from mailbox and starts making useless expensive operations</div><div class="gmail_extra">5) meanwhile client makes another duplicate request and again fills singleton mailbox with the same request</div></div></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>I've recently started to explore sbroker[1] as an alternative (in some cases) and I've been getting very interesting results.<br><br></div><div>Then again it's also (IIRC) backed by single processes that might become a bottleneck themselves, but at least those processes aren't doing anything else. Also, because it's this big toolkit with a lot of bells and whistles, it's easy to shoot yourself in the foot if you're not already acquainted with some of the abstractions, and so there might be somewhat of a learning curve.<br></div><div><br>[1]: <a href="https://github.com/fishcakez/sbroker" target="_blank">https://github.com/fishcakez/sbroker</a><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><br>-- <br><div class="m_5701868398881956512gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Guilherme<br></div></div></div></div></div></div>
</div></div></blockquote></div>