[erlang-questions] Delivery of messages

P.H.Welch <>
Thu Feb 23 18:49:53 CET 2012


Hello - I'm new to Erlang but have been working on concurrency stuff
for 27 years plus.  I'm afraid I want to ask a question asked many
times before, but under specific conditions that I've not seen nailed
down.  It's about the guaranteed delivery of messages.

The most authoritative discussion I've found is question 10.10 at:

  http://www.erlang.org/faq/academic.html

The answer quotes Per Hedeland:

  "Delivery is guaranteed if nothing breaks ..."

which would have been enough but for the following discussion!  This
continues with:

  "It seems this issue of "guaranteed delivery" comes up every now
   and then, but I've never managed to find out exactly what it is
   those that are asking for it actually want ..."

Three possible wants are then itemised, none of which are mine.  My
conditions are:

  If process P sends a message to process Q and:

    * neither process crashes;
    * Q commits to receive P's message;
    * the cores/processors/computers on which P and Q are running
      do not crash or get turned off;
    * no part of the communication fabric delivering the message
      crashes or gets turned off;
  
  is Q guaranteed to receive the message?                       (1)

I want to be sure that, under these conditions (in which nothing is
breaking), no message is ever lost in the system between P and Q.

A message *might* be lost by a non-crashing communication fabric
(e.g. if a buffer somewhere became full and, for memory or time
reasons, it was thought best to discard some traffic silently) or
by a non-crashing Erlang run-time system (same reason).

Do we have a guarantee that this (or something similar) does not
happen?

Is the answer to question (1) ... "Yes"?

Thanks,

Peter Welch.



More information about the erlang-questions mailing list