5.22. OMG Specification Compliance

5.22.1. [Critical] Extensible types did not include padding size in length value of each element of RTPS parameter list

Previously, Connext did not follow the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3 with regards to the Parameterized CDR Encoding. For each element of the RTPS Parameter list, the specification states that any padding bytes that may follow a serialized member won’t be taken into account in the parameter length of the member.

Connext now follows this specification; however, to be compatible with previous releases and not break backward compatibility, Connext does not follow the specification by default. To enable this fix and follow the specification, you have to unset the bit NDDS_CONFIG_XTYPES_PARAMETER_LENGTH_WITH_PADDING_BIT(0x00000004). For details, see Extensible Types Compliance Mask in the RTI Connext Core Libraries Extensible Types Guide.

Note that Connext’s non-compliance with the specification did not break functional correctness, it only affected interoperability with other vendors who were compliant with the specification.

[RTI Issue ID CORE-8640]

5.22.2. [Critical] Problems exchanging data with other vendors for types containing unbounded members

Connext did not follow the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.1 with regards to treating a 0 bound as UNBOUNDED when received as part of the TypeObject v1 for an endpoint. (TypeObject v1 was replaced with TypeObject v2 in version 1.2, but Connext does not support TypeObject v2 yet.) Therefore, you may have encountered issues when exchanging data with other vendors for types containing unbounded collections. For example:

struct MyType {
    string m1;
    sequence<long> m2;
};

The use of this unbounded type led to specific issues:

Deserialization Errors with DynamicData Readers

1. When using MyType’s TypeCode from the endpoints discovered from other vendors (type_code field in PublicationBuiltinTopicData and SubscriptionBuiltinTopicData) to create a DynamicData DataReader, you may have seen errors in deserializing data coming from DataWriters.

Incompatibility in DataReader and DataWriter Matching with Type Coercion

2. If reader_qos.type_consistency.kind was set to ALLOW_TYPE_COERCION in a DataReader for MyType from a different vendor, a Connext DataWriter for the same type failed to match with the DataReader.

3. Conversely, when reader_qos.type_consistency.kind was set to DISALLOW_TYPE_COERCION, a Connext DataReader/DataWriter for MyType wouldn’t match with a DataReader/DataWriter from another vendor.

This update resolves the first two issues. The third issue, involving matching problems when disallowing type coercion, is targeted for resolution in future releases. See Other Known Issues.

[RTI Issue ID CORE-14185]

5.22.3. [Critical] Non-primitive sequences and arrays serialized incorrectly with XCDR2_DATA_REPRESENTATION when using dds.type_plugin.dheader_in_non_primitive_collections

The property dds.type_plugin.dheader_in_non_primitive_collections was added in 7.0.0 to allow for compliance with the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3. When this property was enabled, an additional DHEADER was serialized after the member header. However, the fix was incomplete, and there were still cases where setting dds.type_plugin.dheader_in_non_primitive_collections to TRUE did not lead to specification compliance.

This problem has been fixed. In addition, the property dds.type_plugin.dheader_in_non_primitive_collections has been removed and replaced with the ability to set an Extensible Types compliance mask. To allow compliance with the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3, for XCDR 2, you will need to set the bit NDDS_CONFIG_XTYPES_DHEADER_IN_NON_PRIMITIVE_COLLECTIONS_BIT instead of setting the property. For details, see Extensible Types Compliance Mask in the RTI Connext Core Libraries Extensible Types Guide.

[RTI Issue ID CORE-13906]

5.22.4. [Critical] DataReader on a Topic using an appendable type may have received samples with incorrect value

See RTI Issue ID CORE-9042 in Data Corruption.

5.22.5. [Major] FlatData did not support XCDR2-compliant serialization

The serialization/deserialization of sequences and arrays with non-primitive members for FlatData did not follow the OMG ‘Extensible and Dynamic Topic Types for DDS’ specification, version 1.3. This led to compatibility issues with other DDS implementations.

This problem has been fixed, although the new behavior is not enabled by default, in order to keep backward compatibility with previous Connext releases. If interoperability with other vendors is a concern, you can enable the new standard-compliant serialization by setting the rti::config::compliance::XTypesMask::dheader_in_non_primitive_collections() compliance mask. For information, see the API Reference HTML documentation. (For example, see the Modern C++ API Reference here.)

[RTI Issue ID CORE-13944]