<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>On 9/26/17 10:05 AM, <b>Matthias Lang</b> wrote:<br>
    </p>
    <blockquote type="cite"
      cite="mid:20170926170537.tj2esvvm7474hvid@hec.corelatus.se">
      <pre wrap="">On 26. September 2017, Miles Fidelman wrote:


</pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">Miles, do you have some concrete examples of situations where you're
worried about messages disappearing? Here's one from me: process 1
sends two messages to process 2. The messages are A and B,
respectively. Process 2 sends an ACK for message B back to process
1. For single-node Erlang, if message A disappears then that is a
bug. I'll let others reason about distributed Erlang.
</pre>
        </blockquote>
        <pre wrap="">
Sure.  Bank transactions.  Edits to a document.  Dispatch commands to a
vehicle.
</pre>
      </blockquote>
      <pre wrap="">
Those are not what I consider concrete examples.</pre>
    </blockquote>
    <br>
    How concrete do you need.  There are lots of systems where one needs
    reliable, ordered message delivery.  One generally implements an
    acknowledgement, but those can be unordered.<br>
    <br>
    Let's say that a transaction is a test-and-set on a value.  With
    acknowledgement sent after transaction is executed.<br>
    <br>
    Send transactions 1,2,3,4,5<br>
    <br>
    If message delivery is ordered & guaranteed, then an
    acknowledgement from 5 guarantees that transactions 1-4 were
    performed, in order, even if some of the acknowledgements were not
    received.<br>
    <br>
    If, either, a message can get dropped, or it can get delivered out
    of order, then one needs a protocol on top of basic message delivery
    to wait for an acknowledgement of each and every message before
    sending the next.  <br>
    <br>
    There are multiple approaches to implementing a reliable messaging
    protocol.  What approach would work best somewhat depends on the
    kinds of failure modes one has to deal with (i.e., the services
    provided by the next layer down).<br>
    <br>
    Miles<br>
    <pre class="moz-signature" cols="72">-- 
In theory, there is no difference between theory and practice.
In practice, there is.  .... Yogi Berra</pre>
  </body>
</html>