From 9ccf5dea1434af13cba55dbf40e2c97ad1bd67ce Mon Sep 17 00:00:00 2001 From: Santiago Vendramini Date: Wed, 29 Jan 2025 08:19:15 +0100 Subject: [PATCH] feat: Add CreateTmpFilename function The function is added to generate temporary names for configuration files downloaded by centralized_configuration. These files are then analyzed, and if valid, they are renamed to their final name. This prevents collisions when downloading and validating the configuration for the same group simultaneously. --- .../src/centralized_configuration.cpp | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/agent/centralized_configuration/src/centralized_configuration.cpp b/src/agent/centralized_configuration/src/centralized_configuration.cpp index 18520c465a..e999a5e450 100644 --- a/src/agent/centralized_configuration/src/centralized_configuration.cpp +++ b/src/agent/centralized_configuration/src/centralized_configuration.cpp @@ -2,7 +2,27 @@ #include #include +#include #include +#include + +namespace +{ + std::string CreateTmpFilename() + { + constexpr int MIN_VALUE = 1000; + constexpr int MAX_VALUE = 9999; + std::random_device rd; + std::mt19937 generator(rd()); + std::uniform_int_distribution distribution(MIN_VALUE, MAX_VALUE); + int random = distribution(generator); + + auto now = std::chrono::high_resolution_clock::now(); + auto timestamp = now.time_since_epoch().count(); + + return std::to_string(timestamp) + "_" + std::to_string(random); + } +} // namespace namespace centralized_configuration { @@ -90,7 +110,8 @@ namespace centralized_configuration for (const auto& groupId : groupIds) { const std::filesystem::path tmpGroupFile = - m_fileSystemWrapper->temp_directory_path() / (groupId + config::DEFAULT_SHARED_FILE_EXTENSION); + m_fileSystemWrapper->temp_directory_path() / + (groupId + "_" + CreateTmpFilename() + config::DEFAULT_SHARED_FILE_EXTENSION); const auto dlResult = co_await m_downloadGroupFilesFunction(groupId, tmpGroupFile.string());