diff --git a/objectstore/AlgorithmsTest.cpp b/objectstore/AlgorithmsTest.cpp index 5755b388dd26b398f983f03ee9f2f0c39dbed195..994ba2ced8598588e370e444fb97f495032b067e 100644 --- a/objectstore/AlgorithmsTest.cpp +++ b/objectstore/AlgorithmsTest.cpp @@ -116,7 +116,7 @@ TEST(ObjectStore, ArchiveQueueAlgorithms) { rel.release(); agent.initialize(); agent.insertAndRegisterSelf(lc); - ContainerAlgorithms<ArchiveQueue,ArchiveQueue>::InsertedElement::list requests; + ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer>::InsertedElement::list requests; std::list<std::unique_ptr<cta::objectstore::ArchiveRequest>> archiveRequests; for (size_t i=0; i<10; i++) { std::string arAddr = agentRef.nextId("ArchiveRequest"); @@ -135,7 +135,7 @@ TEST(ObjectStore, ArchiveQueueAlgorithms) { aFile.fileSize = 667; aFile.storageClass = "sc"; archiveRequests.emplace_back(new cta::objectstore::ArchiveRequest(arAddr, be)); - requests.emplace_back(ContainerAlgorithms<ArchiveQueue,ArchiveQueue>::InsertedElement{archiveRequests.back().get(), 1, aFile, mp, + requests.emplace_back(ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer>::InsertedElement{archiveRequests.back().get(), 1, aFile, mp, cta::nullopt}); auto & ar=*requests.back().archiveRequest; auto copyNb = requests.back().copyNb; @@ -150,10 +150,10 @@ TEST(ObjectStore, ArchiveQueueAlgorithms) { ar.setEntryLog(cta::common::dataStructures::EntryLog("user0", "host0", time(nullptr))); ar.insert(); } - ContainerAlgorithms<ArchiveQueue,ArchiveQueue> archiveAlgos(be, agentRef); + ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer> archiveAlgos(be, agentRef); archiveAlgos.referenceAndSwitchOwnership("Tapepool", QueueType::JobsToTransfer, requests, lc); // Now get the requests back - ContainerTraits<ArchiveQueue,ArchiveQueue>::PopCriteria popCriteria; + ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::PopCriteria popCriteria; popCriteria.bytes = std::numeric_limits<decltype(popCriteria.bytes)>::max(); popCriteria.files = 100; auto poppedJobs = archiveAlgos.popNextBatch("Tapepool", QueueType::JobsToTransfer, popCriteria, lc); diff --git a/objectstore/ArchiveQueue.hpp b/objectstore/ArchiveQueue.hpp index 39496420d3d297747de2fdd3f9450b4de8126f51..316614e8baedccc19055d5f0f40a6792e71ba5ea 100644 --- a/objectstore/ArchiveQueue.hpp +++ b/objectstore/ArchiveQueue.hpp @@ -138,6 +138,11 @@ public: static const uint64_t c_maxShardSize = 25000; }; +class ArchiveQueueToTransfer: public ArchiveQueue { +public: + template<typename...Ts> ArchiveQueueToTransfer(Ts&...args): ArchiveQueue(args...) {} +}; + class ArchiveQueueToReport: public ArchiveQueue { public: template<typename...Ts> ArchiveQueueToReport(Ts&...args): ArchiveQueue(args...) {} diff --git a/objectstore/ArchiveQueueAlgorithms.hpp b/objectstore/ArchiveQueueAlgorithms.hpp index bf73ebdd5f4828a71f481b5d2d649d442cc0a622..8000d515d7ea5614d8990c09260f8ee360a79e55 100644 --- a/objectstore/ArchiveQueueAlgorithms.hpp +++ b/objectstore/ArchiveQueueAlgorithms.hpp @@ -437,7 +437,7 @@ getElementSummary(const PoppedElement& poppedElement) -> PoppedElementsSummary { // ArchiveQueue full specialisations for ContainerTraits. template<> -struct ContainerTraits<ArchiveQueue,ArchiveQueue>::PopCriteria { +struct ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::PopCriteria { uint64_t files; uint64_t bytes; PopCriteria(uint64_t f = 0, uint64_t b = 0) : files(f), bytes(b) {} @@ -450,7 +450,7 @@ struct ContainerTraits<ArchiveQueue,ArchiveQueue>::PopCriteria { }; template<> -struct ContainerTraits<ArchiveQueue,ArchiveQueue>::PoppedElementsSummary { +struct ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::PoppedElementsSummary { uint64_t files; uint64_t bytes; PoppedElementsSummary(uint64_t f = 0, uint64_t b = 0) : files(f), bytes(b) {} diff --git a/objectstore/ArchiveQueueAlgorithms.cpp b/objectstore/ArchiveQueueToTransferAlgorithms.cpp similarity index 81% rename from objectstore/ArchiveQueueAlgorithms.cpp rename to objectstore/ArchiveQueueToTransferAlgorithms.cpp index 11187d64d89feb4c60b533147222b3c51b76b71a..bc2cdb574cc414d33819d4f8b44a57fe13b1705c 100644 --- a/objectstore/ArchiveQueueAlgorithms.cpp +++ b/objectstore/ArchiveQueueToTransferAlgorithms.cpp @@ -24,13 +24,13 @@ namespace cta { namespace objectstore { // ArchiveQueue full specialisations for ContainerTraits. template<> -const std::string ContainerTraits<ArchiveQueue,ArchiveQueue>::c_containerTypeName = "ArchiveQueue"; +const std::string ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::c_containerTypeName = "ArchiveQueueToTransfer"; template<> -const std::string ContainerTraits<ArchiveQueue,ArchiveQueue>::c_identifierType = "tapepool"; +const std::string ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::c_identifierType = "tapepool"; template<> -auto ContainerTraits<ArchiveQueue,ArchiveQueue>:: +auto ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>:: getContainerSummary(Container& cont) -> ContainerSummary { ContainerSummary ret; ret.JobsSummary::operator=(cont.getJobsSummary()); @@ -38,7 +38,7 @@ getContainerSummary(Container& cont) -> ContainerSummary { } template<> -auto ContainerTraits<ArchiveQueue,ArchiveQueue>:: +auto ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>:: getPoppingElementsCandidates(Container &cont, PopCriteria &unfulfilledCriteria, ElementsToSkipSet &elemtsToSkip, log::LogContext& lc) -> PoppedElementsBatch { @@ -54,7 +54,7 @@ getPoppingElementsCandidates(Container &cont, PopCriteria &unfulfilledCriteria, } template<> -auto ContainerTraits<ArchiveQueue,ArchiveQueue>:: +auto ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>:: getElementSummary(const PoppedElement& poppedElement) -> PoppedElementsSummary { PoppedElementsSummary ret; ret.bytes = poppedElement.bytes; @@ -63,14 +63,14 @@ getElementSummary(const PoppedElement& poppedElement) -> PoppedElementsSummary { } template<> -void ContainerTraits<ArchiveQueue,ArchiveQueue>::PoppedElementsBatch:: +void ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>::PoppedElementsBatch:: addToLog(log::ScopedParamContainer ¶ms) { params.add("bytes", summary.bytes) .add("files", summary.files); } template<> -void ContainerTraits<ArchiveQueue,ArchiveQueue>:: +void ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>:: trimContainerIfNeeded(Container &cont, ScopedExclusiveLock &contLock, const ContainerIdentifier &cId, log::LogContext &lc) { diff --git a/objectstore/CMakeLists.txt b/objectstore/CMakeLists.txt index f9191d871fd782581fa6352cbd9deaa351591329..e2fd1247e3428fb155ab3ace6afcbf9c73ba8629 100644 --- a/objectstore/CMakeLists.txt +++ b/objectstore/CMakeLists.txt @@ -60,9 +60,9 @@ add_library (ctaobjectstore SHARED AgentWatchdog.cpp ArchiveQueue.cpp ArchiveQueueShard.cpp - ArchiveQueueAlgorithms.cpp - ArchiveQueueFailedAlgorithms.cpp + ArchiveQueueToTransferAlgorithms.cpp ArchiveQueueToReportAlgorithms.cpp + ArchiveQueueFailedAlgorithms.cpp RetrieveQueue.cpp RetrieveQueueShard.cpp RetrieveQueueAlgorithms.cpp diff --git a/objectstore/GarbageCollector.cpp b/objectstore/GarbageCollector.cpp index a31ee5d1a8e26220f9d27d0d30a14f2eb5753e1a..8f5fa13d50eddeeb62c72e4a00c6384fcd042b4a 100644 --- a/objectstore/GarbageCollector.cpp +++ b/objectstore/GarbageCollector.cpp @@ -399,7 +399,7 @@ void GarbageCollector::OwnedObjectSorter::lockFetchAndUpdateArchiveJobs(Agent& a requestsList.pop_front(); } utils::Timer t; - typedef ContainerAlgorithms<ArchiveQueue,ArchiveQueue> AqAlgos; + typedef ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer> AqAlgos; AqAlgos aqcl(objectStore, agentReference); decltype(aqcl)::InsertedElement::list jobsToAdd; for (auto & ar: currentJobBatch) { diff --git a/objectstore/ObjectOps.hpp b/objectstore/ObjectOps.hpp index 6d760f5b5d998b2cb5a78f5b1dfdf6f84b98add3..79aa62a7ac8ed896082e35e16aed06d9961b877c 100644 --- a/objectstore/ObjectOps.hpp +++ b/objectstore/ObjectOps.hpp @@ -33,7 +33,10 @@ class AgentReference; class ScopedLock; class ScopedExclusiveLock; template<typename Q,typename C> struct ContainerTraits; + +// Defined queue types struct ArchiveQueue; +struct ArchiveQueueToTransfer; struct ArchiveQueueToReport; struct ArchiveQueueFailed; struct RetrieveQueue; @@ -44,7 +47,7 @@ class ObjectOpsBase { friend class ScopedExclusiveLock; friend class GenericObject; friend class Helpers; - friend ContainerTraits<ArchiveQueue,ArchiveQueue>; + friend ContainerTraits<ArchiveQueue,ArchiveQueueToTransfer>; friend ContainerTraits<ArchiveQueue,ArchiveQueueToReport>; friend ContainerTraits<ArchiveQueue,ArchiveQueueFailed>; friend ContainerTraits<RetrieveQueue,RetrieveQueue>; diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp index 57bc414836cfe7ae96b263f2d60a20e87892f6df..95f56877de68d85c1907d937e716d6a39d23da04 100644 --- a/scheduler/OStoreDB/OStoreDB.cpp +++ b/scheduler/OStoreDB/OStoreDB.cpp @@ -1742,7 +1742,7 @@ const SchedulerDatabase::ArchiveMount::MountInfo& OStoreDB::ArchiveMount::getMou //------------------------------------------------------------------------------ std::list<std::unique_ptr<SchedulerDatabase::ArchiveJob> > OStoreDB::ArchiveMount::getNextJobBatch(uint64_t filesRequested, uint64_t bytesRequested, log::LogContext& logContext) { - typedef objectstore::ContainerAlgorithms<ArchiveQueue,ArchiveQueue> AQAlgos; + typedef objectstore::ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer> AQAlgos; AQAlgos aqAlgos(m_oStoreDB.m_objectStore, *m_oStoreDB.m_agentReference); AQAlgos::PopCriteria popCriteria(filesRequested, bytesRequested); auto jobs = aqAlgos.popNextBatch(mountInfo.tapePool, objectstore::QueueType::JobsToTransfer, popCriteria, logContext); @@ -2137,7 +2137,7 @@ void OStoreDB::ArchiveJob::failTransfer(const std::string& failureReason, log::L auto retryStatus = m_archiveRequest.getRetryStatus(tapeFile.copyNb); m_archiveRequest.commit(); arl.release(); - typedef objectstore::ContainerAlgorithms<ArchiveQueue,ArchiveQueue> CaAqtr; + typedef objectstore::ContainerAlgorithms<ArchiveQueue,ArchiveQueueToTransfer> CaAqtr; CaAqtr caAqtr(m_oStoreDB.m_objectStore, *m_oStoreDB.m_agentReference); CaAqtr::InsertedElement::list insertedElements; insertedElements.push_back(CaAqtr::InsertedElement{&m_archiveRequest, tapeFile.copyNb, archiveFile, cta::nullopt, cta::nullopt });