Suppose that I am fine with messages being dropped but am not fine with messages arriving out of order. That is, if a message is older than one I have already received, I want it to be ignored.
Is there anything in the RTI DDS API that would allow me to specify that that is what I want, or will I have to implement some check for this in the application?
What do you mean by "out of order"? Do you mean messages sent from a single DataWriter, a single DomainParticipant, or do you mean accorss different applicatios based on some "global time order"?
So there are different mechanisms available which depend on the use-case.
Regards,
Gerardo
I mean messages sent from a single DataWriter, a single DomainParticipant.
I am a little confused by your statement: "The middlware would drop a message rather than accept it out of order. This happens for all Qos setings." It seems that it might contradict the RTI DDS 4.5d User's Manual, quoted below:
10.1.1 Best-effort Delivery Model
By default, RTI Data Distribution Service uses the best-effort delivery model: there is no
effort spent ensuring in-order delivery or resending lost samples.
I guess, then, that even though there is no effort spent ensuring in-order delivery, the middleware still drops out-of-order messages. Is that correct?
Yes, you are right the statement "there is no effort spent ensuring in-order delivery or resending lost samples" is not entirely correct.
In "Best efforts" there is a little bit of effort to ensure there are no duplicates or our-of-order samples. Basically the DataReader keeps the
higuest accepted sequence number
from each DataWriter. If a sample arrives with sequence number less or equal to thathiguest accepted sequence number
it will be dropped. This avoids both duplicates and out of order samples.Gerardo