Why is my Connext DDS application triggering 'PRESCstReaderCollator_storeSampleData:!deserialize' when trying to communicate with a newer version?

Note: Applies to RTI Connext 5.2.3 and before.

Starting with Connext DDS 5.3.0 (also in 5.2.7) the number of locators that can be announced by a DomainParticipant increased from 4 to 16. However, older versions (5.2.3 or lower) only allow 4 locators to be announced as part of the Participant discovery (DATA(p) in Wireshark). 

This means that if your Connext DDS 5.3.0 (or above) application runs on a machine with more than 4 interfaces, its discovery information will not be compatible with applications running Connext DDS 5.2.3 (or below).
In this case, when the older application receives the Connext DDS 5.3.0 DATA(p) packet, it doesn’t know how to deserialize the packet because it doesn’t expect to find more than 4 locators. When this happens, you will see the following error:

PRESCstReaderCollator_storeSampleData:!deserialize
COMMENDSrReaderService_assertRemoteWriter:!create reachable destination


To ensure backwards compatibility with Connext DDS 5.2.3 and older releases and avoid this deserialization error, you can restrict the maximum number of announced locators to 4. To do so, set the property “max_announced_locator_list_size” in the Connext DDS 5.3.0 (or above) application as follows:

<participant_qos>
   <property>
      <value>
         <element>
            <name>dds.domain_participant.max_announced_locator_list_size</name>
            <value>4</value>
         </element>
      </value>
   </property>
</participant_qos>

With this setting, the Connext DDS 5.3.0 (or above) application will send only the first 4 locators. If the machine has more than 4 locators, you can use the property “allow_interfaces_list” to specify which 4 interfaces you want to announce as locators in your DATA(p) packets. You can find more information about how to do this here.