diff --git a/scheduler/MockSchedulerDatabase.cpp b/scheduler/MockSchedulerDatabase.cpp index 2b60ea6b7a73c8e4b75fa77c2897d81060cebb85..3c371a5532271b48216199bc7f0fcf8c9d978054 100644 --- a/scheduler/MockSchedulerDatabase.cpp +++ b/scheduler/MockSchedulerDatabase.cpp @@ -20,6 +20,7 @@ #include "nameserver/NameServer.hpp" #include "scheduler/AdminHost.hpp" #include "scheduler/AdminUser.hpp" +#include "scheduler/ArchiveToDirRequest.hpp" #include "scheduler/ArchiveToFileRequest.hpp" #include "scheduler/ArchiveToTapeCopyRequest.hpp" #include "scheduler/ArchivalRoute.hpp" @@ -188,7 +189,10 @@ cta::MockSchedulerDatabase::~MockSchedulerDatabase() throw() { // queue //------------------------------------------------------------------------------ void cta::MockSchedulerDatabase::queue(const ArchiveToDirRequest &rqst) { - throw exception::Exception(std::string(__FUNCTION__) + " not implemented"); + for(auto itor = rqst.getArchiveToFileRequests().cbegin(); + itor != rqst.getArchiveToFileRequests().cend(); itor++) { + queue(*itor); + } } //------------------------------------------------------------------------------ diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index a7a556738e38a6fa66f0cd1cd85c420e7c1f5c0d..d80efea83becfe37b4a3271dff007c6a2557a57f 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -443,6 +443,7 @@ void cta::Scheduler::queueArchiveRequest( const SecurityIdentity &requester, const std::list<std::string> &remoteFiles, const std::string &archiveFileOrDir) { + const bool archiveToDir = m_ns.dirExists(requester, archiveFileOrDir); if(archiveToDir) { const std::string &archiveDir = archiveFileOrDir; @@ -479,17 +480,29 @@ void cta::Scheduler::queueArchiveToDirRequest( const std::list<std::string> &remoteFiles, const std::string &archiveDir) { + const uint64_t priority = 0; // TO BE DONE + const auto storageClassName = m_ns.getDirStorageClass(requester, archiveDir); const auto storageClass = m_db.getStorageClass(storageClassName); assertStorageClassHasAtLeastOneCopy(storageClass); const bool archiveDirEndsWithASlash = Utils::endsWith(archiveDir, '/'); + std::list<ArchiveToFileRequest> archiveToFileRequests; for(auto itor = remoteFiles.cbegin(); itor != remoteFiles.cend(); itor++) { const auto remoteFile = *itor; const auto remoteFileName = Utils::getEnclosedName(remoteFile); const std::string archiveFile = archiveDirEndsWithASlash ? archiveDir + remoteFileName : archiveDir + '/' + remoteFileName; - queueArchiveToFileRequest(requester, remoteFile, archiveFile); + archiveToFileRequests.push_back(createArchiveToFileRequest(requester, + remoteFile, archiveFile, priority)); + } + + m_db.queue(ArchiveToDirRequest(archiveDir, archiveToFileRequests, priority, + requester)); + + for(auto itor = archiveToFileRequests.cbegin(); itor != + archiveToFileRequests.cend(); itor++) { + m_ns.createFile(requester, itor->getArchiveFile(), 0666); } } @@ -514,7 +527,10 @@ void cta::Scheduler::queueArchiveToFileRequest( const std::string &remoteFile, const std::string &archiveFile) { - m_db.queue(createArchiveToFileRequest(requester, remoteFile, archiveFile)); + const uint64_t priority = 0; // TO BE DONE + + m_db.queue(createArchiveToFileRequest(requester, remoteFile, archiveFile, + priority)); m_ns.createFile(requester, archiveFile, 0666); } @@ -525,7 +541,8 @@ void cta::Scheduler::queueArchiveToFileRequest( cta::ArchiveToFileRequest cta::Scheduler::createArchiveToFileRequest( const SecurityIdentity &requester, const std::string &remoteFile, - const std::string &archiveFile) const { + const std::string &archiveFile, + const uint64_t priority) const { const std::string enclosingPath = Utils::getEnclosingPath(archiveFile); const std::string storageClassName = m_ns.getDirStorageClass(requester, @@ -534,7 +551,6 @@ cta::ArchiveToFileRequest cta::Scheduler::createArchiveToFileRequest( assertStorageClassHasAtLeastOneCopy(storageClass); const auto routes = m_db.getArchivalRoutes(storageClassName); const auto copyNbToPoolMap = createCopyNbToPoolMap(routes); - const uint64_t priority = 0; return ArchiveToFileRequest( remoteFile, diff --git a/scheduler/Scheduler.hpp b/scheduler/Scheduler.hpp index 858443b7ff0427c564732f8b539745b4b74f4724..d419d8f2b73330db7da5a0dd7228ce1243289e74 100644 --- a/scheduler/Scheduler.hpp +++ b/scheduler/Scheduler.hpp @@ -636,11 +636,13 @@ private: * @param remoteFile The URL of the remote file. * @param archiveFile The full path of the destination file within the * archive namespace. + * @param priority The priority of the request. */ ArchiveToFileRequest createArchiveToFileRequest( const SecurityIdentity &requester, const std::string &remoteFile, - const std::string &archiveFile) const; + const std::string &archiveFile, + const uint64_t priority) const; /** * Returns the map from tape copy number to tape pool name for the specified