Skip to content

Commit

Permalink
Change backup restore order (#4740)
Browse files Browse the repository at this point in the history
* Refs #20936: Move Restore method to enable instead of init

Signed-off-by: cferreiragonz <carlosferreira@eprosima.com>

* Refs #20936: Revision

Signed-off-by: cferreiragonz <carlosferreira@eprosima.com>

---------

Signed-off-by: cferreiragonz <carlosferreira@eprosima.com>
  • Loading branch information
cferreiragonz authored Jun 13, 2024
1 parent 1f6a231 commit 5273c6e
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 31 deletions.
8 changes: 8 additions & 0 deletions src/cpp/rtps/builtin/discovery/participant/PDP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,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_)
{
Expand Down Expand Up @@ -444,6 +447,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)
Expand Down
5 changes: 5 additions & 0 deletions src/cpp/rtps/builtin/discovery/participant/PDP.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
66 changes: 35 additions & 31 deletions src/cpp/rtps/builtin/discovery/participant/PDPServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,35 +120,6 @@ bool PDPServer::init(
return false;
}

std::vector<nlohmann::json> 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<EDPServer*>(mp_EDP);
builtin_endpoints_->enable_pdp_readers(getRTPSParticipant());
Expand Down Expand Up @@ -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<nlohmann::json> 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(
Expand Down
6 changes: 6 additions & 0 deletions src/cpp/rtps/builtin/discovery/participant/PDPServer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 5273c6e

Please sign in to comment.