From 017d0d64422cba840d6e53387cb7b17bc9b485a6 Mon Sep 17 00:00:00 2001 From: Lasse Tjernaes Wardenaer <lasse.tjernaes.wardenaer@cern.ch> Date: Mon, 12 Dec 2022 11:07:13 +0100 Subject: [PATCH] Resolve "Improve error message if vid does not exist when running cta-verify-file" --- ReleaseNotes.md | 1 + cmdline/standalone_cli_tools/CtaVerifyFile.cpp | 16 ++++++++++++++++ .../common/CatalogueFetch.cpp | 13 ++++++++----- .../common/CatalogueFetch.hpp | 4 ++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 6961f5a77c..3ab89ce756 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -2,6 +2,7 @@ ## Summary ### Features +- cta/CTA#224 - Improve error message for cta-verify-file whn VID does not exist ### Bug Fixes - cta/CTA#234 - Replace stoi with toUint64 in standalone cli tool diff --git a/cmdline/standalone_cli_tools/CtaVerifyFile.cpp b/cmdline/standalone_cli_tools/CtaVerifyFile.cpp index 1bc187e686..8113574bc3 100644 --- a/cmdline/standalone_cli_tools/CtaVerifyFile.cpp +++ b/cmdline/standalone_cli_tools/CtaVerifyFile.cpp @@ -31,6 +31,9 @@ using namespace cta::cliTool; const std::string g_config_file = "/etc/cta/cta-cli.conf"; +// Global variable from CtaCatalogueFetch +extern std::list<std::string> g_listedVids; + /* * Fill a Notification message from the command-line parameters and stdin * @@ -140,6 +143,17 @@ void sendVerifyRequest(const CmdLineArgs &cmdLineArgs, const std::string &archiv google::protobuf::ShutdownProtobufLibrary(); } +/* + * Checks if the provided vid exists + */ +void vidExists(const std::string &vid, const XrdSsiPb::Config &config) { + auto serviceProviderPtr = std::make_unique<XrdSsiPbServiceType>(config); + bool vidExists = CatalogueFetch::vidExists(vid, serviceProviderPtr); + + if(!vidExists) { + throw std::runtime_error("The provided --vid does not exist in the Catalogue."); + } +} /* * Sends a Notification to the CTA XRootD SSI server @@ -181,6 +195,8 @@ int exceptionThrowingMain(int argc, char *const *const argv) const XrdSsiPb::Config config = getConfig(); + vidExists(cmdLineArgs.m_vid.value(), config); + for(const auto &archiveFileId : archiveFileIds) { sendVerifyRequest(cmdLineArgs, archiveFileId, config); } diff --git a/cmdline/standalone_cli_tools/common/CatalogueFetch.cpp b/cmdline/standalone_cli_tools/common/CatalogueFetch.cpp index fa8b39c85d..1603166839 100644 --- a/cmdline/standalone_cli_tools/common/CatalogueFetch.cpp +++ b/cmdline/standalone_cli_tools/common/CatalogueFetch.cpp @@ -138,7 +138,7 @@ std::tuple<std::string,std::string> CatalogueFetch::getInstanceAndFid(const std: return listedTapeFile; } -std::list<std::string> CatalogueFetch::getVids(std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr, cta::log::StdoutLogger &log) { +bool CatalogueFetch::vidExists(const std::string &vid, std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr) { cta::xrd::Request request; auto admincmd = request.mutable_admincmd(); @@ -147,13 +147,16 @@ std::list<std::string> CatalogueFetch::getVids(std::unique_ptr<XrdSsiPbServiceTy admincmd->set_cmd(cta::admin::AdminCmd::CMD_TAPE); admincmd->set_subcmd(cta::admin::AdminCmd::SUBCMD_LS); - auto new_opt = admincmd->add_option_bool(); - new_opt->set_key(cta::admin::OptionBoolean::ALL); - new_opt->set_value(true); + auto new_opt = admincmd->add_option_str(); + new_opt->set_key(cta::admin::OptionString::VID); + new_opt->set_value(vid); handleResponse(request, serviceProviderPtr); - return g_listedVids; + if(g_listedVids.empty()) { + return false; + } + return true; } void CatalogueFetch::handleResponse(const cta::xrd::Request &request, std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr) { diff --git a/cmdline/standalone_cli_tools/common/CatalogueFetch.hpp b/cmdline/standalone_cli_tools/common/CatalogueFetch.hpp index 112711246b..a25f475238 100644 --- a/cmdline/standalone_cli_tools/common/CatalogueFetch.hpp +++ b/cmdline/standalone_cli_tools/common/CatalogueFetch.hpp @@ -50,9 +50,9 @@ public: * Fetches the vids form the CTA catalogue * * @param serviceProviderPtr Service provider for communication with the catalogue. - * @return A list of vids. + * @return True if vid exists, false if it does not exist */ - static std::list<std::string> getVids(std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr, cta::log::StdoutLogger &log); + static bool vidExists(const std::string &vid, std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr); private: static void handleResponse(const cta::xrd::Request &request, std::unique_ptr<XrdSsiPbServiceType> &serviceProviderPtr); -- GitLab