For a large or complex topic data type, why can't generic DDS applications such as Admin Console, DDS Spy and Recording Service get the data type information?

For a complex topic data type that has many fields or long field names, Admin Console may not be able to show the topic’s data type, DDS Spy may not be able to print the samples’ contents, Recording Service may not be able to record the data, and Analyzer may show the warning “Failed to create TypeDOM for type …”. The underlying cause is that the subscribers cannot receive the type description from the publisher because its size exceeds the default limit.

The names and definitions for a type and its fields are represented by TypeCode objects. In addition to being used locally, serialized type codes are by default published automatically during discovery as part of the built-in topics for publications and subscriptions. This allows applications to dynamically subscribe to topics of arbitrary types. This functionality is useful for generic system-monitoring tools like Admin Console and DDS Spy. 

If your data type has an especially complex type code, you may need to increase the value of thetype_code_max_serialized_lengthfield in theDOMAIN_PARTICIPANT_RESOURCE_LIMITSQoS (the default value is 2048 bytes). For example:  

<participant_qos>
    <resource_limits>
        <type_code_max_serialized_length>8912</type_code_max_serialized_length> 
    </resource_limits>
</participant_qos>

 

Note: type_code_max_serialized_length should be set to the same value on both publisher and subscriber sides.  For DDS Spy, this limit can be set with the -tcMaxSize parameter. For other tools, please refer to their user manuals for details on how to configure their QoS.

TypeObjects were introduced in RTI Connext 5.0.0 as a new way to describe data types for the purpose of supporting extensible types (see the ExtensibleTypeAddendum). So you can also increase thetype_object_max_serialized_lengthfield in the DOMAIN_PARTICIPANT_RESOURCE_LIMITSQoS to support large data types; its default value is 3072 bytes. Once you have set type_object_max_serialized_length, you may disable propagating TypeCodes by settingtype_code_max_serialized_lengthto 0. This can help to have a shorter RTPS message size. However, if you only want to use TypeCodes, you may disable propagating TypeObjects by settingtype_object_max_serialized_lengthto 0. 

type_object_max_serialized_lengthonly needs to be set on the publisher side, so you don’t need to configure it in DDS Spy or Admin Console.

Note: As of RTI Connext 5.1.0, TypeObjects are not fully supported by Recording Service, so increasing type_object_max_serialized_lengthmay not work for Recording Service.

If you need to settype_code_max_serialized_length ortype_object_max_serialized_lengthto a number larger than 9k, please see How to send big TypeCodes and TypeObjects.