Using best effort reliability with transient local durability

5 posts / 0 new
Last post
Offline
Last seen: 2 years 11 months ago
Joined: 02/06/2020
Posts: 4
Using best effort reliability with transient local durability

Finding a case where the publisher is sending messages to existing participants, but not sending messages to late joiners. The QoS settings are below. Seems to work for late joiners when reliability.kind is changed to reliable for both DW and DR. Is it expected? Would like to use best effort in this case.

DataWriter QoS:

-reliability.kind = best effort

-durability.kind = transient local

-history.kind = keep last

-history.depth = 1

DataReader QoS:

same as above, plus:

-durability.direct_communication = true

Howard's picture
Offline
Last seen: 6 hours 54 min ago
Joined: 11/29/2012
Posts: 608
Offline
Last seen: 1 year 6 months ago
Joined: 05/30/2023
Posts: 1

When you say not supported, is this solely RTI?  I am not sure why it works but we have a QoS policy that is run using ADLINK OpenSplice Community Edition that has Durability set to transient_local and reliability is set to best_effort.  There are no QoS incompatibility errors and the Policy works.  I have seen that reliability must also be set to reliable when using fast_dds and OpenDDS.  Can you tell me if this is a vendor specific situation or can best_effort be used and that all messages may not be supplied to late joining endpoints as reliable isn't used?

Howard's picture
Offline
Last seen: 6 hours 54 min ago
Joined: 11/29/2012
Posts: 608

Unfortunately, the DDS specification doesn't state how DDS should be implemented to get durability to work.

As you've seen, some vendors chose an implementation such that the Reliability protocol is used to "repair" packets that were previously sent to "late joiners", DataReaders created after the data was sent".  And then, there may be some that chose to do it differently.

This sentence  "Can you tell me if this is a vendor specific situation or can best_effort be used and that all messages may not be supplied to late joining endpoints as reliable isn't used?" is difficult to parse.

But fundamentally, whether or not the Reliability QoS is required to support Durability is vendor specific.  And for a few of the vendors, it is required (and interoperable between those vendors).  And for at least OpenSplice, it seems that it is not.

Gerardo Pardo's picture
Offline
Last seen: 3 weeks 5 days ago
Joined: 06/02/2010
Posts: 602

Howard is right. The precise mechanism is not explained. Howrever during vendr interoperability tests we have seen that everyone is using the "reliability" protocol to send the "previopusly samples" to the late joiners.

However, it may be that some vendors automatically set RELIABILITY to TRUE as a side-effect of configuring DURABILITY > VOLATILE, whereas others don't. So I think to be portable you could set both explicitly as this should work for all vendords that support RTPS and DURABILITY TRANSIENT_LOCAL and above.