diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.h b/src/cpp/rtps/builtin/discovery/participant/PDP.h index fc90bd73199..f628a76e83d 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDP.h +++ b/src/cpp/rtps/builtin/discovery/participant/PDP.h @@ -129,7 +129,7 @@ class PDP : public fastdds::statistics::rtps::IProxyQueryable * * @return true if enabled correctly, or if already enabled; false otherwise */ - bool enable(); + virtual bool enable(); /** * @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..63d13679ef0 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,6 +149,41 @@ bool PDPServer::init( m_discovery.discovery_config.discoveryServer_client_syncperiod)); ping_->restart_timer(); + return true; +} + +bool PDPServer::enable() +{ + 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) { @@ -185,7 +191,7 @@ bool PDPServer::init( process_backup_restore_queue(backup_queue); } - return true; + return PDP::enable(); } 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..956fad7c65a 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp @@ -79,6 +79,13 @@ class PDPServer : public fastrtps::rtps::PDP bool init( fastrtps::rtps::RTPSParticipantImpl* part) override; + /** + * @brief Enable the Participant Discovery Protocol and checks if a backup file + * needs to be restored for DiscoveryProtocol_t::BACKUP. + * + * @return true if enabled correctly, or if already enabled; false otherwise + */ + bool enable() override; /** * Creates an initializes a new participant proxy from a DATA(p) raw info * @param p ParticipantProxyData from DATA msg deserialization