From abcb6f2bf9b55391ca6cf11ea19ecb4a6b8939ce Mon Sep 17 00:00:00 2001 From: Steven Murray <Steven.Murray@cern.ch> Date: Tue, 11 Dec 2018 19:43:33 +0100 Subject: [PATCH] Added '--vo' option to 'cta-admin tape ls' --- catalogue/CatalogueTest.cpp | 10 ++++++++++ catalogue/RdbmsCatalogue.cpp | 7 +++++++ catalogue/TapeSearchCriteria.hpp | 5 +++++ cmdline/CtaAdminCmdParse.hpp | 4 ++-- xroot_plugins/XrdSsiCtaRequestMessage.cpp | 1 + 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp index d735f50ae8..c7b3f4452d 100644 --- a/catalogue/CatalogueTest.cpp +++ b/catalogue/CatalogueTest.cpp @@ -2687,6 +2687,16 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) { ASSERT_EQ(tapePoolName, vidToTape.begin()->second.tapePoolName); } + { + catalogue::TapeSearchCriteria searchCriteria; + searchCriteria.vo = vo; + const std::list<common::dataStructures::Tape> tapes = m_catalogue->getTapes(searchCriteria); + ASSERT_EQ(nbTapes, tapes.size()); + const std::map<std::string, common::dataStructures::Tape> vidToTape = tapeListToMap(tapes); + ASSERT_EQ(nbTapes, vidToTape.size()); + ASSERT_EQ(vo, vidToTape.begin()->second.vo); + } + { catalogue::TapeSearchCriteria searchCriteria; searchCriteria.capacityInBytes = capacityInBytes; diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index f79411d820..972598b3e2 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -1893,6 +1893,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co searchCriteria.vendor || searchCriteria.logicalLibrary || searchCriteria.tapePool || + searchCriteria.vo || searchCriteria.capacityInBytes || searchCriteria.disabled || searchCriteria.full || @@ -1926,6 +1927,11 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co sql += " TAPE.TAPE_POOL_NAME = :TAPE_POOL_NAME"; addedAWhereConstraint = true; } + if(searchCriteria.vo) { + if(addedAWhereConstraint) sql += " AND "; + sql += " TAPE_POOL.VO = :VO"; + addedAWhereConstraint = true; + } if(searchCriteria.capacityInBytes) { if(addedAWhereConstraint) sql += " AND "; sql += " TAPE.CAPACITY_IN_BYTES = :CAPACITY_IN_BYTES"; @@ -1955,6 +1961,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co if(searchCriteria.vendor) stmt.bindString(":VENDOR", searchCriteria.vendor.value()); if(searchCriteria.logicalLibrary) stmt.bindString(":LOGICAL_LIBRARY_NAME", searchCriteria.logicalLibrary.value()); if(searchCriteria.tapePool) stmt.bindString(":TAPE_POOL_NAME", searchCriteria.tapePool.value()); + if(searchCriteria.vo) stmt.bindString(":VO", searchCriteria.vo.value()); if(searchCriteria.capacityInBytes) stmt.bindUint64(":CAPACITY_IN_BYTES", searchCriteria.capacityInBytes.value()); if(searchCriteria.disabled) stmt.bindBool(":IS_DISABLED", searchCriteria.disabled.value()); if(searchCriteria.full) stmt.bindBool(":IS_FULL", searchCriteria.full.value()); diff --git a/catalogue/TapeSearchCriteria.hpp b/catalogue/TapeSearchCriteria.hpp index 65ec7e90bf..3a00bcbf1b 100644 --- a/catalogue/TapeSearchCriteria.hpp +++ b/catalogue/TapeSearchCriteria.hpp @@ -61,6 +61,11 @@ struct TapeSearchCriteria { */ optional<std::string> tapePool; + /** + * The virtual organisation that owns a tape. + */ + optional<std::string> vo; + /** * The capacity of a tape in bytes */ diff --git a/cmdline/CtaAdminCmdParse.hpp b/cmdline/CtaAdminCmdParse.hpp index 5a3ac42e44..2173ed4e73 100644 --- a/cmdline/CtaAdminCmdParse.hpp +++ b/cmdline/CtaAdminCmdParse.hpp @@ -503,8 +503,8 @@ const std::map<cmd_key_t, cmd_val_t> cmdOptions = { {{ AdminCmd::CMD_TAPE, AdminCmd::SUBCMD_RECLAIM }, { opt_vid }}, {{ AdminCmd::CMD_TAPE, AdminCmd::SUBCMD_LS }, { opt_header.optional(), opt_vid.optional(), opt_mediatype.optional(), opt_vendor.optional(), - opt_logicallibrary.optional(), opt_tapepool.optional(), opt_capacity.optional(), opt_lbp.optional(), - opt_disabled.optional(), opt_full.optional(), opt_all.optional() }}, + opt_logicallibrary.optional(), opt_tapepool.optional(), opt_vo.optional(), opt_capacity.optional(), + opt_lbp.optional(), opt_disabled.optional(), opt_full.optional(), opt_all.optional() }}, {{ AdminCmd::CMD_TAPE, AdminCmd::SUBCMD_LABEL }, { opt_vid, opt_force.optional(), opt_lbp.optional() }}, {{ AdminCmd::CMD_TAPEPOOL, AdminCmd::SUBCMD_ADD }, diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.cpp b/xroot_plugins/XrdSsiCtaRequestMessage.cpp index 4d8f607c56..00b324f9e9 100644 --- a/xroot_plugins/XrdSsiCtaRequestMessage.cpp +++ b/xroot_plugins/XrdSsiCtaRequestMessage.cpp @@ -1830,6 +1830,7 @@ void RequestMessage::processTape_Ls(const cta::admin::AdminCmd &admincmd, cta::x searchCriteria.capacityInBytes = getOptional(OptionUInt64::CAPACITY, &has_any); searchCriteria.logicalLibrary = getOptional(OptionString::LOGICAL_LIBRARY, &has_any); searchCriteria.tapePool = getOptional(OptionString::TAPE_POOL, &has_any); + searchCriteria.vo = getOptional(OptionString::VO, &has_any); searchCriteria.vid = getOptional(OptionString::VID, &has_any); searchCriteria.mediaType = getOptional(OptionString::MEDIA_TYPE, &has_any); searchCriteria.vendor = getOptional(OptionString::VENDOR, &has_any); -- GitLab