OpenDDS / OpenDDS

OpenDDS is an open source C++ implementation of the Object Management Group (OMG) Data Distribution Service (DDS). OpenDDS also supports Java bindings through JNI.
http://www.opendds.org
Other
1.29k stars 465 forks source link

RtpsUdpDataLink sends nacks when writer has clearly moved on #4548

Closed jrw972 closed 2 months ago

jrw972 commented 2 months ago

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

  1. Writer sends a HB for [X, X].
  2. OpenDDS Reader sends a NACK for X.
  3. Writer sends DATA with sequence number X + 1.
  4. Writer sends HB for [X+1, X+1].
  5. 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.