6.9. Known Issues with Transports
6.9.1. AppAck messages cannot be greater than underlying transport message size
A DataReader with acknowledgment_kind (in the
ReliabilityQosPolicy) set to DDS_APPLICATION_AUTO_ACKNOWLEDGMENT_MODE or
DDS_APPLICATION_EXPLICIT_ACKNOWLEDGMENT_MODE cannot send AppAck messages
greater than the underlying transport message size.
If a DataReader tries to send an AppAck message greater than the
transport message size, Connext will print the following
error message:
COMMENDFacade_sendAppAck:!add APP_ACK to MIG
COMMENDSrReaderService_sendAppAck:!send APP_ACK
PRESPsService_onReaderAppAckSendEvent:!send acknowledgment
To recover from the above error, the DataReader must acknowledge
samples until the size of the AppAck message goes below the transport
message size threshold.
Why does an AppAck message increase its size? An AppAck message contains
a list of sequence number intervals where each interval represents a set
of consecutive sequence numbers that have been already acknowledged. As
long as samples are acknowledged in order, the AppAck message will
always have a single interval. However, when samples are acknowledged
out of order, the number of intervals and the size of the AppAck will
increase.
For more information, see the “Application Acknowledgment” section in
the Core Libraries User’s Manual.
[RTI Issue ID CORE-5329]
6.9.2. DataReader cannot persist AppAck messages greater than 32767 bytes
A DataReader using durable reader state, whose acknowledgment_kind
(in the ReliabilityQosPolicy) is set to
DDS_APPLICATION_AUTO_ACKNOWLEDGMENT_MODE or
DDS_APPLICATION_EXPLICIT_ACKNOWLEDGMENT_MODE, cannot persist an AppAck
message greater than 32767 bytes.
To recover from the previous error, the DataReader must acknowledge
samples until the size of the AppAck message goes below the transport
message size threshold.
For more information, see the section “Durable Reader State,” in the
Core Libraries User’s Manual.
[RTI Issue ID CORE-5360]
6.9.3. Discovery with Connext Micro fails when shared memory transport enabled
Given a Connext application with the shared memory
transport enabled, a Connext Micro 2.4.x application will
fail to discover it. This is due to a bug in Connext Micro
that prevents a received participant discovery message from being
correctly processed. This bug will be fixed in a future release of
Connext Micro. As a workaround, you can disable the shared
memory transport in the Connext application and use UDPv4
instead.
[RTI Issue ID EDDY-1615]
6.9.4. Communication may not be reestablished in some IP mobility scenarios
If you have two Connext applications in different nodes
and they change their IP address at the same time, they may not
reestablish communication. This situation may happen in the following
scenario:
The applications see each other only from one single network.
The IP address change happens at the same time in the network
interface cards (NICs) that are in the network that is in common for
both applications.
The IP address change on one of the nodes happens before the arrival
of the DDS discovery message propagating the address change from the
other side.
[RTI Issue ID CORE-8260]
6.9.5. Corrupted samples may be forwarded through Routing Service when using Zero-Copy transfer over shared memory
When using Zero Copy transfer over shared memory together with RTI
Routing Service, Routing Service avoids an additional copy of the
data by passing a reference to the sample from the input to the output
of a route. If the sample is reused and rewritten by the original
application DataWriter during the time between when the sample was
received on the route input and copied into the route output buffer, the
forwarded sample will contain the updated, and now invalid, values for
the original sample.
This situation can be avoided in a few different ways, with various
tradeoffs.
6.9.5.1. Use automatic application acknowledgment
Using automatic application acknowledgment (acknowledgment_mode =
APPLICATION_AUTO_ACKNOWLEDGMENT in the Reliability QoS Policy) between
the Routing Service input DataReader and its matching DataWriters
will avoid the issue.
When using Zero Copy transfer over shared memory, DataWriters must
loan samples using the get_loan API. Only samples that have been
fully acknowledged will be returned by the get_loan API. This means
that if automatic application acknowledgment is turned on, that only
samples that the Routing Service has already copied and written to the
route output will be available for reuse by the original DataWriter,
because Routing Service does not return the loan on a sample until
after it is forwarded to the route outputs.
The drawback to this approach is that it requires RELIABLE Reliability.
In addition, application-level acknowledgments are not supported in
Connext Micro, so this approach will not work if Connext Micro is
the source of the Zero Copy samples.
6.9.5.2. Ensure that the number of available samples accounts for Routing Service processing time
Regardless of whether you are using Routing Service, it is important
when using Zero Copy transfer over shared memory to size your resources
so that your application can continue to write at the desired rate while
the receiving applications receive and process the samples. If you are
using Routing Service and cannot, or do not wish to, use automatic
application acknowledgments, you must take into account the amount of
time it will take to receive and forward a sample when setting
writer_loaned_sample_allocation in the DATA_WRITER_RESOURCE_LIMITS
QoS Policy and managing the samples in your application.
[RTI Issue ID CORE-10782]
6.9.6. Network Capture does not support frames larger than 65535 bytes
Network capture does not support frames larger than 65535 bytes. This
limitation affects the TCP transport protocol if the
message_size_max property is set to a value larger than the default
one.
[RTI Issue ID CORE-11083]