From 6da3a26079f9f1037ae6ad3f94aa91c8076b14a4 Mon Sep 17 00:00:00 2001
From: Eric Cano <Eric.Cano@cern.ch>
Date: Mon, 29 Jun 2015 10:23:25 +0200
Subject: [PATCH] Added support for size in
 Scheduler::createArchiveToFileRequest.

---
 scheduler/ArchiveToFileRequest.cpp | 4 +++-
 scheduler/ArchiveToFileRequest.hpp | 6 ++++++
 scheduler/OStoreDB/OStoreDB.cpp    | 6 +++++-
 scheduler/Scheduler.cpp            | 2 ++
 scheduler/Scheduler.hpp            | 4 ++--
 5 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/scheduler/ArchiveToFileRequest.cpp b/scheduler/ArchiveToFileRequest.cpp
index a178a0fa6c..c32bb41469 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> &copyNbToPoolMap,
   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 f88762bc42..690ca09fc2 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> &copyNbToPoolMap,
     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 1dcf24f11e..611021f5a3 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 4d337a215d..f2cd8faf46 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 d64d81d286..552492eb8f 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.
-- 
GitLab