What error: Reliable large data requires asynchronous write
Note: Applies to RTI Connext 7.3.0 and below. Starting in release 7.4.0, asynchronous publishing is no longer a requirement for reliable, large data.
The error "COMMENDSrWriterService_on_Submessage:!write resend. Reliable large data requires asynchronous write
" is due to having a data type that is greater than the transport's message_size_max and the reliability QoS is set to RELIABLE_RELIABILITY_QOS.
Reliable samples larger than the transport's message_size_max require asynchronous publication. See the 'ASYNCHRONOUS_PUBLISHER QosPolicy' section of the RTI Connext Core Libraries and Utilities User's Manual for details.
You can send large data (.> message_size_max) with DDSDataWriter using the SYNCHRONOUS publish_mode but it can only be sent using BEST_EFFORT reliability QOS. To send large data with RELIABLE reliability QOS, you must use a DataWriter that uses the ASYNCHRONOUS publish_mode.
One common issue is that the current default transport buffers are 8K. To get larger sizes you need to increase the transport buffers. Here are some sample settings:
<datawriter_qos> <publish_mode> <kind>ASYNCHRONOUS_PUBLISH_MODE_QOS</kind> </publish_mode> <datawriter_qos> <participant_qos> <receiver_pool> <buffer_size>65530</buffer_size> </receiver_pool> <property> <value> <!-- UDP transport --> <element> <name>dds.transport.UDPv4.builtin.parent.message_size_max</name> <value>65530</value> <propagate>false</propagate> </element> <element> <name>dds.transport.UDPv4.builtin.recv_socket_buffer_size</name> <value>65530</value> <propagate>false</propagate> </element> <element> <name>dds.transport.UDPv4.builtin.send_socket_buffer_size</name> <value>65530</value> <propagate>false</propagate> </element> <!-- Shared memory --> <element> <name>dds.transport.shmem.builtin.parent.message_size_max</name> <value>65530</value> <propagate>false</propagate> </element> <element> <name>dds.transport.shmem.builtin.receive_buffer_size</name> <value>65530</value> <propagate>false</propagate> </element> <element> <name>dds.transport.shmem.builtin.received_message_count_max</name> <value>32</value> <propagate>false</propagate> </element> </value> </property> </participant_qos>
Note: Due to the layered architecture of Connext, messages are sized to the smallest transport, so be sure to adjust all the transports you are using (typically UDPv4 & shared memory).