From 961efa5f6772ccf6954a99d4ac88a6ab55d4ffd5 Mon Sep 17 00:00:00 2001 From: Lasse Tjernaes Wardenaer <lasse.tjernaes.wardenaer@cern.ch> Date: Mon, 7 Nov 2022 13:48:24 +0100 Subject: [PATCH] Resolve "Change handeling of multilple fids as input to the cta-restore-files tool" --- .../standalone_cli_tools/common/CmdLineArgs.cpp | 17 ++++++++++------- .../standalone_cli_tools/common/CmdLineArgs.hpp | 4 ++-- .../restore_files/RestoreFilesCmd.cpp | 17 ++++++++++++++--- .../restore_files/RestoreFilesCmd.hpp | 2 +- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/cmdline/standalone_cli_tools/common/CmdLineArgs.cpp b/cmdline/standalone_cli_tools/common/CmdLineArgs.cpp index 4413ea365c..752f0e817a 100644 --- a/cmdline/standalone_cli_tools/common/CmdLineArgs.cpp +++ b/cmdline/standalone_cli_tools/common/CmdLineArgs.cpp @@ -35,7 +35,7 @@ namespace cliTool{ static struct option restoreFilesLongOption[] = { {"id", required_argument, nullptr, 'I'}, {"instance", required_argument, nullptr, 'i'}, - {"fxid", required_argument, nullptr, 'f'}, + {"fid", required_argument, nullptr, 'f'}, {"filename", required_argument, nullptr, 'F'}, {"vid", required_argument, nullptr, 'v'}, {"copynb", required_argument, nullptr, 'c'}, @@ -117,10 +117,10 @@ m_help(false), m_debug(false), m_standaloneCliTool{standaloneCliTool} { } case 'f': { - if (! m_fxIds) { - m_fxIds = std::list<std::string>(); + if (! m_fids) { + m_fids = std::list<std::string>(); } - m_fxIds->push_back(optarg); + m_fids->push_back(optarg); break; } case 'F': @@ -211,7 +211,10 @@ void CmdLineArgs::readIdListFromFile(const std::string &filename) { while(file >> line) { switch (m_standaloneCliTool) { case StandaloneCliTool::RESTORE_FILES: - m_archiveFileIds.value().push_back(line); + if (!m_fids) { + m_fids = std::list<std::string>(); + } + m_fids.value().push_back(line); break; case StandaloneCliTool::CTA_VERIFY_FILE: if (!m_archiveFileIds) { @@ -239,8 +242,8 @@ void CmdLineArgs::printUsage(std::ostream &os) const { case StandaloneCliTool::RESTORE_FILES: os << " Usage:" << std::endl << " cta-restore-deleted-files [--id/-I <archive_file_id>] [--instance/-i <disk_instance>]" << std::endl << - " [--fxid/-f <eos_fxid>] [--fxidfile/-F <filename>]" << std::endl << - " [--vid/-v <vid>] [--copynb/-c <copy_number>] [--debug/-d]" << std::endl << std::endl; + " [--fid/-f <eos_fxid>] [--filename/-F <filename>]" << std::endl << + " [--vid/-v <vid>] [--copynb/-c <copy_number>] [--debug/-d]" << std::endl; break; case StandaloneCliTool::CTA_SEND_EVENT: os << " Usage:" << std::endl << diff --git a/cmdline/standalone_cli_tools/common/CmdLineArgs.hpp b/cmdline/standalone_cli_tools/common/CmdLineArgs.hpp index 5602f1dada..eb8c3f65e2 100644 --- a/cmdline/standalone_cli_tools/common/CmdLineArgs.hpp +++ b/cmdline/standalone_cli_tools/common/CmdLineArgs.hpp @@ -67,9 +67,9 @@ struct CmdLineArgs { std::optional<std::string> m_diskInstance; /** - * Fxids of the files to restore + * Fids of the files to restore */ - std::optional<std::list<std::string>> m_fxIds; + std::optional<std::list<std::string>> m_fids; /** * Vid of the tape of the files to restore diff --git a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp index 100e06aec4..0feb232895 100644 --- a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp +++ b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.cpp @@ -81,6 +81,13 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const deletedTapeFiles.push_back(item); } break; + case Data::kTflsItem: + { + const auto item = record.tfls_item(); + const auto instanceAndFid = std::make_pair(item.df().disk_instance(), item.df().disk_id()); + listedTapeFiles.push_back(instanceAndFid); + } + break; default: throw std::runtime_error("Received invalid stream data from CTA Frontend for the cta-restore-deleted-files command."); } @@ -183,7 +190,7 @@ void RestoreFilesCmd::readAndSetConfiguration( m_vid = cmdLineArgs.m_vid; m_diskInstance = cmdLineArgs.m_diskInstance; - m_archiveFileIds = cmdLineArgs.m_archiveFileIds; + m_fids = cmdLineArgs.m_fids; m_copyNumber = cmdLineArgs.m_copyNumber; m_archiveFileId = cmdLineArgs.m_archiveFileId; @@ -193,6 +200,10 @@ void RestoreFilesCmd::readAndSetConfiguration( m_log.setLogMask("INFO"); } + if (m_fids && !m_diskInstance) { + throw XrdSsiPb::UserException("Disk instance must be provided when fids are used as input."); + } + // Set CTA frontend configuration options const std::string cli_config_file = "/etc/cta/cta-cli.conf"; XrdSsiPb::Config cliConfig(cli_config_file, "cta"); @@ -311,12 +322,12 @@ void RestoreFilesCmd::listDeletedFilesCta() const { new_opt->set_key(key); new_opt->set_value(m_copyNumber.value()); } - if (m_archiveFileIds) { + if (m_fids) { std::stringstream ss; auto key = cta::admin::OptionStrList::FILE_ID; auto new_opt = admincmd.add_option_str_list(); new_opt->set_key(key); - for (auto &fid : m_archiveFileIds.value()) { + for (const auto &fid : m_fids.value()) { new_opt->add_item(fid); ss << fid << ","; } diff --git a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.hpp b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.hpp index e88a6a4019..1c269ffdeb 100644 --- a/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.hpp +++ b/cmdline/standalone_cli_tools/restore_files/RestoreFilesCmd.hpp @@ -184,7 +184,7 @@ private: /** * Fids of the files to restore */ - std::optional<std::list<std::string>> m_archiveFileIds; + std::optional<std::list<std::string>> m_fids; /** * Vid of the tape of the files to restore -- GitLab