From 2c54240ab44ac4c6237eed0f9669057ab0ad17be Mon Sep 17 00:00:00 2001 From: Daniele Kruse <dkruse@cern.ch> Date: Thu, 18 Feb 2016 11:08:10 +0100 Subject: [PATCH] More work on the CLI plus added a new function getarchivefilebyid to the scheduler and the catalogue --- catalogue/Catalogue.hpp | 3 +- catalogue/DummyCatalogue.cpp | 7 +++++ catalogue/DummyCatalogue.hpp | 1 + catalogue/MockCatalogue.cpp | 7 +++++ catalogue/MockCatalogue.hpp | 1 + scheduler/Scheduler.cpp | 7 +++++ scheduler/Scheduler.hpp | 1 + xroot_plugins/XrdCtaFile.cpp | 57 ++++++++++++++++++++++++++++++++++++ 8 files changed, 83 insertions(+), 1 deletion(-) diff --git a/catalogue/Catalogue.hpp b/catalogue/Catalogue.hpp index 5542091332..afa3f71833 100644 --- a/catalogue/Catalogue.hpp +++ b/catalogue/Catalogue.hpp @@ -165,7 +165,8 @@ public: virtual std::list<cta::common::dataStructures::ArchiveFile> getArchiveFiles(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &id, const std::string &eosid, const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path) = 0; virtual cta::common::dataStructures::ArchiveFileSummary getArchiveFileSummary(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &id, const std::string &eosid, - const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path) = 0; + const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path) = 0; + virtual cta::common::dataStructures::ArchiveFile getArchiveFileById(const std::string &id) = 0; virtual void setDriveStatus(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &driveName, const bool up, const bool force) = 0; diff --git a/catalogue/DummyCatalogue.cpp b/catalogue/DummyCatalogue.cpp index 7cc94f4168..ece8e431bb 100644 --- a/catalogue/DummyCatalogue.cpp +++ b/catalogue/DummyCatalogue.cpp @@ -405,6 +405,13 @@ cta::common::dataStructures::ArchiveFileSummary cta::catalogue::DummyCatalogue:: const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path) { return cta::common::dataStructures::ArchiveFileSummary(); } + +//------------------------------------------------------------------------------ +// getArchiveFileById +//------------------------------------------------------------------------------ +cta::common::dataStructures::ArchiveFile cta::catalogue::DummyCatalogue::getArchiveFileById(const std::string &id){ + return cta::common::dataStructures::ArchiveFile(); +} //------------------------------------------------------------------------------ // setDriveStatus diff --git a/catalogue/DummyCatalogue.hpp b/catalogue/DummyCatalogue.hpp index 242e8f47b3..2522e9d7a9 100644 --- a/catalogue/DummyCatalogue.hpp +++ b/catalogue/DummyCatalogue.hpp @@ -138,6 +138,7 @@ public: const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); virtual cta::common::dataStructures::ArchiveFileSummary getArchiveFileSummary(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &id, const std::string &eosid, const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); + virtual cta::common::dataStructures::ArchiveFile getArchiveFileById(const std::string &id); virtual void setDriveStatus(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &driveName, const bool up, const bool force); /** diff --git a/catalogue/MockCatalogue.cpp b/catalogue/MockCatalogue.cpp index 4134a292cc..f6bb5da571 100644 --- a/catalogue/MockCatalogue.cpp +++ b/catalogue/MockCatalogue.cpp @@ -405,6 +405,13 @@ cta::common::dataStructures::ArchiveFileSummary cta::catalogue::MockCatalogue::g const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path) { return cta::common::dataStructures::ArchiveFileSummary(); } + +//------------------------------------------------------------------------------ +// getArchiveFileById +//------------------------------------------------------------------------------ +cta::common::dataStructures::ArchiveFile cta::catalogue::MockCatalogue::getArchiveFileById(const std::string &id){ + return cta::common::dataStructures::ArchiveFile(); +} //------------------------------------------------------------------------------ // setDriveStatus diff --git a/catalogue/MockCatalogue.hpp b/catalogue/MockCatalogue.hpp index 7958136b8a..528a7862ae 100644 --- a/catalogue/MockCatalogue.hpp +++ b/catalogue/MockCatalogue.hpp @@ -138,6 +138,7 @@ public: const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); virtual cta::common::dataStructures::ArchiveFileSummary getArchiveFileSummary(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &id, const std::string &eosid, const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); + virtual cta::common::dataStructures::ArchiveFile getArchiveFileById(const std::string &id); virtual void setDriveStatus(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &driveName, const bool up, const bool force); /** diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index ea18e726e5..8230d4ae55 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -658,6 +658,13 @@ cta::common::dataStructures::ArchiveFileSummary cta::Scheduler::getArchiveFileSu return cta::common::dataStructures::ArchiveFileSummary(); } +//------------------------------------------------------------------------------ +// getArchiveFileById +//------------------------------------------------------------------------------ +cta::common::dataStructures::ArchiveFile cta::Scheduler::getArchiveFileById(const std::string &id){ + return cta::common::dataStructures::ArchiveFile(); +} + //------------------------------------------------------------------------------ // readTest //------------------------------------------------------------------------------ diff --git a/scheduler/Scheduler.hpp b/scheduler/Scheduler.hpp index df2f6569a2..543b0f3243 100644 --- a/scheduler/Scheduler.hpp +++ b/scheduler/Scheduler.hpp @@ -210,6 +210,7 @@ public: const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); virtual cta::common::dataStructures::ArchiveFileSummary getArchiveFileSummary(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &id, const std::string &eosid, const std::string ©nb, const std::string &tapepool, const std::string &vid, const std::string &owner, const std::string &group, const std::string &storageclass, const std::string &path); + virtual cta::common::dataStructures::ArchiveFile getArchiveFileById(const std::string &id); virtual cta::common::dataStructures::ReadTestResult readTest(const cta::common::dataStructures::SecurityIdentity &requester, const std::string &driveName, const std::string &vid, const uint64_t firstFSeq, const uint64_t lastFSeq, const bool checkChecksum, const std::string &output, const std::string &tag) const; //when output=="null" discard the data read diff --git a/xroot_plugins/XrdCtaFile.cpp b/xroot_plugins/XrdCtaFile.cpp index 6f8e94a3f7..7447ec8c6e 100644 --- a/xroot_plugins/XrdCtaFile.cpp +++ b/xroot_plugins/XrdCtaFile.cpp @@ -1810,6 +1810,63 @@ void XrdProFile::xCom_listpendingarchives(const std::vector<std::string> &tokens void XrdProFile::xCom_listpendingretrieves(const std::vector<std::string> &tokens, const cta::common::dataStructures::SecurityIdentity &requester) { std::stringstream help; help << tokens[0] << " lpr/listpendingretrieves [--vid/-v <vid>] [--extended/-x]" << std::endl; + std::string vid = getOptionValue(tokens, "-v", "--vid"); + bool extended = hasOption(tokens, "-x", "--extended"); + std::map<std::string, std::list<cta::common::dataStructures::RetrieveJob> > result; + if(vid.empty()) { + result = m_scheduler->getPendingRetrieveJobs(requester); + } + else { + std::list<cta::common::dataStructures::RetrieveJob> list = m_scheduler->getPendingRetrieveJobs(requester, vid); + if(list.size()>0) { + result[vid] = list; + } + } + if(result.size()>0) { + if(extended) { + std::vector<std::vector<std::string>> responseTable; + std::vector<std::string> header = {"vid","id","copy no.","fseq","block id","size","user","group","instance","path","diskpool","diskpool throughput"}; + responseTable.push_back(header); + for(auto it = result.cbegin(); it != result.cend(); it++) { + for(auto jt = it->second.cbegin(); jt != it->second.cend(); jt++) { + std::vector<std::string> currentRow; + currentRow.push_back(it->first); + currentRow.push_back(jt->getRequest().getArchiveFileID()); + cta::common::dataStructures::ArchiveFile file = m_scheduler->getArchiveFileById(jt->getRequest().getArchiveFileID()); + currentRow.push_back(std::to_string((unsigned long long)jt->getTapeCopies()[it->first].first)); + currentRow.push_back(std::to_string((unsigned long long)jt->getTapeCopies()[it->first].second.getFSeq())); + currentRow.push_back(std::to_string((unsigned long long)jt->getTapeCopies()[it->first].second.getBlockId())); + currentRow.push_back(std::to_string((unsigned long long)file.getFileSize())); + currentRow.push_back(jt->getRequest().getRequester().getUserName()); + currentRow.push_back(jt->getRequest().getRequester().getGroupName()); + currentRow.push_back(jt->getRequest().getDrData().getDrInstance()); + currentRow.push_back(jt->getRequest().getDrData().getDrPath()); + currentRow.push_back(jt->getRequest().getDiskpoolName()); + currentRow.push_back(std::to_string((unsigned long long)jt->getRequest().getDiskpoolThroughput())); + responseTable.push_back(currentRow); + } + } + m_data = formatResponse(responseTable); + } + else { + std::vector<std::vector<std::string>> responseTable; + std::vector<std::string> header = {"vid","total files","total size"}; + responseTable.push_back(header); + for(auto it = result.cbegin(); it != result.cend(); it++) { + std::vector<std::string> currentRow; + currentRow.push_back(it->first); + currentRow.push_back(std::to_string((unsigned long long)it->second.size())); + uint64_t size=0; + for(auto jt = it->second.cbegin(); jt != it->second.cend(); jt++) { + cta::common::dataStructures::ArchiveFile file = m_scheduler->getArchiveFileById(jt->getRequest().getArchiveFileID()); + size += file.getFileSize(); + } + currentRow.push_back(std::to_string((unsigned long long)size)); + responseTable.push_back(currentRow); + } + m_data = formatResponse(responseTable); + } + } } //------------------------------------------------------------------------------ -- GitLab