diff --git a/nameserver/mockNS/MockNameServer.cpp b/nameserver/mockNS/MockNameServer.cpp index aa4e72c0742ad6d0d9302722f40e009ed41fa853..1afe2f55cc1a97a41c8c57e08a04cd7a244343c2 100644 --- a/nameserver/mockNS/MockNameServer.cpp +++ b/nameserver/mockNS/MockNameServer.cpp @@ -475,6 +475,9 @@ void cta::MockNameServer::createDir(const SecurityIdentity &requester, setDirStorageClass(requester, path, inheritedStorageClass); setOwner(requester, path, requester.getUser()); + std::stringstream fileIDString; + fileIDString << ++m_fileIdCounter; + Utils::setXattr(fsPath.c_str(), "user.CTAFileID", fileIDString.str()); } //------------------------------------------------------------------------------ @@ -630,7 +633,10 @@ cta::ArchiveDirEntry cta::MockNameServer::getArchiveDirEntry( const UserIdentity owner = getOwner(requester, path); const Checksum checksum; const std::string fsPath = m_fsDir + path; - const uint64_t size = atol(Utils::getXattr(fsPath, "user.CTASize").c_str()); + // Size is 0 for directories (and set for files) + uint64_t size = 0; + if (ArchiveDirEntry::ENTRYTYPE_FILE == entryType) + size = atol(Utils::getXattr(fsPath, "user.CTASize").c_str()); const uint64_t fileId = atol(Utils::getXattr(fsPath, "user.CTAFileID").c_str()); ArchiveFileStatus status(owner, fileId, statResult.st_mode, size, checksum, storageClassName); diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index 7d3d7114e8d09bd51ec646f236bb81fc7b790dfa..e268656932c5d7dbb0337bc783a5743b68cf12c7 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -800,6 +800,7 @@ std::unique_ptr<cta::TapeMount> cta::Scheduler::getNextMount( // First, get the mount-related info from the DB std::unique_ptr<SchedulerDatabase::TapeMountDecisionInfo> mountInfo; mountInfo = m_db.getMountInfo(); + auto potentialMounts = mountInfo->potentialMounts; // We should now filter the potential mounts to keep only the ones we are // compatible with (match the logical library for retrieves). @@ -838,9 +839,9 @@ std::unique_ptr<cta::TapeMount> cta::Scheduler::getNextMount( existingMounts = 0; } bool mountPassesACriteria = false; - if (m->bytesQueued / (1 + existingMounts) > m->mountCriteria.maxBytesQueued) + if (m->bytesQueued / (1 + existingMounts) >= m->mountCriteria.maxBytesQueued) mountPassesACriteria = true; - if (m->filesQueued / (1 + existingMounts) > m->mountCriteria.maxFilesQueued) + if (m->filesQueued / (1 + existingMounts) >= m->mountCriteria.maxFilesQueued) mountPassesACriteria = true; if (!existingMounts && ((time(NULL) - m->oldestJobStartTime) > (int64_t)m->mountCriteria.maxAge)) mountPassesACriteria = true;