diff --git a/scheduler/ArchiveToFileRequest.cpp b/scheduler/ArchiveToFileRequest.cpp index a178a0fa6cbb6bab4abf090e04dc856bb467963a..c32bb41469f6dfc95c476ce904b8db49a8b8523a 100644 --- a/scheduler/ArchiveToFileRequest.cpp +++ b/scheduler/ArchiveToFileRequest.cpp @@ -36,13 +36,15 @@ cta::ArchiveToFileRequest::~ArchiveToFileRequest() throw() { cta::ArchiveToFileRequest::ArchiveToFileRequest( const std::string &remoteFile, const std::string &archiveFile, + const uint64_t size, const std::map<uint16_t, std::string> ©NbToPoolMap, const uint64_t priority, const CreationLog & creationLog): ArchiveRequest(priority, creationLog), m_remoteFile(remoteFile), m_archiveFile(archiveFile), - m_copyNbToPoolMap(copyNbToPoolMap) { + m_copyNbToPoolMap(copyNbToPoolMap), + m_size(size) { } //------------------------------------------------------------------------------ diff --git a/scheduler/ArchiveToFileRequest.hpp b/scheduler/ArchiveToFileRequest.hpp index f88762bc42637aa80b24ae459e860dd7afd47919..690ca09fc2dbfd066bc8a105cfe273516720d79f 100644 --- a/scheduler/ArchiveToFileRequest.hpp +++ b/scheduler/ArchiveToFileRequest.hpp @@ -59,6 +59,7 @@ public: ArchiveToFileRequest( const std::string &remoteFile, const std::string &archiveFile, + const uint64_t size, const std::map<uint16_t, std::string> ©NbToPoolMap, const uint64_t priority, const CreationLog & creationLog); @@ -101,6 +102,11 @@ private: */ std::map<uint16_t, std::string> m_copyNbToPoolMap; + /** + * The size of the file. + */ + uint64_t m_size; + }; // class ArchiveToFileRequest } // namespace cta diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp index 1dcf24f11ea3caa66311201322717d1b0bce82b3..611021f5a32d7ec5d39121bccb849916aa673a14 100644 --- a/scheduler/OStoreDB/OStoreDB.cpp +++ b/scheduler/OStoreDB/OStoreDB.cpp @@ -415,11 +415,15 @@ void OStoreDB::queue(const cta::ArchiveToFileRequest& rqst) { ScopedSharedLock rel(re); re.fetch(); auto & cl = rqst.getCopyNbToPoolMap(); + std::list<cta::objectstore::ArchiveToFileRequest::JobDump> jl; for (auto copy=cl.begin(); copy != cl.end(); copy++) { std::string tpaddr = re.getTapePoolAddress(copy->second); atfr.addJob(copy->first, copy->second, tpaddr); + jl.push_back(cta::objectstore::ArchiveToFileRequest::JobDump()); + jl.back().copyNb = copy->first; + jl.back().tapePool = copy->second; + jl.back().tapePoolAddress = tpaddr; } - auto jl = atfr.dumpJobs(); if (!jl.size()) { throw ArchiveRequestHasNoCopies("In OStoreDB::queue: the archive to file request has no copy"); } diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index 4d337a215db7260fe510712fc75d897f98ce3fe4..f2cd8faf4621a85d04e8a3f8869ea64fa64c7e62 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -620,11 +620,13 @@ cta::ArchiveToFileRequest cta::Scheduler::createArchiveToFileRequest( assertStorageClassHasAtLeastOneCopy(storageClass); const auto routes = m_db.getArchivalRoutes(storageClassName); const auto copyNbToPoolMap = createCopyNbToPoolMap(routes); + const auto fileInfo = m_remoteNS.statFile(remoteFile); const CreationLog log(requester.getUser(), requester.getHost(), time(NULL), ""); return ArchiveToFileRequest( remoteFile, archiveFile, + fileInfo.getSize(), copyNbToPoolMap, priority, log); diff --git a/scheduler/Scheduler.hpp b/scheduler/Scheduler.hpp index d64d81d28638c6701a35312957242936a32510ca..552492eb8fa86498f9783296fa85fc1a22f31635 100644 --- a/scheduler/Scheduler.hpp +++ b/scheduler/Scheduler.hpp @@ -614,7 +614,7 @@ private: * The name space of the remote storage system. */ RemoteNS &m_remoteNS; - + /** * Queues the specified request to archive one or more remote files to an * archive directory. @@ -642,7 +642,7 @@ private: */ void assertStorageClassHasAtLeastOneCopy( const StorageClass &storageClass) const; - + /** * Returns the list of ArchiveToFileRequest objects representing the specified * request to archive multiple files to an archive directory.