OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS also supports Java bindings through JNI.
When doing interoperability testing, OpenDDS was observed to send a nack for a sequence number that is no longer available. The offending sequence is
Writer sends a HB for [X, X].
OpenDDS Reader sends a NACK for X.
Writer sends DATA with sequence number X + 1.
Writer sends HB for [X+1, X+1].
OpenDDS Reader sends a NACK for X.
OpenDDS should treat X as unavailable.
Solution
The RtpsUdpDataLink contains a code fragment that handles this case but it is limited to the first heartbeat that was received. Move this code out so that it is processed for each heartbeat.
Problem
When doing interoperability testing, OpenDDS was observed to send a nack for a sequence number that is no longer available. The offending sequence is
OpenDDS should treat X as unavailable.
Solution
The RtpsUdpDataLink contains a code fragment that handles this case but it is limited to the first heartbeat that was received. Move this code out so that it is processed for each heartbeat.