Skip to content

Commit

Permalink
Automatically unmatch remote participants on participant deletion (#4849
Browse files Browse the repository at this point in the history
)

* Refs #21055. Add regresion test.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Remove `this->` on PDP.cpp

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Change nullptr comparisons on PDP.cpp

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Change nullptr comparisons on BuiltinProtocols.cpp

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Split `PDP::remove_remote_participant` in two methods.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Call new `PDP::disable` method when deleting `BuiltinProtocols`.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. `PDP::disable` method automatically unmatches remote participants.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #21055. Use `std::lock_guard` where possible.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #20995. Apply suggestion.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

* Refs #20995. Fix test build.

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>

---------

Signed-off-by: Miguel Company <miguelcompany@eprosima.com>
  • Loading branch information
MiguelCompany authored May 28, 2024
1 parent 67414ce commit 689dd3f
Show file tree
Hide file tree
Showing 4 changed files with 209 additions and 111 deletions.
21 changes: 21 additions & 0 deletions include/fastdds/rtps/builtin/discovery/participant/PDP.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ class PDP : public fastdds::statistics::rtps::IProxyQueryable
*/
bool enable();

/**
* @brief Disable the Participant Discovery Protocol
*/
void disable();

virtual bool init(
RTPSParticipantImpl* part) = 0;

Expand Down Expand Up @@ -639,6 +644,22 @@ class PDP : public fastdds::statistics::rtps::IProxyQueryable
*/
void set_external_participant_properties_(
ParticipantProxyData* participant_data);

/**
* Performs all the necessary actions after removing a ParticipantProxyData from the
* participant_proxies_ collection.
*
* @param pdata ParticipantProxyData that was removed.
* @param partGUID GUID of the removed participant.
* @param reason Reason why the participant was removed.
* @param listener Listener to be notified of the unmatches / removal.
*/
void actions_on_remote_participant_removed(
ParticipantProxyData* pdata,
const GUID_t& partGUID,
ParticipantDiscoveryInfo::DISCOVERY_STATUS reason,
RTPSParticipantListener* listener);

};


Expand Down
25 changes: 14 additions & 11 deletions src/cpp/rtps/builtin/BuiltinProtocols.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,12 @@ BuiltinProtocols::BuiltinProtocols()
BuiltinProtocols::~BuiltinProtocols()
{
// Send participant is disposed
if (mp_PDP != nullptr)
if (nullptr != mp_PDP)
{
// Send participant is disposed
mp_PDP->announceParticipantState(true, true);
// Consider all discovered participants as disposed
mp_PDP->disable();
}

// TODO Auto-generated destructor stub
Expand Down Expand Up @@ -199,7 +202,7 @@ bool BuiltinProtocols::addLocalWriter(
{
bool ok = true;

if (mp_PDP != nullptr)
if (nullptr != mp_PDP)
{
ok = mp_PDP->getEDP()->newLocalWriterProxyData(w, topicAtt, wqos);

Expand All @@ -214,7 +217,7 @@ bool BuiltinProtocols::addLocalWriter(
EPROSIMA_LOG_WARNING(RTPS_EDP, "EDP is not used in this Participant, register a Writer is impossible");
}

if (mp_WLP != nullptr)
if (nullptr != mp_WLP)
{
ok &= mp_WLP->add_local_writer(w, wqos);
}
Expand All @@ -234,7 +237,7 @@ bool BuiltinProtocols::addLocalReader(
{
bool ok = true;

if (mp_PDP != nullptr)
if (nullptr != mp_PDP)
{
ok = mp_PDP->getEDP()->newLocalReaderProxyData(R, topicAtt, rqos, content_filter);

Expand All @@ -249,7 +252,7 @@ bool BuiltinProtocols::addLocalReader(
EPROSIMA_LOG_WARNING(RTPS_EDP, "EDP is not used in this Participant, register a Reader is impossible");
}

if (mp_WLP != nullptr)
if (nullptr != mp_WLP)
{
ok &= mp_WLP->add_local_reader(R, rqos);
}
Expand All @@ -263,7 +266,7 @@ bool BuiltinProtocols::updateLocalWriter(
const WriterQos& wqos)
{
bool ok = false;
if (mp_PDP != nullptr && mp_PDP->getEDP() != nullptr)
if ((nullptr != mp_PDP) && (nullptr != mp_PDP->getEDP()))
{
ok = mp_PDP->getEDP()->updatedLocalWriter(W, topicAtt, wqos);
}
Expand All @@ -277,7 +280,7 @@ bool BuiltinProtocols::updateLocalReader(
const fastdds::rtps::ContentFilterProperty* content_filter)
{
bool ok = false;
if (mp_PDP != nullptr && mp_PDP->getEDP() != nullptr)
if ((nullptr != mp_PDP) && (nullptr != mp_PDP->getEDP()))
{
ok = mp_PDP->getEDP()->updatedLocalReader(R, topicAtt, rqos, content_filter);
}
Expand All @@ -288,11 +291,11 @@ bool BuiltinProtocols::removeLocalWriter(
RTPSWriter* W)
{
bool ok = false;
if (mp_WLP != nullptr)
if (nullptr != mp_WLP)
{
ok |= mp_WLP->remove_local_writer(W);
}
if (mp_PDP != nullptr && mp_PDP->getEDP() != nullptr)
if ((nullptr != mp_PDP) && (nullptr != mp_PDP->getEDP()))
{
ok |= mp_PDP->getEDP()->removeLocalWriter(W);
}
Expand All @@ -303,11 +306,11 @@ bool BuiltinProtocols::removeLocalReader(
RTPSReader* R)
{
bool ok = false;
if (mp_WLP != nullptr)
if (nullptr != mp_WLP)
{
ok |= mp_WLP->remove_local_reader(R);
}
if (mp_PDP != nullptr && mp_PDP->getEDP() != nullptr)
if ((nullptr != mp_PDP) && (nullptr != mp_PDP->getEDP()))
{
ok |= mp_PDP->getEDP()->removeLocalReader(R);
}
Expand Down
Loading

0 comments on commit 689dd3f

Please sign in to comment.