diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index fe74f43b9..e05fd538c 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -961,7 +961,7 @@ void dds_domain_examples() pqos.properties().properties().emplace_back( "fastdds.type_propagation", - "enabled"); + "disabled"); //!-- } } diff --git a/code/XMLTester.xml b/code/XMLTester.xml index ea249964c..576c56ae4 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -3265,7 +3265,7 @@ fastdds.type_propagation - enable + disabled diff --git a/docs/fastdds/property_policies/non_consolidated_qos.rst b/docs/fastdds/property_policies/non_consolidated_qos.rst index 1d4a86ae1..ad9fba371 100644 --- a/docs/fastdds/property_policies/non_consolidated_qos.rst +++ b/docs/fastdds/property_policies/non_consolidated_qos.rst @@ -509,4 +509,4 @@ The different property values have the following effects on the local |DomainPar :language: xml :start-after: TYPE_PROPAGATION_PROPERTY<--> :end-before: <--> - :lines: 2-4,6-16,18-19 + :lines: 2-4,6-17,19-20 diff --git a/docs/fastdds/troubleshooting/troubleshooting.rst b/docs/fastdds/troubleshooting/troubleshooting.rst index 914012741..3eea0f53e 100644 --- a/docs/fastdds/troubleshooting/troubleshooting.rst +++ b/docs/fastdds/troubleshooting/troubleshooting.rst @@ -44,3 +44,8 @@ issues. * If having problems with transmitting **large samples such as video or point clouds**, please refer to :ref:`use-case-largeData`. + +* Fast DDS v3 introduced the new feature :ref:`XTypes`, which allows to discover remote types. + In consequence, discovery traffic can be increased during start up. + If you are experiencing high load during discovery, try disabling the new feature. + Please refer to :ref:`disable type propagation` to learn how to do it. diff --git a/docs/notes/migration_guide.rst b/docs/notes/migration_guide.rst new file mode 100644 index 000000000..488625893 --- /dev/null +++ b/docs/notes/migration_guide.rst @@ -0,0 +1,404 @@ +.. include:: ../03-exports/aliases.include +.. include:: ../03-exports/aliases-api.include +.. include:: ../03-exports/roles.include + +.. _migration_guide: + +Migration Guide to Fast DDS v3 +============================== + +This document aims to help during the migration process from eProsima *Fast DDS version* 2 to *Fast DDS version* 3. +For more information about all the updates, please refer to the :ref:`release notes `. + +.. warning:: + Fast DDS v3 introduces a new feature :ref:`XTypes` that allows to discover remote types. + In consequence, discovery traffic can be increased during start up. + If you are experiencing high load during discovery, try disabling the new feature. + Please refer to :ref:`disable type propagation` to learn how to do it. + +Migration Steps +--------------- + +The following steps describe the possible changes that your project may require to migrate to *Fast DDS v3.0.0*: + +- :ref:`step-1-update-the-package-name-and-cmake-configuration` +- :ref:`step-2-update-dependencies` +- :ref:`step-3-ensure-compatibility-with-related-products` +- :ref:`step-4-apply-namespace-changes` +- :ref:`step-5-migrate-public-headers` +- :ref:`step-6-handle-removed-or-private-headers` +- :ref:`step-7-update-api-methods` +- :ref:`step-8-update-structs-enums-and-variables` +- :ref:`step-9-refactor-examples` + +.. _step-1-update-the-package-name-and-cmake-configuration: + +Step 1: Update the package name and CMake configuration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. CMake project name: Rename all instances in the CMake project from ``fastrtps`` to ``fastdds``. For example, + update ``target_link_libraries(fastrtps)`` to ``target_link_libraries(fastdds)``, and ``if(NOT fastrtps_FOUND)`` to + ``if(NOT fastdds_FOUND)``. +2. Environment variables: + + * Rename ``FASTRTPS_DEFAULT_PROFILES_FILE`` to ``FASTDDS_DEFAULT_PROFILES_FILE``. + * The configuration file for loading profiles has been renamed from ``DEFAULT_FASTRTPS_PROFILES.xml`` to + ``DEFAULT_FASTDDS_PROFILES.xml``. + +.. _step-2-update-dependencies: + +Step 2: Update dependencies +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Fast DDS v3 is only compatible with Fast CDR v2. +If you are not using Fast CDR as :ref:`third-party `, please ensure that your local +dependencies are up-to-date. +Refer to the :ref:`library deprendencies table ` to verify +version compatibility for all Fast DDS library dependencies. + +.. _step-3-ensure-compatibility-with-related-products: + +Step 3: Ensure compatibility with related products +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Fast DDS v3 requires Fast DDS Gen v4 for code generation. Make sure to regenerate types using this compatible version. + +For other compatibility requirements with related products (e.g., Shapes Demo, Discovery Server), refer to the table +of :ref:`products compatibility `, which outlines version +compatibility across the Fast DDS ecosystem. +Verify these versions and update accordingly to avoid any integration issues. + +.. _step-4-apply-namespace-changes: + +Step 4: Apply namespace changes +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Namespace migration: + + * First, update all ``eprosima::fastrtps::`` namespace references to ``eprosima::fastdds::``. + * Move built-in topics ``SubscriptionBuiltinTopicData``, ``PublicationBuiltinTopicData``, and + ``ParticipantBuiltinTopicData`` from ``eprosima::fastdds::dds::builtin::`` to ``eprosima::fastdds::rtps::``. + * Move ``Duration_t`` and ``c_TimeInfinite`` references from ``eprosima::fastdds::`` to ``eprosima::fastdds::dds``. + * Move ``Time_t.hpp`` references from ``eprosima::fastdds::`` to ``eprosima::fastdds::dds``. + + Ensure you update these namespace references across your code to avoid compilation errors. + +2. Renamed types: + + * Change ``EventKindBits::`` references to ``EventKind::``. + * Change ``EventKindEntityId::`` references to ``EntityId::``. + * Change ``StatisticsEventKind::`` references to ``statistics::EventKind::``. + + Refactor the type references as outlined above to maintain compatibility with the new version. + +.. _step-5-migrate-public-headers: + +Step 5: Migrate public headers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Header files location: + + All the headers in ``include/fastrtps`` were migrated to ``include/fastdds``. + In particular, the following list includes headers that have been relocated to different paths or whose + implementations have been incorporated into other headers: + + .. list-table:: + :header-rows: 1 + + * - Fast DDS v2 file *include* path + - Fast DDS v3 file *include* path + * - ``fastdds/rtps/resources/ResourceManagement.hpp`` + - ``fastdds/rtps/attributes/ResourceManagement.hpp`` + * - ``fastrtps/eProsima_auto_link.h`` + - ``fastdds/fastdds_auto_link.hpp`` + * - ``fastrtps/attributes/ParticipantAttributes.h`` + - ``fastdds/dds/domain/qos/DomainParticipantExtendedQos.hpp`` + * - ``fastrtps/Domain.h`` + - ``fastdds/dds/domain/DomainParticipantFactory.hpp`` + * - ``fastrtps/log/Log.h`` + - ``fastdds/dds/log/Log.hpp`` + * - ``fastrtps/qos/DeadlineMissedStatus.h`` + - ``fastdds/dds/core/status/DeadlineMissedStatus.hpp`` + * - ``fastrtps/qos/IncompatibleQosStatus.hpp`` + - ``fastdds/dds/core/status/IncompatibleQosStatus.hpp`` + * - ``fastrtps/qos/LivelinessChangedStatus.h`` + - ``fastdds/dds/core/status/LivelinessChangedStatus.hpp`` + * - ``fastrtps/qos/QosPolicies.h`` + - ``fastdds/dds/core/policy/QosPolicies.hpp`` + * - ``fastrtps/qos/ReaderQos.h`` + - ``fastdds/dds/subscriber/qos/ReaderQos.hpp`` + * - ``fastrtps/qos/WriterQos.h`` + - ``fastdds/dds/publisher/qos/WriterQos.hpp`` + * - ``fastrtps/qos/SampleRejectedStatus.hpp`` + - ``fastdds/dds/core/status/SampleRejectedStatus.hpp`` + * - ``fastrtps/participant/Participant.h`` + - ``fastdds/rtps/participant/RTPSParticipant.hpp`` + * - ``fastrtps/transport/TCPv4TransportDescriptor.h`` + - ``fastdds/rtps/transport/TCPv4TransportDescriptor.hpp`` + * - ``fastrtps/transport/TCPv6TransportDescriptor.h`` + - ``fastdds/rtps/transport/TCPv6TransportDescriptor.hpp`` + * - ``fastrtps/transport/UDPv4TransportDescriptor.h`` + - ``fastdds/rtps/transport/UDPv4TransportDescriptor.hpp`` + * - ``fastrtps/transport/UDPv6TransportDescriptor.h`` + - ``fastdds/rtps/transport/UDPv6TransportDescriptor.hpp`` + * - ``fastrtps/transport/UDPTransportDescritpor.h`` + - ``fastdds/rtps/transport/UDPTransportDescritpor.hpp`` + * - ``fastrtps/transport/TCPTransportDescritpor.h`` + - ``fastdds/rtps/transport/TCPTransportDescritpor.hpp`` + * - ``fastdds/rtps/common/Time_t.hpp in namespace{fastdds}`` + - ``fastdds/dds/core/Time_t.hpp in namespace{fastdds::dds}`` + + Also, the ``fixed_size_string.hpp`` implementation has been migrated from ``fastrtps/utils/fixed_size_string.hpp`` + to ``fastcdr/cdr/fixed_size_string.hpp``. + +2. File extensions: + + Rename file extensions from `.h` to `.hpp`. + +.. _step-6-handle-removed-or-private-headers: + +Step 6: Handle removed or private headers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following list contains headers that were previously in the `include` folder and have been relocated to +the `src/cpp` folder. +Since they are no longer public, it is not possible to include them in external projects: + +* ParticipantAttributes.hpp +* ReplierAttributes.hpp +* RequesterAttributes.hpp +* PublisherAttributes.hpp +* SubscriberAttributes.hpp +* ProxyPool.hpp +* Semaphore.hpp +* MessageReceiver.hpp +* BuiltinProtocols.hpp +* shared_mutex.hpp +* StringMatching.hpp +* TimeConversion.hpp +* DBQueue.hpp +* ResourceEvent.hpp +* TimedEvent.hpp +* WriterProxyData.hpp +* ReaderProxyData.hpp +* ParticipantProxyData.hpp +* XML Parser API +* UnitsParser.hpp +* RTPSMessageGroup.hpp +* RTPSMessageCreator.hpp +* CDRMessage.hpp +* StatefulPersistentReader.hpp +* StatefulReader.hpp +* StatelessPersistentReader.hpp +* StatelessReader.hpp +* PersistentWriter.hpp +* StatefulPersistentWriter.hpp +* StatefulWriter.hpp +* StatelessPersistentWriter.hpp +* StatelessWriter.hpp +* logging.h +* Exception.h +* Cryptography.h +* Authentication.h +* AccessControl.h +* SecurityException.h +* ChangeForReader.hpp +* ReaderLocator.hpp +* ReaderProxy.hpp +* ServerAttributes.hpp +* TopicAttributes.hpp +* TypeLookupService.hpp + +If your project previously included any of these headers, you will need to modify your implementation. + +.. _step-7-update-api-methods: + +Step 7: Update API methods +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The table below contains the list of API changes, showing the previous methods and the corresponding new ones +introduced in Fast DDS v3. +The new API methods achieve the same functionality, even though the signature of the method is different +from the deprecated one. + +.. list-table:: + :header-rows: 1 + + * - Deprecated methods + - New methods + * - ``xmlparser::XMLProfileManager::library_settings(LibrarySettingsAttributes&)`` + - ``DomainParticipantFactory::get_instance()->set_library_settings(const LibrarySettings&)`` + * - ``fill_discovery_data_from_cdr_message(ReaderProxyData&, MonitorServiceStatusData&)`` + - ``fill_discovery_data_from_cdr_message(SubscriptionBuiltinTopicData&, MonitorServiceStatusData&)`` + * - ``fill_discovery_data_from_cdr_message(WriterProxyData&, MonitorServiceStatusData&)`` + - ``fill_discovery_data_from_cdr_message(PublicationBuiltinTopicData&, MonitorServiceStatusData&)`` + * - ``fill_discovery_data_from_cdr_message(ParticipantProxyData&, MonitorServiceStatusData&)`` + - ``fill_discovery_data_from_cdr_message(ParticipantBuiltinTopicData&, MonitorServiceStatusData&)`` + * - ``on_participant_discovery(DomainParticipant*, ParticipantDiscoveryInfo&&, bool)`` + - ``on_participant_discovery(DomainParticipant*, ParticipantDiscoveryStatus, ParticipantBuiltinTopicData&, bool&)`` + * - ``on_subscriber_discovery(DomainParticipant*, ReaderDiscoveryInfo&&, bool)`` + - ``on_data_reader_discovery(DomainParticipant*, ReaderDiscoveryStatus, SubscriptionBuiltinTopicData&, bool&)`` + * - ``on_publisher_discovery(DomainParticipant*, WriterDiscoveryInfo&&, bool)`` + - ``on_data_writer_discovery(DomainParticipant*, WriterDiscoveryStatus, PublicationBuiltinTopicData&, bool&)`` + * - ``onReaderDiscovery(RTPSParticipant*, ReaderDiscoveryInfo&&, bool)`` + - ``on_reader_discovery(RTPSParticipant*, ReaderDiscoveryStatus, SubscriptionBuiltinTopicData&, bool&)`` + * - ``onWriterDiscovery(RTPSParticipant*, WriterDiscoveryInfo&&, bool)`` + - ``on_writer_discovery(RTPSParticipant*, WriterDiscoveryStatus, PublicationBuiltinTopicData&, bool&)`` + * - ``onParticipantDiscovery(RTPSParticipant*, ParticipantDiscoveryInfo&&, bool)`` + - ``on_participant_discovery(RTPSParticipant*, ParticipantDiscoveryStatus, ParticipantBuiltinTopicData&, bool&)`` + * - ``XMLProfileManager::loadXMLFile(string&)`` + - ``DomainParticipantFactory::get_instance()->load_XML_profiles_file(string)`` + * - ``XMLProfileManager::loadDefaultXMLFile()`` + - ``load_profiles()`` + * - ``XMLProfileManager::loadXMLFile(string)`` + - ``load_XML_profiles_file(string&)`` + * - ``XMLProfileManager::loadXMLString(const char*, size_t)`` + - ``load_XML_profiles_string(const char*, size_t)`` + * - ``XMLProfileManager::fillParticipantAttributes(const string&, ParticipantAttributes&, bool)`` + - ``get_participant_qos_from_profile(string&, DomainParticipantQos&)`` + * - ``DynamicTypeBuilder XMLProfileManager::getDynamicTypeByName(string&)`` + - ``get_dynamic_type_builder_from_xml_by_name(string&, DynamicTypeBuilder::_ref_type&)`` + * - ``XMLProfileManager::fillRequesterAttributes(string&, RequesterAttributes&)`` + - ``get_requester_qos_from_profile(string&, RequesterQos&)`` + * - ``XMLParser::getXMLThroughputController(tinyxml2::XMLElement*, ThroughputControllerDescriptor&, uint8_t)`` + - ``XMLParser::getXMLFlowControllerDescriptorList(tinyxml2::XMLElement*, FlowControllerDescriptorList&, uint8_t)`` + * - ``add_throughput_controller_descriptor_to_pparams(FlowControllerSchedulerPolicy, uint32_t, uint32_t)`` + - ``add_flow_controller_descriptor_to_pparams(FlowControllerSchedulerPolicy, uint32_t, uint32_t)`` + * - ``get_payload(uint32_t, CacheChange_t&)`` + - ``get_payload(uint32_t, SerializedPayload_t&)`` + * - ``release_payload(CacheChange_t&)`` + - ``release_payload(SerializedPayload_t&)`` + * - ``registerWriter(RTPSWriter*, const TopicAttributes&, const WriterQos&)`` + - ``register_writer(RTPSWriter*, const PublicationBuiltinTopicData&)`` + * - ``registerReader(RTPSReader*, TopicAttributes&, ReaderQos&)`` + - ``register_reader(RTPSReader*, const SubscriptionBuiltinTopicData&, const ContentFilterProperty*)`` + * - ``updateWriter(RTPSWriter*, const TopicAttributes&, const WriterQos&)`` + - ``update_writer(RTPSWriter*, const WriterQos&)`` + * - ``updateReader(RTPSReader*, const TopicAttributes&, const ReaderQos&, const ContentFilterProperty*)`` + - ``update_reader(RTPSReader*, const ReaderQos, const ContentFilterProperty*)`` + * - ``getRTPSParticipantAttributes()`` + - ``get_attributes()`` + * - ``bool write(void*)`` + - ``ReturnCode_t write(void*)`` + * - ``bool write(void*, WriteParams&)`` + - ``ReturnCode_t write(void*, WriteParams&)`` + * - ``SenderResource::send(const octet*, uint32_t, LocatorsIterator*, LocatorsIterator*, const chrono::steady_clock::time_point&)`` + - ``SenderResource::send(vector, uint32_t, LocatorsIterator*, LocatorsIterator*, const chrono::steady_clock::time_point&)`` + * - ``RTPSMessageSenderInterface::send(CDRMessage_t*, chrono::steady_clock::time_point)`` + - ``RTPSMessageSenderInterface::send(vector&, uint32_t&, chrono::steady_clock::time_point)`` + * - ``createRTPSWriter(RTPSParticipant*, EntityId_t&, WriterAttributes&, shared_ptr&, shared_ptr&, WriterHistory*, WriterListener*)`` + - ``createRTPSWriter(RTPSParticipant*, WriterAttributes&, WriterHistory*, WriterListener*)`` + * - ``RTPSWriter::new_change(const function& dataCdrSerializedSize, ChangeKind_t, InstanceHandle_t)`` + - ``WriterHistory::create_change(uint32_t, ChangeKind_t, InstanceHandle_t)`` + * - ``RTPSWriter::new_change(ChangeKind_t, InstanceHandle_t)`` + - ``WriterHistory::create_change(ChangeKind_t, InstanceHandle_t)`` + * - ``RTPSWriter::release_change(CacheChange_t*)`` + - ``WriterHistory::release_change(CacheChange_t*)`` + * - ``RTPSWriter::remove_older_changes(unsigned int)`` + - ``WriterHistory::remove_min_change()`` + * - ``RTPSWriter::is_acked_by_all(const CacheChange_t*)`` + - ``RTPSWriter::is_acked_by_all(const SequenceNumber_t&)`` + * - ``RTPSWriter::updateAttributes(const WriterAttributes&)`` + - ``RTPSWriter::update_attributes(const WriterAttributes&)`` + * - ``RTPSWriter::getListener()`` + - ``RTPSWriter::get_listener()`` + * - ``RTPSWriter::isAsync()`` + - ``RTPSWriter::is_async()`` + * - ``WriterListener::onWriterMatched(RTPSWriter*, MatchingInfo&)`` + - ``WriterListener::on_writer_matched(RTPSWriter*, const MatchingInfo&)`` + * - ``WriterListener::onWriterChangeReceivedByAll(RTPSWriter*, CacheChange_t*)`` + - ``WriterListener::on_writer_change_received_by_all(RTPSWriter*, CacheChange_t*)`` + * - ``TypeLookupReplyListener::onWriterChangeReceivedByAll(RTPSWriter*, CacheChange_t*)`` + - ``TypeLookupReplyListener::on_writer_change_received_by_all(RTPSWriter*, CacheChange_t*)`` + * - ``RTPSReader::getListener()`` + - ``RTPSReader::get_listener()`` + * - ``RTPSReader::setListener()`` + - ``RTPSReader::set_listener()`` + * - ``RTPSReader::expectsInlineQos()`` + - ``RTPSReader::expects_inline_qos()`` + * - ``RTPSReader::isInCleanState()`` + - ``RTPSReader::is_in_clean_state()`` + * - ``RTPSReader::getHistory()`` + - ``RTPSReader::get_history()`` + * - ``RTPSReader::nextUnreadCache(CacheChange_t**, WriterProxy**)`` + - ``RTPSReader::next_unread_cache()`` + * - ``RTPSReader::nextUntakenCache(CacheChange_t**, WriterProxy**)`` + - ``RTPSReader::next_untaken_cache()`` + * - ``ReaderListener::onReaderMatched(RTPSReader*, MatchingInfo&)`` + - ``ReaderListener::on_reader_matched(RTPSReader*, MatchingInfo&)`` + * - ``ReaderListener::onNewCacheChangeAdded(RTPSReader*, const CacheChange_t* const)`` + - ``ReaderListener::on_new_cache_change_added(RTPSReader*, const CacheChange_t* const)`` + * - ``TopicDataType::getSerializedSizeProvider(const void* const, DataRepresentationId_t)`` + - ``TopicDataType::calculate_serialized_size(const void* const, DataRepresentationId_t)`` + * - ``TopicDataType::createData()`` + - ``TopicDataType::create_data()`` + * - ``TopicDataType::deleteData(void*)`` + - ``TopicDataType::delete_data(void*)`` + * - ``TopicDataType::getKey(const void* const, InstanceHand*, bool)`` + - ``TopicDataType::compute_key(const void* const, InstanceHand&, bool)`` + * - ``TopicDataType::setName(const char*)`` + - ``TopicDataType::set_name(const string&)`` + * - ``char* TopicDataType::getName()`` + - ``string& TopicDataType::get_name()`` + * - ``TypeSupport::calculate_serialized_size_provider(const void* const, DataRepresentationId_t)`` + - ``TypeSupport::calculate_serialized_size(const void* const, DataRepresentationId_t)`` + * - ``get_key(void, InstanceHandle_t*, bool)`` + - ``compute_key(SerializedPayload_t&, InstanceHandle_t&, bool)`` + * - ``DynamicPubSubType::createData()`` + - ``DynamicPubSubType::create_data()`` + * - ``DynamicPubSubType::deleteData(void*)`` + - ``DynamicPubSubType::delete_data(void*)`` + * - ``DynamicPubSubType::getKey(const void* const, InstanceHand*, bool)`` + - ``DynamicPubSubType::compute_key(const void* const, InstanceHand&, bool)`` + * - ``DynamicPubSubType::getSerializedSizeProvider(const void* const, DataRepresentationId_t)`` + - ``DynamicPubSubType::calculate_serialized_size(const void* const, DataRepresentationId_t)`` + +Review your code for any APIs marked with the ``FASTDDS_DEPRECATED`` and ``FASTDDS_TODO_BEFORE`` macros. +Note that these deprecated APIs have been removed in Fast DDS v3. +Make the necessary updates to your implementation to ensure compatibility with the new version. + +.. _step-8-update-structs-enums-and-variables: + +Step 8: Update structs, enums, and variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As part of the Fast DDS migration, several structs, enums, and variables have been updated. You will need to modify +your code to reflect these changes: + +1. Enum and Variable Changes: + + * Rename ``DiscoveryProtocol_t`` to ``DiscoveryProtocol``. + * Rename ``initialHeartbeatDelay`` to ``initial_heartbeat_delay``. + * Rename ``heartbeatPeriod`` to ``heartbeat_period``. + * Rename ``nackResponseDelay`` to ``nack_response_delay``. + * Rename ``nackSupressionDuration`` to ``nack_supression_duration``. + * Rename ``heartbeatResponseDelay`` to ``heartbeat_response_delay``. + * Rename ``initialAcknackDelay`` to ``initial_acknack_delay``. + * Rename ``expectsInlineQos`` to ``expects_inline_qos``. + * Rename ``m_typeSize`` to ``max_serialized_type_size``. + * Rename ``m_isGetKeyDefined`` to ``is_compute_key_provided``. + * Rename ``m_topicDataTypeName`` to ``topic_data_typename``. + +2. Extend Built-in Topics: + + * ``SubscriptionBuiltinTopicData`` has been extended with additional fields to mimic those of ``ReaderProxyData``. + * ``PublicationBuiltinTopicData`` has been extended with additional fields to mimic those of ``WriterProxyData``. + * ``ParticipantBuiltinTopicData`` has been extended to include the product version and fields from + ``ParticipantProxyData``. + +3. Other Struct Changes: + + * ``SendBuffersAllocationAttributes`` has a new attribute to define the allocation configuration of the + ``NetworkBuffers``. + * ``TypeConsistencyQos`` has been removed from ``DataReader``, and the ``TypeConsistencyEnforcementQosPolicy`` and + ``DataRepresentationQosPolicy`` have been added. + +.. _step-9-refactor-examples: + +Step 9: Examples refactor +^^^^^^^^^^^^^^^^^^^^^^^^^ + +All examples in the Fast DDS project have been refactored to follow a consistent structure, having renamed files, +restructured classes, and updated the overall format. If you have integrated any example into your +own implementation, carefully review the updated examples to ensure compatibility with your project. As reference, +consider the example `Configuration `_.