2.2.1. RTI Connext Core Libraries

The following issues affect backward compatibility in the Core Libraries starting in release 7.5.0. Issues in the Core Libraries may affect components that use these libraries, including Infrastructure Services and Tools.

2.2.1.1. Incompatibility between Python API and other APIs when using int8 type

Release 7.5.0 fixed an issue (PY-190) with communication between Python and the rest of the language APIs when using an int8 type. The int8 types were incorrectly treated as characters instead of octets, leading to communication failures.

This fix included changing the type to an octet, which means that the set_int8 methods that accepted a char as an argument have been removed. As a result, communication will not occur between Python 7.3.0 or 7.4.0 applications and Python applications in other releases (such as 7.5.0) that have the fix, when using an int8 type.

Since int8 types are well interpreted by Python, a workaround is to not propagate the TypeObject and rely on the topic name for matching:

<domain_participant_qos>
    <resource_limits>
        <type_object_max_serialized_length>0</type_object_max_serialized_length>
    </resource_limits>
</domain_participant_qos>

If the application you’re communicating with uses a version of Connext earlier than 6.0.0, the TypeCode also needs to be configured to not be propagated:

<domain_participant_qos>
    <resource_limits>
        <type_code_max_serialized_length>0</type_code_max_serialized_length>
        <type_object_max_serialized_length>0</type_object_max_serialized_length>
    </resource_limits>
</domain_participant_qos>

See DOMAIN_PARTICIPANT_RESOURCE_LIMITS QosPolicy (DDS Extension) in the Connext Core Libraries User’s Manual for more information on the type_code_max_serialized_length and type_object_max_serialized_length fields. See Type Representation in the Connext Core Libraries Extensible Types Guide for more information on TypeCode and TypeObjects in current and previous releases.

2.2.1.2. New discovery protocol APIs for RPC and Request-Reply in Python

In previous releases, the discovery process for RPC and Request-Reply was not reliable, sometimes causing loss of replies to the first requests. Release 7.4.0 introduced a new discovery protocol between clients and services that guarantees the client and service are ready to communicate in both directions. (See Modern C++ RPC API now fully productized and supported in the RTI Connext Core Libraries Release Notes for more information.) This protocol was included in the Modern C++ API in 7.4.0 and only partially in the Python API.

This release fully implements the discovery protocol in the Python API, bringing the Modern C++ and Python RPC and Request-Reply APIs up to par. See Python RPC API now fully productized and supported in the RTI Connext Core Libraries Release Notes for more information.

For Python starting in 7.5.0, sending the first request with a Requester requires ensuring that discovery has finished with the wait_for_service() method. If discovery has not finished, the send_request() method will immediately fail.

This new discovery protocol is not interoperable with Python applications on Connext 7.4 or below. The discovery protocol is not interoperable with any applications on 7.3 or below, nor with any applications built with with the C, Traditional C++, Java, and C# APIs. If a Requester tries to communicate with a Replier built with a previous incompatible release or one of these languages, wait_for_service() will time out and send_request() may fail. If you need to interoperate with a previous release or one of these languages, create the Requester with the parameter require_matching_service_on_send_request set to False and avoid calling wait_for_service().

2.2.1.3. Changed C function signatures could cause signed/unsigned warnings when compiling application code

The type of the buffer_size_in parameter has been updated from RTI_INT32 to size_t in the following pluggable transport C APIs:

  • NDDS_Transport_Address_to_string

  • NDDS_Transport_Address_to_string_with_class_id

  • NDDS_Transport_Address_to_string_with_protocol_family_format

For example, see NDDS_Transport_Address_to_string().

The behavior of the APIs has not changed, since the buffer_size_in parameter represents the size of the buffer used to get the address as a string, which should be positive. However, people using these functions could find benign warnings as a result of this change.