diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp index 235fefc2d89..f5b4cd1d77c 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp @@ -413,6 +413,9 @@ bool PDP::enable() return true; } + // Perform pre-enable actions (if any) + pre_enable_actions(); + // Create lease events on already created proxy data objects for (ParticipantProxyData* pool_item : participant_proxies_pool_) { @@ -443,6 +446,11 @@ bool PDP::enable() return builtin_endpoints_->enable_pdp_readers(mp_RTPSParticipant); } +void PDP::pre_enable_actions() +{ + // Empty implementation +} + void PDP::disable() { // Extract all the participant proxies excluding first one (ourselves) diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.h b/src/cpp/rtps/builtin/discovery/participant/PDP.h index fc90bd73199..5c809f2aba1 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDP.h +++ b/src/cpp/rtps/builtin/discovery/participant/PDP.h @@ -131,6 +131,11 @@ class PDP : public fastdds::statistics::rtps::IProxyQueryable */ bool enable(); + /** + * @brief Perform actions before enabling the Participant Discovery Protocol if needed + */ + virtual void pre_enable_actions(); + /** * @brief Disable the Participant Discovery Protocol */ diff --git a/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp b/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp index 0eaed35dc02..f642fe01d45 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp @@ -120,35 +120,6 @@ bool PDPServer::init( return false; } - std::vector backup_queue; - if (durability_ == TRANSIENT) - { - nlohmann::json backup_json; - // If the DS is BACKUP, try to restore DDB from file - discovery_db().backup_in_progress(true); - if (read_backup(backup_json, backup_queue)) - { - if (process_backup_discovery_database_restore(backup_json)) - { - EPROSIMA_LOG_INFO(RTPS_PDP_SERVER, "DiscoveryDataBase restored correctly"); - } - } - else - { - EPROSIMA_LOG_INFO(RTPS_PDP_SERVER, - "Error reading backup file. Corrupted or unmissing file, restarting from scratch"); - } - - discovery_db().backup_in_progress(false); - - discovery_db_.persistence_enable(get_ddb_queue_persistence_file_name()); - } - else - { - // Allows the ddb to process new messages from this point - discovery_db_.enable(); - } - // Activate listeners EDPServer* edp = static_cast(mp_EDP); builtin_endpoints_->enable_pdp_readers(getRTPSParticipant()); @@ -178,14 +149,47 @@ bool PDPServer::init( m_discovery.discovery_config.discoveryServer_client_syncperiod)); ping_->restart_timer(); + return true; +} + +void PDPServer::pre_enable_actions() +{ + std::vector backup_queue; + // Restore the DDB from file if this is a BACKUP server + if (durability_ == TRANSIENT) + { + nlohmann::json backup_json; + // If the DS is BACKUP, try to restore DDB from file + discovery_db().backup_in_progress(true); + if (read_backup(backup_json, backup_queue)) + { + if (process_backup_discovery_database_restore(backup_json)) + { + EPROSIMA_LOG_INFO(RTPS_PDP_SERVER, "DiscoveryDataBase restored correctly"); + } + } + else + { + EPROSIMA_LOG_INFO(RTPS_PDP_SERVER, + "Error reading backup file. Corrupted or unmissing file, restarting from scratch"); + } + + discovery_db().backup_in_progress(false); + + discovery_db_.persistence_enable(get_ddb_queue_persistence_file_name()); + } + else + { + // Allows the ddb to process new messages from this point + discovery_db_.enable(); + } + // Restoring the queue must be done after starting the routine if (durability_ == TRANSIENT) { // This vector is empty till backup queue is implemented process_backup_restore_queue(backup_queue); } - - return true; } ParticipantProxyData* PDPServer::createParticipantProxyData( diff --git a/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp b/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp index b5b01f6f658..a2904ff6497 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp @@ -79,6 +79,12 @@ class PDPServer : public fastrtps::rtps::PDP bool init( fastrtps::rtps::RTPSParticipantImpl* part) override; + /** + * @brief Checks if a backup file needs to be restored for + * DiscoveryProtocol_t::BACKUP before enabling the Participant Discovery Protocol + */ + void pre_enable_actions() override; + /** * Creates an initializes a new participant proxy from a DATA(p) raw info * @param p ParticipantProxyData from DATA msg deserialization