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]