<div dir="ltr">Hi<div><br></div><div>As far as I understand <span style="font-family:arial,sans-serif">OTP-8623 how it works is it puts a marker in the message queue when a reference is created (and other special conditions apply) and in case of a selective receive which contains that reference only the messages received after that marker are scanned. This makes sense as messages that were sent before the reference was created cannot contain that reference.</span></div>
<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Considering this it makes no sense to use a reference that was created in init since all (or almost all) messages will be sent after init.</span></div>
<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">The readme stating "constant time" is at least a bit misleading. It probably only refers to the fact that no matter how long your message queue already is if you create a reference now and you only expect to receive one or few new messages after this it will be cheap to find that message in the queue. It will still scan the new messages in sequence, no hashing or anything.</span></div>
<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">I might be wrong of course</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div>
<span style="font-family:arial,sans-serif">br</span></div><div><span style="font-family:arial,sans-serif">Peter</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 11, 2014 at 7:50 AM, Michael Truog <span dir="ltr"><<a href="mailto:mjtruog@gmail.com" target="_blank">mjtruog@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF"><div class="">
    <div>On 04/10/2014 08:56 PM, Dmitry
      Demeshchuk wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Well, actually, if Michael pointed me at a module
        that handles that and it was something similar, that could have
        been helpful :)
        <div><br>
        </div>
        <div>But, judging by the priorities from -128 to 127, it's
          probably a manual filter of some kind, probably with an
          intermediate mailbox-reducer process.</div>
      </div>
    </blockquote></div>
    The v1 UUID acts as the known reference with O(1) complexity here. 
    The priority is being handled by an Erlang priority queue data
    structure called pqueue4 since there has to be some queue structure
    for queuing service requests so that atomic transactions can occur
    for service requests.  This might not have been the priority you had
    in mind if you were thinking about various pattern matching cases on
    different priority values, but I have found the approach with a data
    structure more flexible and useful for the dynamic nature of a
    service, due to the need for a queue (which enforces the incoming
    limit, since it is easier than trying to do something error-prone
    with an Erlang pid directly, i.e., something that would modify the
    Erlang pid state or try to check it repeatedly).<div><div class="h5"><br>
    <br>
    <blockquote type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Which is fine, actually, but my question wasn't "how to
          handle huge queues?", but "is using OTP-8623 for that an
          anti-pattern of some sort?".</div>
        <div><br>
        </div>
        <div>And yeah, definitely not "what platform should I use?".</div>
      </div>
      <div class="gmail_extra"><br>
        <br>
        <div class="gmail_quote">On Thu, Apr 10, 2014 at 7:28 PM, zxq9 <span dir="ltr"><<a href="mailto:zxq9@zxq9.com" target="_blank">zxq9@zxq9.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote">
            <div>On Thursday 10 April 2014 17:24:54 Michael
              Truog wrote:<br>
              > On 04/10/2014 05:02 PM, Dmitry Demeshchuk wrote:<br>
              > > Hi list,<br>
              > ><br>
              > > Today (yeah, just a couple years have passed
              since R14A) I learned about<br>
              > > OTP-8623, which allows to do selective receive
              for messages that contain<br>
              > > a known reference with O(1) complexity.<br>
            </div>
            ...<br>
            <div>> > This could potentially help with
              sending managing messages to the<br>
              > > processes that may have overloaded inbox with
              thousands of messages. Say,<br>
              > > we see that the process gets overloaded and we
              send an operational<br>
              > > message of some kind ("discard the entire
              inbox", for example).<br>
              > ><br>
              > > Thoughts?<br>
              ><br>
              > You could get this interaction by creating an
              internal service with CloudI<br>
              > (<a href="http://cloudi.org" target="_blank">http://cloudi.org</a>).<br>
              <br>
            </div>
            Not so sure this is what the OP was getting at.<br>
            <br>
            "Is OTP8623 a lightweight way to overcome a clogged queue?"
            /= "Base<br>
            everything you do on some new service stack"<br>
            <div>
              <div>_______________________________________________<br>
                erlang-questions mailing list<br>
                <a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
                <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
              </div>
            </div>
          </blockquote>
        </div>
        <br>
        <br>
        <div><br>
        </div>
        -- <br>
        Best regards,<br>
        Dmitry Demeshchuk
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      <pre>_______________________________________________
erlang-questions mailing list
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a>
</pre>
    </blockquote>
    <br>
  </div></div></div>

<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>