From b1652d17956b91d86c054b44bd68cc415371ff56 Mon Sep 17 00:00:00 2001 From: Joao Afonso <joao.afonso@cern.ch> Date: Mon, 3 Feb 2025 13:48:05 +0100 Subject: [PATCH 1/5] Fixing fxid/disk_file_id incongruences --- cmdline/CtaAdminCmdParse.hpp | 12 ++- .../EosNamespaceInjection.cpp | 7 ++ .../restore_files/RestoreFilesCmd.cpp | 4 +- common/utils/utils.cpp | 11 +++ common/utils/utils.hpp | 7 ++ frontend/common/AdminCmd.cpp | 73 +++++++++++++++---- xroot_plugins/XrdCtaRecycleTapeFileLs.hpp | 27 ++++--- xroot_plugins/XrdCtaTapeFileLs.hpp | 26 +++++-- 8 files changed, 131 insertions(+), 36 deletions(-) diff --git a/cmdline/CtaAdminCmdParse.hpp b/cmdline/CtaAdminCmdParse.hpp index d341ae5fad..e6029f801a 100644 --- a/cmdline/CtaAdminCmdParse.hpp +++ b/cmdline/CtaAdminCmdParse.hpp @@ -343,7 +343,8 @@ const std::map<std::string, OptionString::Key> strOptions = { {"--guiurl", OptionString::GUI_URL }, {"--webcamurl", OptionString::WEBCAM_URL }, {"--location", OptionString::LIBRARY_LOCATION }, - {"--archiveroutetype", OptionString::ARCHIVE_ROUTE_TYPE } + {"--archiveroutetype", OptionString::ARCHIVE_ROUTE_TYPE }, + {"--diskfileid", OptionString::DISK_FILE_ID } }; /*! @@ -401,6 +402,7 @@ const Option opt_drivename_cmd {Option::OPT_CMD, "--drive", "", "<drive_name>"}; const Option opt_encrypted {Option::OPT_BOOL, "--encrypted", "-e", R"( <"true" or "false">)"}; const Option opt_encryptionkeyname {Option::OPT_STR, "--encryptionkeyname", "-k", " <encryption_key_name>"}; const Option opt_fid {Option::OPT_STR, "--fxid", "-f", " <eos_fxid>"}; +const Option opt_diskfileid {Option::OPT_STR, "--diskfileid", "--dfid", " <disk_file_id>"}; const Option opt_fidfile {Option::OPT_STR_LIST, "--fxidfile", "-F", " <filename>"}; const Option opt_filename {Option::OPT_STR, "--file", "-f", " <filename>"}; const Option opt_force {Option::OPT_BOOL, "--force", "-f", R"( <"true" or "false">)"}; @@ -883,6 +885,7 @@ recycletf (rtf) {{AdminCmd::CMD_RECYCLETAPEFILE, AdminCmd::SUBCMD_LS}, {opt_vid.optional(), opt_fid.optional(), + opt_diskfileid.optional(), opt_fidfile.optional(), opt_copynb.optional(), opt_archivefileid.optional(), @@ -1060,10 +1063,11 @@ tapefile (tf) {opt_vid.optional(), opt_instance.optional(), opt_fid.optional(), + opt_diskfileid.optional(), opt_fidfile.optional(), opt_archivefileid.optional()} }, {{AdminCmd::CMD_TAPEFILE, AdminCmd::SUBCMD_RM}, - {opt_vid, opt_instance.optional(), opt_fid.optional(), opt_archivefileid.optional(), opt_reason} }, + {opt_vid, opt_instance.optional(), opt_fid.optional(), opt_diskfileid.optional(), opt_archivefileid.optional(), opt_reason} }, /**md tapepool (tp) @@ -1151,10 +1155,10 @@ virtualorganization (vo) // Used by cta-change-storageclass and cta-eos-namespace-inject {{AdminCmd::CMD_ARCHIVEFILE, AdminCmd::SUBCMD_CH}, - {opt_storageclass.optional(), opt_archive_file_ids, opt_fid.optional(), opt_diskinstance.optional()} }, + {opt_storageclass.optional(), opt_archive_file_ids, opt_fid.optional(), opt_diskfileid.optional(), opt_diskinstance.optional()} }, // Used by cta-restore-deleted-files {{AdminCmd::CMD_RECYCLETAPEFILE, AdminCmd::SUBCMD_RESTORE}, - {opt_vid.optional(), opt_fid, opt_copynb.optional(), opt_archivefileid.optional(), opt_instance.optional()} }, + {opt_vid.optional(), opt_fid.optional(), opt_diskfileid.optional(), opt_copynb.optional(), opt_archivefileid.optional(), opt_instance.optional()} }, /*-------------------------------------------------------------------------------------------------------------------------*/ }; diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp index a31d8b56ca..60b2106eed 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp @@ -181,6 +181,13 @@ void EosNamespaceInjection::updateFxidAndDiskInstanceInCatalogue(const std::stri new_opt->set_value(fxId); } + { + const auto key = cta::admin::OptionString::DISK_FILE_ID; + const auto new_opt = admincmd->add_option_str(); + new_opt->set_key(key); + new_opt->set_value(fxId); + } + { const auto key = cta::admin::OptionString::DISK_INSTANCE; const auto new_opt = admincmd->add_option_str(); diff --git a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp index 519254c3c8..55e4569379 100644 --- a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp +++ b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp @@ -341,10 +341,10 @@ void RestoreFilesCmd::restoreDeletedFileCopyCta(const cta::admin::RecycleTapeFil new_opt->set_value(file.copy_nb()); } { - auto key = cta::admin::OptionString::FXID; + auto key = cta::admin::OptionString::DISK_FILE_ID; auto new_opt = admincmd.add_option_str(); - if (!utils::isValidID(file.disk_file_id())) { + if (!utils::isValidDecimal(file.disk_file_id()) && !utils::isValidUUID(file.disk_file_id())) { throw std::runtime_error(file.disk_file_id() + " is not a valid disk file ID"); } params.emplace_back("fid", file.disk_file_id()); diff --git a/common/utils/utils.cpp b/common/utils/utils.cpp index 7166019754..7891b7e534 100644 --- a/common/utils/utils.cpp +++ b/common/utils/utils.cpp @@ -1004,6 +1004,17 @@ std::string decimalToHexadecimal(const std::string& decimalNumber) { return fxIdStream.str(); } +std::string hexadecimalToDecimal(const std::string& hexadecimalNumber) { + try { + auto decimalNum = stol(hexadecimalNumber, nullptr, 16); + return std::to_string(decimalNum); + } catch (std::invalid_argument & ex) { + throw cta::exception::Exception(hexadecimalNumber + " is not a valid hexadecimal number."); + } catch (std::out_of_range & ex) { + throw cta::exception::Exception(hexadecimalNumber + " is out of range."); + } +} + // Check if uuid is correct bool isValidUUID(const std::string& uuid) { if (uuid.empty()) { diff --git a/common/utils/utils.hpp b/common/utils/utils.hpp index 4a1ed99f52..6e77370ac1 100644 --- a/common/utils/utils.hpp +++ b/common/utils/utils.hpp @@ -507,6 +507,13 @@ std::string listToCommaSeparatedString(const std::list<std::string>& list); */ std::string decimalToHexadecimal(const std::string& decimalNumber); +/** + * Converts a number from a hexadecimal number to a decimal number + * @param hexadecimalNumber The number that will be transformed + * @return the hexadecimal version of the number + */ +std::string hexadecimalToDecimal(const std::string& hexadecimalNumber); + /** * Checks if a string is a valid UUID. * diff --git a/frontend/common/AdminCmd.cpp b/frontend/common/AdminCmd.cpp index 3033b5e7be..10058da60c 100644 --- a/frontend/common/AdminCmd.cpp +++ b/frontend/common/AdminCmd.cpp @@ -1195,7 +1195,8 @@ void AdminCmd::processTapeFile_Rm(xrd::Response& response) { auto& reason = getRequired(OptionString::REASON); auto archiveFileId = getOptional(OptionUInt64::ARCHIVE_FILE_ID); auto instance = getOptional(OptionString::INSTANCE); - auto diskFileId = getOptional(OptionString::FXID); + auto diskFileIdHex = getOptional(OptionString::FXID); + auto diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); catalogue::TapeFileSearchCriteria searchCriteria; searchCriteria.vid = vid; @@ -1203,13 +1204,24 @@ void AdminCmd::processTapeFile_Rm(xrd::Response& response) { if(archiveFileId) { searchCriteria.archiveFileId = archiveFileId.value(); } - if(diskFileId) { - auto fid = strtol(diskFileId.value().c_str(), nullptr, 16); - if(fid < 1 || fid == LONG_MAX) { - throw exception::UserError(diskFileId.value() + " is not a valid file ID"); + if(diskFileIdHex && diskFileIdStr) { + throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); + } + if(diskFileIdHex) { + try { + diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); + } catch (exception::Exception &) { + throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); + } + } else if(diskFileIdStr) { + if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { + throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); } + } + + if(diskFileIdStr) { searchCriteria.diskFileIds = std::vector<std::string>(); - searchCriteria.diskFileIds.value().push_back(std::to_string(fid)); + searchCriteria.diskFileIds.value().push_back(diskFileIdStr.value()); } if(instance) { searchCriteria.diskInstance = instance.value(); @@ -1600,11 +1612,26 @@ void AdminCmd::processRecycleTapeFile_Restore(xrd::Response& response) { catalogue::RecycleTapeFileSearchCriteria searchCriteria; searchCriteria.vid = getOptional(OptionString::VID, &has_any); - auto diskFileId = getRequired(OptionString::FXID); - - auto fid = strtol(diskFileId.c_str(), nullptr, 16); - if(fid < 1 || fid == LONG_MAX) { - throw exception::UserError(diskFileId + " is not a valid file ID"); + auto diskFileIdHex = getOptional(OptionString::FXID); + auto diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); + + if(diskFileIdHex && diskFileIdStr) { + throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); + } + if(!diskFileIdHex && !diskFileIdStr) { + throw exception::UserError("Must specify at least one of the following search options: fxid, diskfileid"); + } + + if(diskFileIdHex) { + try { + diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); + } catch (exception::Exception &) { + throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); + } + } else { + if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { + throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); + } } // Disk instance on its own does not give a valid set of search criteria (no &has_any) @@ -1616,7 +1643,7 @@ void AdminCmd::processRecycleTapeFile_Restore(xrd::Response& response) { if(!has_any) { throw exception::UserError("Must specify at least one of the following search options: vid, fxid, fxidfile or archiveFileId"); } - m_catalogue.FileRecycleLog()->restoreFileInRecycleLog(searchCriteria, std::to_string(fid)); + m_catalogue.FileRecycleLog()->restoreFileInRecycleLog(searchCriteria, diskFileIdStr.value()); response.set_type(xrd::Response::RSP_SUCCESS); } @@ -1625,11 +1652,27 @@ void AdminCmd::processModifyArchiveFile(xrd::Response& response) { try { std::optional<std::string> newStorageClassName = getOptional(OptionString::STORAGE_CLASS); - std::optional<std::string> fxId = getOptional(OptionString::FXID); + std::optional<std::string> diskFileIdHex = getOptional(OptionString::FXID); + std::optional<std::string> diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); std::optional<std::string> diskInstance = getOptional(OptionString::DISK_INSTANCE); auto archiveFileIds = getRequired(OptionStrList::FILE_ID); + if(diskFileIdHex && diskFileIdStr) { + throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); + } + if(diskFileIdHex) { + try { + diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); + } catch (exception::Exception &) { + throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); + } + } else if (diskFileIdStr) { + if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { + throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); + } + } + // call is from cta-change-storageclass if(newStorageClassName) { for(const auto& id : archiveFileIds) { @@ -1638,9 +1681,9 @@ void AdminCmd::processModifyArchiveFile(xrd::Response& response) { } } // call is from cta-eos-namespace-inject - else if(fxId && diskInstance) { + else if(diskFileIdStr && diskInstance) { m_catalogue.ArchiveFile()->modifyArchiveFileFxIdAndDiskInstance(utils::toUint64(archiveFileIds[0]), - fxId.value(), diskInstance.value()); + diskFileIdStr.value(), diskInstance.value()); } else { throw exception::UserError("Must specify either Storage Class or Disk File ID and Disk Instance"); } diff --git a/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp b/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp index 39d4d7e06c..b355a24f2a 100644 --- a/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp +++ b/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp @@ -68,18 +68,27 @@ RecycleTapeFileLsStream::RecycleTapeFileLsStream(const frontend::AdminCmdStream& searchCriteria.vid = requestMsg.getOptional(OptionString::VID, &has_any); - auto diskFileId = requestMsg.getOptional(OptionString::FXID, &has_any); - - searchCriteria.diskFileIds = requestMsg.getOptional(OptionStrList::FILE_ID, &has_any); - - if (diskFileId){ - if (auto fid = diskFileId.value(); !utils::isValidID(fid)) { - throw cta::exception::UserError(fid + " is not a valid file ID"); + auto diskFileIdHex = requestMsg.getOptional(OptionString::FXID, &has_any); + auto diskFileIdStr = requestMsg.getOptional(OptionString::DISK_FILE_ID, &has_any); + if(diskFileIdHex && diskFileIdStr) { + throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); + } + if(diskFileIdHex) { + try { + diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); + } catch (exception::Exception &) { + throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); } + } else if(diskFileIdStr) { + if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { + throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); + } + } - // single option on the command line we need to do the conversion ourselves. + searchCriteria.diskFileIds = requestMsg.getOptional(OptionStrList::FILE_ID, &has_any); + if (diskFileIdStr){ if(!searchCriteria.diskFileIds) searchCriteria.diskFileIds = std::vector<std::string>(); - searchCriteria.diskFileIds->push_back(diskFileId.value()); + searchCriteria.diskFileIds->push_back(diskFileIdStr.value()); } searchCriteria.diskInstance = requestMsg.getOptional(OptionString::INSTANCE, &has_any); searchCriteria.archiveFileId = requestMsg.getOptional(OptionUInt64::ARCHIVE_FILE_ID, &has_any); diff --git a/xroot_plugins/XrdCtaTapeFileLs.hpp b/xroot_plugins/XrdCtaTapeFileLs.hpp index 5c438b552b..63f9841434 100644 --- a/xroot_plugins/XrdCtaTapeFileLs.hpp +++ b/xroot_plugins/XrdCtaTapeFileLs.hpp @@ -64,15 +64,29 @@ TapeFileLsStream::TapeFileLsStream(const frontend::AdminCmdStream& requestMsg, cta::catalogue::TapeFileSearchCriteria searchCriteria; searchCriteria.vid = requestMsg.getOptional(OptionString::VID, &has_any); + + auto diskFileIdHex = requestMsg.getOptional(OptionString::FXID, &has_any); + auto diskFileIdStr = requestMsg.getOptional(OptionString::DISK_FILE_ID, &has_any); + if(diskFileIdHex && diskFileIdStr) { + throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); + } + if(diskFileIdHex) { + try { + diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); + } catch (exception::Exception &) { + throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); + } + } else if(diskFileIdStr) { + if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { + throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); + } + } + // Disk file IDs can be a list or a single ID - auto diskFileId = requestMsg.getOptional(OptionString::FXID, &has_any); searchCriteria.diskFileIds = requestMsg.getOptional(OptionStrList::FILE_ID, &has_any); - if(diskFileId.has_value()) { - if (auto fid = diskFileId.value(); !utils::isValidID(fid)) { - throw cta::exception::UserError(fid + " is not a valid file ID"); - } + if(diskFileIdStr) { if(!searchCriteria.diskFileIds) searchCriteria.diskFileIds = std::vector<std::string>(); - searchCriteria.diskFileIds->push_back(diskFileId.value()); + searchCriteria.diskFileIds->push_back(diskFileIdStr.value()); } searchCriteria.diskInstance = requestMsg.getOptional(OptionString::INSTANCE, &has_any); -- GitLab From 768e69e70112931722afe1a71a779df1ced4b6b5 Mon Sep 17 00:00:00 2001 From: Joao Afonso <joao.afonso@cern.ch> Date: Mon, 3 Feb 2025 13:52:20 +0100 Subject: [PATCH 2/5] Temporarily changing 'xrootd-ssi-protobuf-interface' to 'cta-1060' branch --- xrootd-ssi-protobuf-interface | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xrootd-ssi-protobuf-interface b/xrootd-ssi-protobuf-interface index d3ab3e9ee6..f632da459b 160000 --- a/xrootd-ssi-protobuf-interface +++ b/xrootd-ssi-protobuf-interface @@ -1 +1 @@ -Subproject commit d3ab3e9ee657c9a0f67a9f2cc168cd9d7b6b7bf9 +Subproject commit f632da459bac1e11fb44747a056b3552d0955e53 -- GitLab From af15100f2fb598d02a0b562cffba622c91afc8ea Mon Sep 17 00:00:00 2001 From: Joao Afonso <joao.afonso@cern.ch> Date: Fri, 21 Feb 2025 10:13:24 +0100 Subject: [PATCH 3/5] Updating xrootd-ssi-protobuf-interface version --- xrootd-ssi-protobuf-interface | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xrootd-ssi-protobuf-interface b/xrootd-ssi-protobuf-interface index f632da459b..95ca6aca15 160000 --- a/xrootd-ssi-protobuf-interface +++ b/xrootd-ssi-protobuf-interface @@ -1 +1 @@ -Subproject commit f632da459bac1e11fb44747a056b3552d0955e53 +Subproject commit 95ca6aca153a6e72a33a281258e3372d54fe6a74 -- GitLab From 9d8e0f954870ed325867cc47fce291996bec6a93 Mon Sep 17 00:00:00 2001 From: Joao Afonso <joao.afonso@cern.ch> Date: Fri, 21 Feb 2025 12:06:50 +0100 Subject: [PATCH 4/5] Added function to handle FXID/DISK_FILE_ID conficts --- .../EosNamespaceInjection.cpp | 45 +++++----- .../EosNamespaceInjection.hpp | 12 +-- .../eos_namespace_injection/MetaData.hpp | 2 +- .../restore_files/RestoreFilesCmd.cpp | 21 +++-- common/utils/utils.cpp | 23 +++--- common/utils/utils.hpp | 10 +-- frontend/common/AdminCmd.cpp | 82 ++++++++----------- frontend/common/AdminCmd.hpp | 13 +++ xroot_plugins/XrdCtaRecycleTapeFileLs.hpp | 17 +--- xroot_plugins/XrdCtaTapeFileLs.hpp | 20 +---- 10 files changed, 99 insertions(+), 146 deletions(-) diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp index 60b2106eed..a1c60dee1d 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp @@ -76,7 +76,7 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const { g_metaDataObjectCatalogue.size = std::to_string(item.af().size()); g_metaDataObjectCatalogue.storageClass = item.af().storage_class(); g_metaDataObjectCatalogue.creationTime = std::to_string(item.af().creation_time()); - g_metaDataObjectCatalogue.fxId = item.df().disk_id(); + g_metaDataObjectCatalogue.diskId = item.df().disk_id(); g_metaDataObjectCatalogue.diskInstance = item.df().disk_instance(); std::string checksumType("NONE"); @@ -152,10 +152,10 @@ int EosNamespaceInjection::exceptionThrowingMain(const int argc, char *const *co const auto newFid = createFileInEos(metaDataFromUser, parentId, uid, gid); checkFileCreated(newFid); - std::string newFxId = cta::utils::decimalToHexadecimal(std::to_string(newFid)); - updateFxidAndDiskInstanceInCatalogue(metaDataFromUser.archiveId, newFxId, metaDataFromUser.diskInstance); + auto diskFileId = std::to_string(newFid); + updateDiskFileIdAndDiskInstanceInCatalogue(metaDataFromUser.archiveId, diskFileId, metaDataFromUser.diskInstance); - checkEosCtaConsistency(archiveId, newFxId, metaDataFromUser); + checkEosCtaConsistency(archiveId, diskFileId, metaDataFromUser); } createTxtFileWithSkippedMetadata(); return 0; @@ -164,7 +164,7 @@ int EosNamespaceInjection::exceptionThrowingMain(const int argc, char *const *co //------------------------------------------------------------------------------ // updateFxidAndDiskInstanceInCatalogue //------------------------------------------------------------------------------ -void EosNamespaceInjection::updateFxidAndDiskInstanceInCatalogue(const std::string &archiveId, const std::string &fxId, const std::string &diskInstance) const { +void EosNamespaceInjection::updateDiskFileIdAndDiskInstanceInCatalogue(const std::string &archiveId, const std::string &diskFileId, const std::string &diskInstance) const { cta::xrd::Request request; const auto admincmd = request.mutable_admincmd(); @@ -175,28 +175,21 @@ void EosNamespaceInjection::updateFxidAndDiskInstanceInCatalogue(const std::stri admincmd->set_subcmd(cta::admin::AdminCmd::SUBCMD_CH); { - const auto key = cta::admin::OptionString::FXID; + constexpr auto key = cta::admin::OptionString::DISK_FILE_ID; const auto new_opt = admincmd->add_option_str(); new_opt->set_key(key); - new_opt->set_value(fxId); + new_opt->set_value(diskFileId); } { - const auto key = cta::admin::OptionString::DISK_FILE_ID; - const auto new_opt = admincmd->add_option_str(); - new_opt->set_key(key); - new_opt->set_value(fxId); - } - - { - const auto key = cta::admin::OptionString::DISK_INSTANCE; + constexpr auto key = cta::admin::OptionString::DISK_INSTANCE; const auto new_opt = admincmd->add_option_str(); new_opt->set_key(key); new_opt->set_value(diskInstance); } { - const auto key = cta::admin::OptionStrList::FILE_ID; + constexpr auto key = cta::admin::OptionStrList::FILE_ID; const auto new_opt = admincmd->add_option_str_list(); new_opt->set_key(key); new_opt->add_item(archiveId); @@ -386,14 +379,15 @@ uint64_t EosNamespaceInjection::createFileInEos(const MetaDataObject &metaDataFr // getArchiveFileIdFromEOS //------------------------------------------------------------------------------ std::pair<ArchiveId, Checksum> EosNamespaceInjection::getArchiveFileIdAndChecksumFromEOS( - const std::string& diskInstance, const std::string& fxId) { - auto fid = strtoul(fxId.c_str(), nullptr, 10); + const std::string& diskInstance, const std::string& diskFileId) const { + const auto fid = strtoul(diskFileId.c_str(), nullptr, 10); if(fid < 1) { - throw std::runtime_error(fid + " (base 10) is not a valid disk file ID"); + throw std::runtime_error(diskFileId + " is not a valid EOS base-10 disk file ID"); } { std::list<cta::log::Param> params; params.push_back(cta::log::Param("diskInstance", diskInstance)); + params.push_back(cta::log::Param("diskFileId", diskFileId)); params.push_back(cta::log::Param("fid", fid)); std::stringstream ss; ss << std::hex << fid; @@ -443,18 +437,18 @@ void EosNamespaceInjection::setCmdLineArguments(const int argc, char *const *con //------------------------------------------------------------------------------ // checkEosCtaConsistency //------------------------------------------------------------------------------ -bool EosNamespaceInjection::checkEosCtaConsistency(const uint64_t& archiveId, const std::string& newFxIdEos, const MetaDataObject &metaDataFromUser) { +bool EosNamespaceInjection::checkEosCtaConsistency(const uint64_t& archiveId, const std::string& newDiskFileId, const MetaDataObject &metaDataFromUser) { getMetaDataFromCatalogue(archiveId); - const auto [eosArchiveFileId, eosChecksumDecimal] = getArchiveFileIdAndChecksumFromEOS(metaDataFromUser.diskInstance, newFxIdEos); + const auto [eosArchiveFileId, eosChecksumDecimal] = getArchiveFileIdAndChecksumFromEOS(metaDataFromUser.diskInstance, newDiskFileId); const std::string eosChecksum = cta::utils::decimalToHexadecimal(eosChecksumDecimal); const auto& ctaChecksum = g_metaDataObjectCatalogue.checksumValue; std::list<cta::log::Param> params; params.push_back(cta::log::Param("archiveFileId", archiveId)); - params.push_back(cta::log::Param("diskFileId in EOS for new file", newFxIdEos)); - params.push_back(cta::log::Param("diskFileId in Catalogue", g_metaDataObjectCatalogue.fxId)); + params.push_back(cta::log::Param("diskFileId in EOS for new file", newDiskFileId)); + params.push_back(cta::log::Param("diskFileId in Catalogue", g_metaDataObjectCatalogue.diskId)); params.push_back(cta::log::Param("diskInstance in Catalogue", g_metaDataObjectCatalogue.diskInstance)); params.push_back(cta::log::Param("checksum", ctaChecksum)); - if(eosArchiveFileId == archiveId && eosChecksum == ctaChecksum && g_metaDataObjectCatalogue.fxId == newFxIdEos) { + if(eosArchiveFileId == archiveId && eosChecksum == ctaChecksum && g_metaDataObjectCatalogue.diskId == newDiskFileId) { m_log(cta::log::INFO, "File metadata in EOS and CTA matches", params); return true; } else { @@ -510,8 +504,7 @@ void EosNamespaceInjection::checkArchiveIdExistsInCatalogue(const uint64_t &arch // checkExistingPathHasInvalidMetadata //------------------------------------------------------------------------------ void EosNamespaceInjection::checkExistingPathHasInvalidMetadata(const uint64_t &archiveId, const uint64_t& fid, const MetaDataObject& metaDataFromUser) { - const std::string fxId = cta::utils::decimalToHexadecimal(std::to_string(fid)); - if(!checkEosCtaConsistency(archiveId, fxId, metaDataFromUser)) { + if(!checkEosCtaConsistency(archiveId, std::to_string(fid), metaDataFromUser)) { throw cta::cliTool::EosNameSpaceInjectionError("The file with path " + metaDataFromUser.eosPath + " already exists for instance " + metaDataFromUser.diskInstance + ". This tool does not overwrite existing files"); } } diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.hpp b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.hpp index 1dca6860fa..7d014d6ef7 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.hpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.hpp @@ -74,12 +74,12 @@ class EosNamespaceInjection final: public CmdLineTool { bool getMetaDataFromCatalogue(const uint64_t &archiveId) const; /** - * Updates the fxid and the disk instance in the catalogue. + * Updates the disk file ID and the disk instance in the catalogue. * @param archiveId the archive file id to check - * @param fxId The new fxId - * @param diskInstnace The new disk instance + * @param diskFileId The new diskFileID + * @param diskInstance The new disk instance */ - void updateFxidAndDiskInstanceInCatalogue(const std::string &archiveId, const std::string &fxId, const std::string &diskInstance) const; + void updateDiskFileIdAndDiskInstanceInCatalogue(const std::string &archiveId, const std::string &diskFileId, const std::string &diskInstance) const; /** * Compares the meta data from the provided json and from the Catalogue @@ -113,9 +113,9 @@ class EosNamespaceInjection final: public CmdLineTool { /** * Gets the archive file id and checksum from eos * @param diskInstance The eos disk instance - * @param fxId The eos file id + * @param diskFileId The eos disk file id */ - std::pair<ArchiveId, Checksum> getArchiveFileIdAndChecksumFromEOS(const std::string& diskInstance, const std::string& fxId); + std::pair<ArchiveId, Checksum> getArchiveFileIdAndChecksumFromEOS(const std::string& diskInstance, const std::string& diskFileId) const; /** * Validates the command line arguments diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp b/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp index 4f89ecc684..c51caeb13c 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp @@ -28,7 +28,7 @@ namespace cta::cliTool { struct MetaDataObject { std::string eosPath; std::string diskInstance; - std::string fxId; + std::string diskId; std::string creationTime; std::string archiveId; std::string size; diff --git a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp index 55e4569379..c14dcc2117 100644 --- a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp +++ b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp @@ -317,37 +317,36 @@ void RestoreFilesCmd::restoreDeletedFileCopyCta(const cta::admin::RecycleTapeFil admincmd.set_subcmd(cta::admin::AdminCmd::SUBCMD_RESTORE); { - auto key = cta::admin::OptionString::VID; - auto new_opt = admincmd.add_option_str(); + constexpr auto key = cta::admin::OptionString::VID; + const auto new_opt = admincmd.add_option_str(); new_opt->set_key(key); new_opt->set_value(file.vid()); } { - auto key = cta::admin::OptionString::INSTANCE; - auto new_opt = admincmd.add_option_str(); + constexpr auto key = cta::admin::OptionString::INSTANCE; + const auto new_opt = admincmd.add_option_str(); new_opt->set_key(key); new_opt->set_value(file.disk_instance()); } { - auto key = cta::admin::OptionUInt64::ARCHIVE_FILE_ID; - auto new_opt = admincmd.add_option_uint64(); + constexpr auto key = cta::admin::OptionUInt64::ARCHIVE_FILE_ID; + const auto new_opt = admincmd.add_option_uint64(); new_opt->set_key(key); new_opt->set_value(file.archive_file_id()); } { - auto key = cta::admin::OptionUInt64::COPY_NUMBER; - auto new_opt = admincmd.add_option_uint64(); + constexpr auto key = cta::admin::OptionUInt64::COPY_NUMBER; + const auto new_opt = admincmd.add_option_uint64(); new_opt->set_key(key); new_opt->set_value(file.copy_nb()); } { - auto key = cta::admin::OptionString::DISK_FILE_ID; - auto new_opt = admincmd.add_option_str(); + constexpr auto key = cta::admin::OptionString::DISK_FILE_ID; + const auto new_opt = admincmd.add_option_str(); if (!utils::isValidDecimal(file.disk_file_id()) && !utils::isValidUUID(file.disk_file_id())) { throw std::runtime_error(file.disk_file_id() + " is not a valid disk file ID"); } - params.emplace_back("fid", file.disk_file_id()); new_opt->set_key(key); new_opt->set_value(file.disk_file_id()); } diff --git a/common/utils/utils.cpp b/common/utils/utils.cpp index 7891b7e534..4bf6e5e1d8 100644 --- a/common/utils/utils.cpp +++ b/common/utils/utils.cpp @@ -998,21 +998,18 @@ std::string listToCommaSeparatedString(const std::list<std::string>& list) { return oss.str(); } -std::string decimalToHexadecimal(const std::string& decimalNumber) { - std::stringstream fxIdStream; - fxIdStream << std::hex << decimalNumber; - return fxIdStream.str(); +std::string decimalToHexadecimal(const std::string& decimalNumberStr) { + std::stringstream fxidStream; + const auto decimalNumber = stol(decimalNumberStr); + fxidStream << std::hex << decimalNumber; + return fxidStream.str(); } -std::string hexadecimalToDecimal(const std::string& hexadecimalNumber) { - try { - auto decimalNum = stol(hexadecimalNumber, nullptr, 16); - return std::to_string(decimalNum); - } catch (std::invalid_argument & ex) { - throw cta::exception::Exception(hexadecimalNumber + " is not a valid hexadecimal number."); - } catch (std::out_of_range & ex) { - throw cta::exception::Exception(hexadecimalNumber + " is out of range."); - } +std::string hexadecimalToDecimal(const std::string& hexadecimalNumberStr) { + std::stringstream fidStream; + const auto decimalNumber = stol(hexadecimalNumberStr, nullptr, 16); + fidStream << std::dec << decimalNumber; + return fidStream.str(); } // Check if uuid is correct diff --git a/common/utils/utils.hpp b/common/utils/utils.hpp index 6e77370ac1..e6de2884bf 100644 --- a/common/utils/utils.hpp +++ b/common/utils/utils.hpp @@ -502,17 +502,17 @@ std::string listToCommaSeparatedString(const std::list<std::string>& list); /** * Converts a number from a decimal number to a hexidecimal number - * @param decimalNumber The number that will be transformed + * @param decimalNumberStr The number that will be transformed * @return the hexadecimal version of the number */ -std::string decimalToHexadecimal(const std::string& decimalNumber); +std::string decimalToHexadecimal(const std::string& decimalNumberStr); /** * Converts a number from a hexadecimal number to a decimal number - * @param hexadecimalNumber The number that will be transformed - * @return the hexadecimal version of the number + * @param hexadecimalNumberStr The number that will be transformed + * @return the decimal version of the number */ -std::string hexadecimalToDecimal(const std::string& hexadecimalNumber); +std::string hexadecimalToDecimal(const std::string& hexadecimalNumberStr); /** * Checks if a string is a valid UUID. diff --git a/frontend/common/AdminCmd.cpp b/frontend/common/AdminCmd.cpp index 10058da60c..79d0402fcb 100644 --- a/frontend/common/AdminCmd.cpp +++ b/frontend/common/AdminCmd.cpp @@ -1195,8 +1195,7 @@ void AdminCmd::processTapeFile_Rm(xrd::Response& response) { auto& reason = getRequired(OptionString::REASON); auto archiveFileId = getOptional(OptionUInt64::ARCHIVE_FILE_ID); auto instance = getOptional(OptionString::INSTANCE); - auto diskFileIdHex = getOptional(OptionString::FXID); - auto diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); + auto diskFileIdStr = getAndValidateDiskFileIdOptional(); catalogue::TapeFileSearchCriteria searchCriteria; searchCriteria.vid = vid; @@ -1204,25 +1203,12 @@ void AdminCmd::processTapeFile_Rm(xrd::Response& response) { if(archiveFileId) { searchCriteria.archiveFileId = archiveFileId.value(); } - if(diskFileIdHex && diskFileIdStr) { - throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); - } - if(diskFileIdHex) { - try { - diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); - } catch (exception::Exception &) { - throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); - } - } else if(diskFileIdStr) { - if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { - throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); - } - } if(diskFileIdStr) { searchCriteria.diskFileIds = std::vector<std::string>(); searchCriteria.diskFileIds.value().push_back(diskFileIdStr.value()); } + if(instance) { searchCriteria.diskInstance = instance.value(); } @@ -1603,35 +1589,46 @@ std::string AdminCmd::setDriveState(const std::string& regex, const common::data return cmdlineOutput.str(); } -void AdminCmd::processRecycleTapeFile_Restore(xrd::Response& response) { +std::optional<std::string> AdminCmd::getAndValidateDiskFileIdOptional(bool* has_any) const { using namespace cta::admin; - - response.set_type(xrd::Response::RSP_SUCCESS); - - bool has_any = false; - catalogue::RecycleTapeFileSearchCriteria searchCriteria; - - searchCriteria.vid = getOptional(OptionString::VID, &has_any); - auto diskFileIdHex = getOptional(OptionString::FXID); - auto diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); + auto diskFileIdHex = getOptional(OptionString::FXID, has_any); + auto diskFileIdStr = getOptional(OptionString::DISK_FILE_ID, has_any); if(diskFileIdHex && diskFileIdStr) { throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); } - if(!diskFileIdHex && !diskFileIdStr) { - throw exception::UserError("Must specify at least one of the following search options: fxid, diskfileid"); - } if(diskFileIdHex) { - try { - diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); - } catch (exception::Exception &) { + // If provided, convert FXID (hexadecimal) to DISK_FILE_ID (decimal) + if (!utils::isValidHex(diskFileIdHex.value())) { throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); } - } else { + return utils::hexadecimalToDecimal(diskFileIdHex.value()); + } + + if(diskFileIdStr) { if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); } + return diskFileIdStr; + } + + return std::nullopt; +} + +void AdminCmd::processRecycleTapeFile_Restore(xrd::Response& response) { + using namespace cta::admin; + + response.set_type(xrd::Response::RSP_SUCCESS); + + bool has_any = false; + catalogue::RecycleTapeFileSearchCriteria searchCriteria; + + searchCriteria.vid = getOptional(OptionString::VID, &has_any); + + const auto diskFileIdStr = getAndValidateDiskFileIdOptional(); + if(!diskFileIdStr) { + throw exception::UserError("Must specify at least one of the following search options: fxid, diskfileid"); } // Disk instance on its own does not give a valid set of search criteria (no &has_any) @@ -1652,27 +1649,12 @@ void AdminCmd::processModifyArchiveFile(xrd::Response& response) { try { std::optional<std::string> newStorageClassName = getOptional(OptionString::STORAGE_CLASS); - std::optional<std::string> diskFileIdHex = getOptional(OptionString::FXID); - std::optional<std::string> diskFileIdStr = getOptional(OptionString::DISK_FILE_ID); + + std::optional<std::string> diskFileIdStr = getAndValidateDiskFileIdOptional(); std::optional<std::string> diskInstance = getOptional(OptionString::DISK_INSTANCE); auto archiveFileIds = getRequired(OptionStrList::FILE_ID); - if(diskFileIdHex && diskFileIdStr) { - throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); - } - if(diskFileIdHex) { - try { - diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); - } catch (exception::Exception &) { - throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); - } - } else if (diskFileIdStr) { - if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { - throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); - } - } - // call is from cta-change-storageclass if(newStorageClassName) { for(const auto& id : archiveFileIds) { diff --git a/frontend/common/AdminCmd.hpp b/frontend/common/AdminCmd.hpp index 6e0124f42f..cdacf4fd4d 100644 --- a/frontend/common/AdminCmd.hpp +++ b/frontend/common/AdminCmd.hpp @@ -112,6 +112,19 @@ public: return opt_it != m_option_bool.end() && opt_it->second; } + /*! + * Both parameters FXID and DISK_FILE_ID expect the same information but with different formats. + * They can't both be set simultaneously, to avoid inconsistencies. + * + * This function tries to parse one of these values and return it as a string (integer or UUID). + * + * @throws UserError if both FXID and DISK_FILE_ID are defined + * @throws UserError if format of FXID or DISK_FILE_ID is wrong + * + * @return The disk file ID as a string (integer or UUID), or nullopt if none defined. + */ + std::optional<std::string> getAndValidateDiskFileIdOptional(bool* has_any = nullptr) const; + protected: /*! * Convert AdminCmd <Cmd, SubCmd> pair to an integer so that it can be used in a switch statement diff --git a/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp b/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp index b355a24f2a..3d9c560d73 100644 --- a/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp +++ b/xroot_plugins/XrdCtaRecycleTapeFileLs.hpp @@ -68,22 +68,7 @@ RecycleTapeFileLsStream::RecycleTapeFileLsStream(const frontend::AdminCmdStream& searchCriteria.vid = requestMsg.getOptional(OptionString::VID, &has_any); - auto diskFileIdHex = requestMsg.getOptional(OptionString::FXID, &has_any); - auto diskFileIdStr = requestMsg.getOptional(OptionString::DISK_FILE_ID, &has_any); - if(diskFileIdHex && diskFileIdStr) { - throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); - } - if(diskFileIdHex) { - try { - diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); - } catch (exception::Exception &) { - throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); - } - } else if(diskFileIdStr) { - if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { - throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); - } - } + auto diskFileIdStr = requestMsg.getAndValidateDiskFileIdOptional(&has_any); searchCriteria.diskFileIds = requestMsg.getOptional(OptionStrList::FILE_ID, &has_any); if (diskFileIdStr){ diff --git a/xroot_plugins/XrdCtaTapeFileLs.hpp b/xroot_plugins/XrdCtaTapeFileLs.hpp index 63f9841434..d19810387d 100644 --- a/xroot_plugins/XrdCtaTapeFileLs.hpp +++ b/xroot_plugins/XrdCtaTapeFileLs.hpp @@ -64,23 +64,7 @@ TapeFileLsStream::TapeFileLsStream(const frontend::AdminCmdStream& requestMsg, cta::catalogue::TapeFileSearchCriteria searchCriteria; searchCriteria.vid = requestMsg.getOptional(OptionString::VID, &has_any); - - auto diskFileIdHex = requestMsg.getOptional(OptionString::FXID, &has_any); - auto diskFileIdStr = requestMsg.getOptional(OptionString::DISK_FILE_ID, &has_any); - if(diskFileIdHex && diskFileIdStr) { - throw exception::UserError("File ID can't be received in both string (" + diskFileIdStr.value() + ") and hexadecimal (" + diskFileIdHex.value() + ") formats"); - } - if(diskFileIdHex) { - try { - diskFileIdStr = utils::hexadecimalToDecimal(diskFileIdHex.value()); - } catch (exception::Exception &) { - throw cta::exception::UserError(diskFileIdHex.value() + " is not a valid hexadecimal file ID value"); - } - } else if(diskFileIdStr) { - if (!utils::isValidDecimal(diskFileIdStr.value()) && !utils::isValidUUID(diskFileIdStr.value())) { - throw cta::exception::UserError(diskFileIdStr.value() + " is not a valid decimal or UUID file ID value"); - } - } + auto diskFileIdStr = requestMsg.getAndValidateDiskFileIdOptional(&has_any); // Disk file IDs can be a list or a single ID searchCriteria.diskFileIds = requestMsg.getOptional(OptionStrList::FILE_ID, &has_any); @@ -93,7 +77,7 @@ TapeFileLsStream::TapeFileLsStream(const frontend::AdminCmdStream& requestMsg, searchCriteria.archiveFileId = requestMsg.getOptional(OptionUInt64::ARCHIVE_FILE_ID, &has_any); if(!has_any) { - throw cta::exception::UserError("Must specify at least one of the following search options: vid, fxid, fxidfile or archiveFileId"); + throw cta::exception::UserError("Must specify at least one of the following search options: vid, fxid, diskfileid, fxidfile or archiveFileId"); } m_tapeFileItor = m_catalogue.ArchiveFile()->getArchiveFilesItor(searchCriteria); -- GitLab From 470855bccdb0a62b0dc538a10b44fac65a3f1254 Mon Sep 17 00:00:00 2001 From: Joao Afonso <joao.afonso@cern.ch> Date: Mon, 24 Feb 2025 13:53:28 +0100 Subject: [PATCH 5/5] Implementing MR suggestions --- .../EosNamespaceInjection.cpp | 6 +++--- .../eos_namespace_injection/MetaData.hpp | 2 +- common/utils/utils.hpp | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp index a1c60dee1d..4d09c8dc4c 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/EosNamespaceInjection.cpp @@ -76,7 +76,7 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const { g_metaDataObjectCatalogue.size = std::to_string(item.af().size()); g_metaDataObjectCatalogue.storageClass = item.af().storage_class(); g_metaDataObjectCatalogue.creationTime = std::to_string(item.af().creation_time()); - g_metaDataObjectCatalogue.diskId = item.df().disk_id(); + g_metaDataObjectCatalogue.diskFileId = item.df().disk_id(); g_metaDataObjectCatalogue.diskInstance = item.df().disk_instance(); std::string checksumType("NONE"); @@ -445,10 +445,10 @@ bool EosNamespaceInjection::checkEosCtaConsistency(const uint64_t& archiveId, co std::list<cta::log::Param> params; params.push_back(cta::log::Param("archiveFileId", archiveId)); params.push_back(cta::log::Param("diskFileId in EOS for new file", newDiskFileId)); - params.push_back(cta::log::Param("diskFileId in Catalogue", g_metaDataObjectCatalogue.diskId)); + params.push_back(cta::log::Param("diskFileId in Catalogue", g_metaDataObjectCatalogue.diskFileId)); params.push_back(cta::log::Param("diskInstance in Catalogue", g_metaDataObjectCatalogue.diskInstance)); params.push_back(cta::log::Param("checksum", ctaChecksum)); - if(eosArchiveFileId == archiveId && eosChecksum == ctaChecksum && g_metaDataObjectCatalogue.diskId == newDiskFileId) { + if(eosArchiveFileId == archiveId && eosChecksum == ctaChecksum && g_metaDataObjectCatalogue.diskFileId == newDiskFileId) { m_log(cta::log::INFO, "File metadata in EOS and CTA matches", params); return true; } else { diff --git a/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp b/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp index c51caeb13c..0dd2867afb 100644 --- a/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp +++ b/cmdline/standalone_cli_tools/eos_namespace_injection/MetaData.hpp @@ -28,7 +28,7 @@ namespace cta::cliTool { struct MetaDataObject { std::string eosPath; std::string diskInstance; - std::string diskId; + std::string diskFileId; std::string creationTime; std::string archiveId; std::string size; diff --git a/common/utils/utils.hpp b/common/utils/utils.hpp index e6de2884bf..6860f947e9 100644 --- a/common/utils/utils.hpp +++ b/common/utils/utils.hpp @@ -501,16 +501,16 @@ std::list<std::string> commaSeparatedStringToList(const std::string& commaSepara std::string listToCommaSeparatedString(const std::list<std::string>& list); /** - * Converts a number from a decimal number to a hexidecimal number - * @param decimalNumberStr The number that will be transformed - * @return the hexadecimal version of the number + * Converts a number from decimal to hexadecimal representation + * @param decimalNumberStr String containing the decimal number that will be transformed + * @return the hexadecimal representation of the number */ std::string decimalToHexadecimal(const std::string& decimalNumberStr); /** - * Converts a number from a hexadecimal number to a decimal number - * @param hexadecimalNumberStr The number that will be transformed - * @return the decimal version of the number + * Converts a number from hexadecimal to decimal representation + * @param hexadecimalNumberStr String containing the hexadecimal number that will be transformed + * @return the decimal representation of the number */ std::string hexadecimalToDecimal(const std::string& hexadecimalNumberStr); -- GitLab