From a5d913f41ebdba119bed5e5497379c8b76b9715c Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 08:03:25 +0100 Subject: [PATCH] Improve PDPClients initialization (#5459) (#5507) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve PDPClients initialization (#5459) * Refs #21433: Add Test Signed-off-by: cferreiragonz * Refs #21433: Avoid using multicast metatraffic for CLIENTS & SUPER_CLIENTS Signed-off-by: cferreiragonz * Refs #21433: Typo Signed-off-by: cferreiragonz --------- Signed-off-by: cferreiragonz * Fix backport namespaces Signed-off-by: Miguel Company * Fix build Signed-off-by: cferreiragonz --------- Signed-off-by: cferreiragonz Signed-off-by: Miguel Company Co-authored-by: Carlos Ferreira González Co-authored-by: Miguel Company --- .../discovery/participant/PDPClient.cpp | 2 +- .../rtps/participant/RTPSParticipantImpl.cpp | 10 ++++++--- .../dds/participant/ParticipantTests.cpp | 22 +++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/cpp/rtps/builtin/discovery/participant/PDPClient.cpp b/src/cpp/rtps/builtin/discovery/participant/PDPClient.cpp index 6fd78c337de..9b4ff02fd3d 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDPClient.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDPClient.cpp @@ -204,7 +204,7 @@ ParticipantProxyData* PDPClient::createParticipantProxyData( ParticipantProxyData* pdata = add_participant_proxy_data(participant_data.m_guid, is_server, &participant_data); if (pdata != nullptr) { - // Clients only assert its server lifeliness, other clients liveliness is provided + // Clients only assert its server liveliness, other clients liveliness is provided // through server's PDP discovery data if (is_server) { diff --git a/src/cpp/rtps/participant/RTPSParticipantImpl.cpp b/src/cpp/rtps/participant/RTPSParticipantImpl.cpp index 07b934ba36e..f966d55cb69 100644 --- a/src/cpp/rtps/participant/RTPSParticipantImpl.cpp +++ b/src/cpp/rtps/participant/RTPSParticipantImpl.cpp @@ -3036,9 +3036,13 @@ void RTPSParticipantImpl::get_default_metatraffic_locators( { uint32_t metatraffic_multicast_port = att.port.getMulticastPort(domain_id_); - m_network_Factory.getDefaultMetatrafficMulticastLocators(att.builtin.metatrafficMulticastLocatorList, - metatraffic_multicast_port); - m_network_Factory.NormalizeLocators(att.builtin.metatrafficMulticastLocatorList); + if (m_att.builtin.discovery_config.discoveryProtocol != DiscoveryProtocol::CLIENT && + m_att.builtin.discovery_config.discoveryProtocol != DiscoveryProtocol::SUPER_CLIENT) + { + m_network_Factory.getDefaultMetatrafficMulticastLocators(att.builtin.metatrafficMulticastLocatorList, + metatraffic_multicast_port); + m_network_Factory.NormalizeLocators(att.builtin.metatrafficMulticastLocatorList); + } m_network_Factory.getDefaultMetatrafficUnicastLocators(att.builtin.metatrafficUnicastLocatorList, metatraffic_unicast_port_); diff --git a/test/unittest/dds/participant/ParticipantTests.cpp b/test/unittest/dds/participant/ParticipantTests.cpp index 7cf9d76db90..d08dfb46200 100644 --- a/test/unittest/dds/participant/ParticipantTests.cpp +++ b/test/unittest/dds/participant/ParticipantTests.cpp @@ -918,6 +918,28 @@ TEST(ParticipantTests, SimpleParticipantRemoteServerListConfiguration) EXPECT_EQ(ReturnCode_t::RETCODE_OK, DomainParticipantFactory::get_instance()->delete_participant(participant)); } +/** + * Test that checks a CLIENT participant is not initialized with builtin metatrafficMulticastLocators. + */ +TEST(ParticipantTests, NoBuiltinMetatrafficMulticastForClients) +{ + DomainParticipantQos qos; + qos.wire_protocol().builtin.discovery_config.discoveryProtocol = fastrtps::rtps::DiscoveryProtocol::CLIENT; + DomainParticipant* participant = DomainParticipantFactory::get_instance()->create_participant( + (uint32_t)GET_PID() % 230, qos); + ASSERT_NE(nullptr, participant); + + fastrtps::rtps::RTPSParticipantAttributes attributes; + get_rtps_attributes(participant, attributes); + EXPECT_EQ(attributes.builtin.discovery_config.discoveryProtocol, fastrtps::rtps::DiscoveryProtocol::CLIENT); + EXPECT_EQ(attributes.builtin.metatrafficMulticastLocatorList.size(), 0); + + DomainParticipantQos result_qos = participant->get_qos(); + EXPECT_EQ(ReturnCode_t::RETCODE_OK, participant->set_qos(result_qos)); + + EXPECT_EQ(ReturnCode_t::RETCODE_OK, DomainParticipantFactory::get_instance()->delete_participant(participant)); +} + /** * Test that a SIMPLE participant is transformed into a CLIENT if the variable ROS_SUPER_CLIENT is false and into a SUPERCLIENT if it's true.