From f7dc194d11c13b8747132a7e245196c196175c10 Mon Sep 17 00:00:00 2001 From: Eric Cano <Eric.Cano@cern.ch> Date: Fri, 30 Jun 2017 10:37:35 +0200 Subject: [PATCH] Minor fixes and entensions to Scheduler::getQueuesAndMountSummaries(). Added tape statistics for retrieves. Added oldest jobs age. --- .../dataStructures/QueueAndMountSummary.hpp | 1 + scheduler/Scheduler.cpp | 36 ++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/common/dataStructures/QueueAndMountSummary.hpp b/common/dataStructures/QueueAndMountSummary.hpp index 39729bf7bd..c35449adca 100644 --- a/common/dataStructures/QueueAndMountSummary.hpp +++ b/common/dataStructures/QueueAndMountSummary.hpp @@ -35,6 +35,7 @@ struct QueueAndMountSummary { std::string vid; uint64_t filesQueued=0; uint64_t bytesQueued=0; + time_t oldestJobAge=0; MountPolicy mountPolicy; uint64_t currentMounts=0; uint64_t currentFiles=0; diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index fd9bccccc8..c7aa563cc4 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -672,6 +672,7 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM summary.mountPolicy.maxDrivesAllowed = pm.maxDrivesAllowed; summary.bytesQueued = pm.bytesQueued; summary.filesQueued = pm.filesQueued; + summary.oldestJobAge = pm.oldestJobStartTime - time(nullptr); break; case common::dataStructures::MountType::Retrieve: // TODO: we should remove the retrieveMinRequestAge if it's redundant, or rename pm.minArchiveRequestAge. @@ -680,6 +681,7 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM summary.mountPolicy.maxDrivesAllowed = pm.maxDrivesAllowed; summary.bytesQueued = pm.bytesQueued; summary.filesQueued = pm.filesQueued; + summary.oldestJobAge = pm.oldestJobStartTime - time(nullptr); break; default: break; @@ -704,19 +706,37 @@ std::list<common::dataStructures::QueueAndMountSummary> Scheduler::getQueuesAndM } mountDecisionInfo.reset(); // Add the tape information where useful (archive queues). - for (auto & tp: ret) { - if (common::dataStructures::MountType::Archive==tp.mountType) { + for (auto & mountOrQueue: ret) { + if (common::dataStructures::MountType::Archive==mountOrQueue.mountType) { // Get all the tape for this pool cta::catalogue::TapeSearchCriteria tsc; - tsc.tapePool = tp.tapePool; + tsc.tapePool = mountOrQueue.tapePool; auto tapes=m_catalogue.getTapes(tsc); for (auto & t:tapes) { - tp.tapesCapacity += t.capacityInBytes; - tp.dataOnTapes += t.dataOnTapeInBytes; - if (t.disabled) tp.disabledTapes++; - if (t.full) tp.fullTapes++; - if (!t.full && t.disabled) tp.writableTapes++; + mountOrQueue.tapesCapacity += t.capacityInBytes; + mountOrQueue.dataOnTapes += t.dataOnTapeInBytes; + if (!t.dataOnTapeInBytes) + mountOrQueue.emptyTapes++; + if (t.disabled) mountOrQueue.disabledTapes++; + if (t.full) mountOrQueue.fullTapes++; + if (!t.full && t.disabled) mountOrQueue.writableTapes++; } + } else if (common::dataStructures::MountType::Retrieve==mountOrQueue.mountType) { + // Get info for this tape. + cta::catalogue::TapeSearchCriteria tsc; + tsc.vid = mountOrQueue.vid; + auto tapes=m_catalogue.getTapes(tsc); + if (tapes.size() != 1) { + throw cta::exception::Exception("In Scheduler::getQueuesAndMountSummaries(): got unexpected number of tapes from catalogue for a retrieve."); + } + auto &t=tapes.front(); + mountOrQueue.tapesCapacity += t.capacityInBytes; + mountOrQueue.dataOnTapes += t.dataOnTapeInBytes; + if (!t.dataOnTapeInBytes) + mountOrQueue.emptyTapes++; + if (t.disabled) mountOrQueue.disabledTapes++; + if (t.full) mountOrQueue.fullTapes++; + if (!t.full && t.disabled) mountOrQueue.writableTapes++; } } return ret; -- GitLab