From 09488b1614e43ee585753fdce0ebd1623a2b788b Mon Sep 17 00:00:00 2001 From: Eric Cano <Eric.Cano@cern.ch> Date: Wed, 28 Oct 2015 15:24:46 +0100 Subject: [PATCH] Added missing success() implementation for retrieve jobs. --- objectstore/RetrieveToFileRequest.cpp | 18 ++++++++++++++++++ objectstore/RetrieveToFileRequest.hpp | 1 + scheduler/OStoreDB/OStoreDB.cpp | 17 ++++++++++++++++- scheduler/RetrieveJob.cpp | 1 + tapeserver/castor/log/SyslogLogger.hpp | 4 ++-- 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/objectstore/RetrieveToFileRequest.cpp b/objectstore/RetrieveToFileRequest.cpp index 01a139eaef..f6a5bacef2 100644 --- a/objectstore/RetrieveToFileRequest.cpp +++ b/objectstore/RetrieveToFileRequest.cpp @@ -54,6 +54,24 @@ void cta::objectstore::RetrieveToFileRequest::addJob(const cta::TapeFileLocation j->set_fseq(tapeFileLocation.fSeq); } +bool cta::objectstore::RetrieveToFileRequest::setJobSuccessful(uint16_t copyNumber) { + checkPayloadWritable(); + auto * jl = m_payload.mutable_jobs(); + for (auto j=jl->begin(); j!=jl->end(); j++) { + if (j->copynb() == copyNumber) { + j->set_status(serializers::RetrieveJobStatus::RJS_Complete); + for (auto j2=jl->begin(); j2!=jl->end(); j2++) { + if (j2->status()!= serializers::RetrieveJobStatus::RJS_Complete && + j2->status()!= serializers::RetrieveJobStatus::RJS_Failed) + return false; + } + return true; + } + } + throw NoSuchJob("In RetrieveToFileRequest::setJobSuccessful(): job not found"); +} + + void cta::objectstore::RetrieveToFileRequest::setArchiveFile( const cta::ArchiveFile& archiveFile) { checkPayloadWritable(); diff --git a/objectstore/RetrieveToFileRequest.hpp b/objectstore/RetrieveToFileRequest.hpp index 662ae4a5b7..954091c990 100644 --- a/objectstore/RetrieveToFileRequest.hpp +++ b/objectstore/RetrieveToFileRequest.hpp @@ -43,6 +43,7 @@ public: uint16_t maxRetiesWithinMount, uint16_t maxTotalRetries); void setJobSelected(uint16_t copyNumber, const std::string & owner); void setJobPending(uint16_t copyNumber); + bool setJobSuccessful(uint16_t copyNumber); //< returns true if this is the last job class JobDump { public: uint16_t copyNb; diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp index 88f22637d9..51a1c25b3c 100644 --- a/scheduler/OStoreDB/OStoreDB.cpp +++ b/scheduler/OStoreDB/OStoreDB.cpp @@ -1750,7 +1750,22 @@ OStoreDB::RetrieveJob::~RetrieveJob() { } void OStoreDB::RetrieveJob::succeed() { - throw NotImplemented(""); + // Lock the request and set the job as successful. + objectstore::ScopedExclusiveLock rtfrl(m_rtfr); + m_rtfr.fetch(); + std::string rtfrAddress = m_rtfr.getAddressIfSet(); + if (m_rtfr.setJobSuccessful(m_copyNb)) { + m_rtfr.remove(); + } else { + m_rtfr.commit(); + } + // We no more own the job (which could be gone) + m_jobOwned = false; + // Remove ownership form the agent + objectstore::ScopedExclusiveLock al(m_agent); + m_agent.fetch(); + m_agent.removeFromOwnership(rtfrAddress); + m_agent.commit(); } diff --git a/scheduler/RetrieveJob.cpp b/scheduler/RetrieveJob.cpp index bdaf431164..737fadbda1 100644 --- a/scheduler/RetrieveJob.cpp +++ b/scheduler/RetrieveJob.cpp @@ -43,6 +43,7 @@ cta::RetrieveJob::RetrieveJob(RetrieveMount &mount, // complete //------------------------------------------------------------------------------ void cta::RetrieveJob::complete() { + m_dbJob->succeed(); } //------------------------------------------------------------------------------ diff --git a/tapeserver/castor/log/SyslogLogger.hpp b/tapeserver/castor/log/SyslogLogger.hpp index c6703d3cf3..e45422d2a5 100644 --- a/tapeserver/castor/log/SyslogLogger.hpp +++ b/tapeserver/castor/log/SyslogLogger.hpp @@ -409,8 +409,8 @@ protected: // Check the parameter name, if it's an empty string set the value to // "Undefined". - const std::string name = param.getName() == "" ? "Undefined" : - cleanString(param.getName(), true); + const std::string name = (param.getName() == "" ? "Undefined" : + cleanString(param.getName(), true)); // Process the parameter value const std::string value = cleanString(param.getValue(), false); -- GitLab