From a2ab9b9f3c27b8bf5f4f636babf9d00672f565e2 Mon Sep 17 00:00:00 2001 From: cferreiragonz Date: Mon, 29 Apr 2024 11:45:44 +0200 Subject: [PATCH] Refs #20936: Move Restore method to enable instead of init Signed-off-by: cferreiragonz --- .../rtps/builtin/discovery/participant/PDP.h | 2 +- .../discovery/participant/PDPServer.cpp | 66 ++++++++++--------- .../discovery/participant/PDPServer.hpp | 7 ++ 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.h b/src/cpp/rtps/builtin/discovery/participant/PDP.h index d3a6e5f6033..364047f70f2 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(); virtual bool init( RTPSParticipantImpl* part) = 0; diff --git a/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp b/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp index 9ce04ef45e4..b6babd8b79b 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp @@ -119,35 +119,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()); @@ -177,6 +148,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) { @@ -184,7 +190,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 3d54c147ef2..c7787abd746 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 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