diff --git a/objectstore/Agent.cpp b/objectstore/Agent.cpp index 679ba05743dea76b161c2c506e88edbbf429cd18..8653aab3de26d3aba763b574fe723cb3723cf312 100644 --- a/objectstore/Agent.cpp +++ b/objectstore/Agent.cpp @@ -47,7 +47,7 @@ void cta::objectstore::Agent::initialize() { m_payloadInterpreted = true; } -void cta::objectstore::Agent::insertAndRegisterSelf() { +void cta::objectstore::Agent::insertAndRegisterSelf(log::LogContext & lc) { // We suppose initialize was already called, and that the agent name // is set. // We need to get hold of the agent register, which we suppose is available diff --git a/objectstore/Agent.hpp b/objectstore/Agent.hpp index 67b45820f38731d514ea2ae7d4649aac32c8aac2..61ddcd080deca9b42835bb7c57964d38460903ee 100644 --- a/objectstore/Agent.hpp +++ b/objectstore/Agent.hpp @@ -50,7 +50,7 @@ public: void initialize(); - void insertAndRegisterSelf(); + void insertAndRegisterSelf(log::LogContext & lc); void removeAndUnregisterSelf(log::LogContext & lc); diff --git a/objectstore/AgentRegister.cpp b/objectstore/AgentRegister.cpp index 6febd1f85f64a1c95ea446e9f15f216a3ea3e2c1..433006ce5eb82fe12b30b9b5319aa254d1a58bcb 100644 --- a/objectstore/AgentRegister.cpp +++ b/objectstore/AgentRegister.cpp @@ -47,10 +47,10 @@ void cta::objectstore::AgentRegister::garbageCollect(const std::string &presumed if (!isEmpty()) { throw (NotEmpty("Trying to garbage collect a non-empty AgentRegister: internal error")); } + remove(); log::ScopedParamContainer params(lc); params.add("agentRegisterObject", getAddressIfSet()); - lc.log(log::INFO, "In AgentRegister::garbageCollect(): Garbage collected and moved agent register object."); - remove(); + lc.log(log::INFO, "In AgentRegister::garbageCollect(): Garbage collected and removed agent register object."); } diff --git a/objectstore/ArchiveQueue.cpp b/objectstore/ArchiveQueue.cpp index 313ff38258ea88eaea55470cbdb3c4d47bab58a4..57fef41d6e5444d15df99c9ca9290990ef1c8dfe 100644 --- a/objectstore/ArchiveQueue.cpp +++ b/objectstore/ArchiveQueue.cpp @@ -131,7 +131,7 @@ void ArchiveQueue::garbageCollect(const std::string &presumedOwner, AgentReferen remove(); log::ScopedParamContainer params(lc); params.add("archiveQueueObject", getAddressIfSet()); - lc.log(log::INFO, "In ArchiveQueue::garbageCollect(): Garbage collected and moved archive queue object."); + lc.log(log::INFO, "In ArchiveQueue::garbageCollect(): Garbage collected and removed archive queue object."); } void ArchiveQueue::setTapePool(const std::string& name) { diff --git a/objectstore/ArchiveRequest.cpp b/objectstore/ArchiveRequest.cpp index 2741808ec023867e8e83bcdb5a369e4d1913401e..0d509cb72a20d67dce05faf8de42194d662fa408 100644 --- a/objectstore/ArchiveRequest.cpp +++ b/objectstore/ArchiveRequest.cpp @@ -566,7 +566,7 @@ bool ArchiveRequest::finishIfNecessary(log::LogContext & lc) { remove(); log::ScopedParamContainer params(lc); params.add("archiveRequestObject", getAddressIfSet()); - lc.log(log::INFO, "In ArchiveRequest::finishIfNecessary(): Removing completed request."); + lc.log(log::INFO, "In ArchiveRequest::finishIfNecessary(): Removed completed request."); return true; } diff --git a/objectstore/BackendPopulator.cpp b/objectstore/BackendPopulator.cpp index 95f5067d6bf501bc553064b0f8b3012d2c68d73f..8576fcb3b8760ae1a2d2366c7dfc0e6f17124ea5 100644 --- a/objectstore/BackendPopulator.cpp +++ b/objectstore/BackendPopulator.cpp @@ -32,17 +32,18 @@ BackendPopulator::BackendPopulator(cta::objectstore::Backend & be, re.fetchNoLock(); cta::objectstore::EntryLogSerDeser cl("user0", "systemhost", time(NULL)); // We might have to create the agent register (but this is unlikely) + log::LogContext lc2(lc); try { re.getAgentRegisterAddress(); } catch (...) { RootEntry re2(m_backend); ScopedExclusiveLock rel(re2); re2.fetch(); - re2.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl); + re2.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl, lc2); } Agent agent(m_agentReference.getAgentAddress(), m_backend); agent.initialize(); - agent.insertAndRegisterSelf(); + agent.insertAndRegisterSelf(lc2); // Likewise, make sure the drive register is around. try { re.getDriveRegisterAddress(); diff --git a/objectstore/DriveRegister.cpp b/objectstore/DriveRegister.cpp index dc8ca4558bd1077b03ad257a2b47d9c8f6cdea03..5fb36acd46b281e94c8e923d3e70eac06cc17713 100644 --- a/objectstore/DriveRegister.cpp +++ b/objectstore/DriveRegister.cpp @@ -98,6 +98,9 @@ void DriveRegister::garbageCollect(const std::string &presumedOwner, AgentRefere throw (NotEmpty("Trying to garbage collect a non-empty AgentRegister: internal error")); } remove(); + log::ScopedParamContainer params(lc); + params.add("driveRegisterObject", getAddressIfSet()); + lc.log(log::INFO, "In DriveRegister::garbageCollect(): Garbage collected and removed drive register object."); } //------------------------------------------------------------------------------ diff --git a/objectstore/DriveState.cpp b/objectstore/DriveState.cpp index 000ef415a98cc8ace77127480276eae447ca295f..4ee44117dc3a15e7cde082b7345f711405a7fde7 100644 --- a/objectstore/DriveState.cpp +++ b/objectstore/DriveState.cpp @@ -35,6 +35,9 @@ void DriveState::garbageCollect(const std::string& presumedOwner, AgentReference if (presumedOwner != m_header.owner()) return; remove(); + log::ScopedParamContainer params(lc); + params.add("driveStateObject", getAddressIfSet()); + lc.log(log::INFO, "In DriveState::garbageCollect(): Garbage collected and removed drive state object."); } void DriveState::initialize(const std::string & driveName) { diff --git a/objectstore/GarbageCollectorTest.cpp b/objectstore/GarbageCollectorTest.cpp index 14ea0a465e03ead71a93f5d2ce63b776701a9b83..5b3e6edbc98705fe92973a44b7a15ffe09bf7d9c 100644 --- a/objectstore/GarbageCollectorTest.cpp +++ b/objectstore/GarbageCollectorTest.cpp @@ -59,7 +59,7 @@ TEST(ObjectStore, GarbageCollectorBasicFuctionnality) { cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); cta::objectstore::ScopedExclusiveLock rel(re); - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // Create 2 agents, A and B and register them // The agents are set with a timeout of 0, so they will be delclared @@ -68,16 +68,16 @@ TEST(ObjectStore, GarbageCollectorBasicFuctionnality) { cta::objectstore::Agent agA(agrA.getAgentAddress(), be), agB(agrB.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); agB.initialize(); agB.setTimeout_us(0); - agB.insertAndRegisterSelf(); + agB.insertAndRegisterSelf(lc); // Create the garbage colletor and run it twice. cta::objectstore::AgentReference gcAgentRef("unitTestGarbageCollector", dl); cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -90,8 +90,8 @@ TEST(ObjectStore, GarbageCollectorBasicFuctionnality) { // We should not be able to remove the agent register (as it should be empty) rel.lock(re); re.fetch(); - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); } TEST(ObjectStore, GarbageCollectorRegister) { @@ -111,14 +111,14 @@ TEST(ObjectStore, GarbageCollectorRegister) { cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); cta::objectstore::ScopedExclusiveLock rel(re); - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // Create an agent and add and agent register to it as an owned object cta::objectstore::AgentReference agrA("unitTestAgentA", dl); cta::objectstore::Agent agA(agrA.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); // Create a new agent register, owned by agA (by hand as it is not an usual // situation) std::string arName; @@ -135,7 +135,7 @@ TEST(ObjectStore, GarbageCollectorRegister) { cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -149,8 +149,8 @@ TEST(ObjectStore, GarbageCollectorRegister) { // We should not be able to remove the agent register (as it should be empty) rel.lock(re); re.fetch(); - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); } TEST(ObjectStore, GarbageCollectorArchiveQueue) { @@ -171,14 +171,14 @@ TEST(ObjectStore, GarbageCollectorArchiveQueue) { cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); cta::objectstore::ScopedExclusiveLock rel(re); - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // Create an agent and add and agent register to it as an owned object cta::objectstore::AgentReference agrA("unitTestAgentA", dl); cta::objectstore::Agent agA(agrA.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); // Create a new agent register, owned by agA (by hand as it is not an usual // situation) std::string tpName; @@ -195,7 +195,7 @@ TEST(ObjectStore, GarbageCollectorArchiveQueue) { cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -209,8 +209,8 @@ TEST(ObjectStore, GarbageCollectorArchiveQueue) { // We should not be able to remove the agent register (as it should be empty) rel.lock(re); re.fetch(); - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); } TEST(ObjectStore, GarbageCollectorDriveRegister) { @@ -231,14 +231,14 @@ TEST(ObjectStore, GarbageCollectorDriveRegister) { cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); cta::objectstore::ScopedExclusiveLock rel(re); - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // Create an agent and add the drive register to it as an owned object cta::objectstore::AgentReference agrA("unitTestAgentA", dl); cta::objectstore::Agent agA(agrA.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); // Create a new drive register, owned by agA (by hand as it is not an usual // situation) std::string tpName; @@ -255,7 +255,7 @@ TEST(ObjectStore, GarbageCollectorDriveRegister) { cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -269,8 +269,8 @@ TEST(ObjectStore, GarbageCollectorDriveRegister) { // We should not be able to remove the agent register (as it should be empty) rel.lock(re); re.fetch(); - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); } TEST(ObjectStore, GarbageCollectorArchiveRequest) { @@ -296,19 +296,19 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) { // Create the agent for objects creation cta::objectstore::AgentReference agentRef("unitTestCreateEnv", dl); // Finish root creation. - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // continue agent creation. cta::objectstore::Agent agent(agentRef.getAgentAddress(), be); agent.initialize(); agent.setTimeout_us(0); - agent.insertAndRegisterSelf(); + agent.insertAndRegisterSelf(lc); // Create an agent to garbage collected cta::objectstore::AgentReference agrA("unitTestAgentA", dl); cta::objectstore::Agent agA(agrA.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); // Several use cases are present for the ArchiveRequests: // - just referenced in agent ownership list, but not yet created. // - just created but not linked to any tape pool @@ -325,7 +325,7 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) { re.fetch(); std::stringstream tapePoolName; tapePoolName << "TapePool" << i; - tpAddr[i] = re.addOrGetArchiveQueueAndCommit(tapePoolName.str(), agentRef); + tpAddr[i] = re.addOrGetArchiveQueueAndCommit(tapePoolName.str(), agentRef, lc); cta::objectstore::ArchiveQueue aq(tpAddr[i], be); } // Create the various ATFR's, stopping one step further each time. @@ -419,7 +419,7 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) { cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -460,11 +460,11 @@ TEST(ObjectStore, GarbageCollectorArchiveRequest) { aq.commit(); aql.release(); // Remove queues from root - re.removeArchiveQueueAndCommit(tp); + re.removeArchiveQueueAndCommit(tp, lc); } - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); // TODO: this unit test still leaks tape pools and requests } @@ -491,19 +491,19 @@ TEST(ObjectStore, GarbageCollectorRetrieveRequest) { // Create the agent for objects creation cta::objectstore::AgentReference agentRef("unitTestCreateEnv", dl); // Finish root creation. - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); rel.release(); // continue agent creation. cta::objectstore::Agent agent(agentRef.getAgentAddress(), be); agent.initialize(); agent.setTimeout_us(0); - agent.insertAndRegisterSelf(); + agent.insertAndRegisterSelf(lc); // Create an agent to garbage be collected cta::objectstore::AgentReference agrA("unitTestAgentA", dl); cta::objectstore::Agent agA(agrA.getAgentAddress(), be); agA.initialize(); agA.setTimeout_us(0); - agA.insertAndRegisterSelf(); + agA.insertAndRegisterSelf(lc); // Several use cases are present for the RetrieveRequests: // - just referenced in agent ownership list, but not yet created. // - just created but not linked to any tape @@ -605,7 +605,7 @@ TEST(ObjectStore, GarbageCollectorRetrieveRequest) { cta::objectstore::Agent gcAgent(gcAgentRef.getAgentAddress(), be); gcAgent.initialize(); gcAgent.setTimeout_us(0); - gcAgent.insertAndRegisterSelf(); + gcAgent.insertAndRegisterSelf(lc); { cta::objectstore::GarbageCollector gc(be, gcAgentRef, catalogue); gc.runOnePass(lc); @@ -641,11 +641,11 @@ TEST(ObjectStore, GarbageCollectorRetrieveRequest) { rq.commit(); rql.release(); // Remove queues from root - re.removeRetrieveQueueAndCommit(vid); + re.removeRetrieveQueueAndCommit(vid, lc); } - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); - ASSERT_NO_THROW(re.removeIfEmpty()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); + ASSERT_NO_THROW(re.removeIfEmpty(lc)); // TODO: this unit test still leaks tape pools and requests } diff --git a/objectstore/Helpers.cpp b/objectstore/Helpers.cpp index c59e20bd61da8ec5aa823fa107048674086e847d..29aa3150ef073aa8e5bdcde3c014ee2f363ee716 100644 --- a/objectstore/Helpers.cpp +++ b/objectstore/Helpers.cpp @@ -62,7 +62,7 @@ void Helpers::getLockedAndFetchedQueue<ArchiveQueue>(ArchiveQueue& archiveQueue, rootRelockExclusiveTime = t.secs(utils::Timer::resetCounter); re.fetch(); rootRefetchTime = t.secs(utils::Timer::resetCounter); - archiveQueue.setAddress(re.addOrGetArchiveQueueAndCommit(tapePool, agentReference)); + archiveQueue.setAddress(re.addOrGetArchiveQueueAndCommit(tapePool, agentReference, lc)); addOrGetQueueandCommitTime = t.secs(utils::Timer::resetCounter); } } diff --git a/objectstore/RetrieveQueue.cpp b/objectstore/RetrieveQueue.cpp index 18d98f4d980adb06cd1df1b9b13835e860a8ff6b..9caeb93a6d901a36cffe53d6ea25aefd133771e1 100644 --- a/objectstore/RetrieveQueue.cpp +++ b/objectstore/RetrieveQueue.cpp @@ -73,12 +73,15 @@ bool cta::objectstore::RetrieveQueue::isEmpty() { return !m_payload.retrievejobs_size(); } -void cta::objectstore::RetrieveQueue::removeIfEmpty() { +void cta::objectstore::RetrieveQueue::removeIfEmpty(log::LogContext & lc) { checkPayloadWritable(); if (!isEmpty()) { - throw NotEmpty("In TapeQueue::removeIfEmpty: trying to remove an tape with retrieves queued"); + throw NotEmpty("In RetrieveQueue::removeIfEmpty: trying to remove an tape with retrieves queued"); } remove(); + log::ScopedParamContainer params(lc); + params.add("retrieveQueueObject", getAddressIfSet()); + lc.log(log::INFO, "In RetrieveQueue::removeIfEmpty(): removed the queue."); } std::string cta::objectstore::RetrieveQueue::getVid() { diff --git a/objectstore/RetrieveQueue.hpp b/objectstore/RetrieveQueue.hpp index 825bc7c618db3c2757282548b6474f3a5b56ba89..e816303a72dbcdb18c4524a90c3456508ac41dd1 100644 --- a/objectstore/RetrieveQueue.hpp +++ b/objectstore/RetrieveQueue.hpp @@ -41,7 +41,7 @@ public: cta::catalogue::Catalogue & catalogue) override; bool isEmpty(); CTA_GENERATE_EXCEPTION_CLASS(NotEmpty); - void removeIfEmpty(); + void removeIfEmpty(log::LogContext & lc); std::string dump(); // Retrieve jobs management ================================================== diff --git a/objectstore/RetrieveQueueTest.cpp b/objectstore/RetrieveQueueTest.cpp index d0c6f165cf8f7fc5fba10d0ff3b4b917a0a767b2..fff8a3fb8473bed8a57ddf353971806e0a88fb29 100644 --- a/objectstore/RetrieveQueueTest.cpp +++ b/objectstore/RetrieveQueueTest.cpp @@ -27,6 +27,7 @@ namespace unitTests { TEST(ObjectStore, RetrieveQueueBasicAccess) { cta::objectstore::BackendVFS be; cta::log::DummyLogger dl("dummyLogger"); + cta::log::LogContext lc(dl); cta::objectstore::AgentReference agentRef("unitTest", dl); std::string retrieveQueueAddress = agentRef.nextId("RetrieveQueue"); { @@ -47,7 +48,7 @@ TEST(ObjectStore, RetrieveQueueBasicAccess) { cta::objectstore::RetrieveQueue rq(retrieveQueueAddress, be); cta::objectstore::ScopedExclusiveLock lock(rq); rq.fetch(); - rq.removeIfEmpty(); + rq.removeIfEmpty(lc); ASSERT_FALSE(rq.exists()); } } \ No newline at end of file diff --git a/objectstore/RetrieveRequest.cpp b/objectstore/RetrieveRequest.cpp index fcdd7f32110c3d0fe711cb77edefad35d5268133..2848739e28264feba650aa58bff3c0afeb9ffe32 100644 --- a/objectstore/RetrieveRequest.cpp +++ b/objectstore/RetrieveRequest.cpp @@ -314,7 +314,7 @@ auto RetrieveRequest::getJobs() -> std::list<JobDump> { return ret; } -bool RetrieveRequest::addJobFailure(uint16_t copyNumber, uint64_t mountId) { +bool RetrieveRequest::addJobFailure(uint16_t copyNumber, uint64_t mountId, log::LogContext & lc) { checkPayloadWritable(); auto * jl = m_payload.mutable_jobs(); // Find the job and update the number of failures @@ -332,7 +332,7 @@ bool RetrieveRequest::addJobFailure(uint16_t copyNumber, uint64_t mountId) { } if (j.totalretries() >= j.maxtotalretries()) { j.set_status(serializers::RJS_Failed); - return finishIfNecessary(); + return finishIfNecessary(lc); } else { j.set_status(serializers::RJS_Pending); return false; @@ -341,7 +341,7 @@ bool RetrieveRequest::addJobFailure(uint16_t copyNumber, uint64_t mountId) { throw NoSuchJob ("In RetrieveRequest::addJobFailure(): could not find job"); } -bool RetrieveRequest::finishIfNecessary() { +bool RetrieveRequest::finishIfNecessary(log::LogContext & lc) { checkPayloadWritable(); // This function is typically called after changing the status of one job // in memory. If the request is complete, we will just remove it. @@ -354,6 +354,9 @@ bool RetrieveRequest::finishIfNecessary() { if (!finishedStatuses.count(j.status())) return false; remove(); + log::ScopedParamContainer params(lc); + params.add("retrieveRequestObject", getAddressIfSet()); + lc.log(log::INFO, "In RetrieveRequest::finishIfNecessary(): removed finished retrieve request."); return true; } diff --git a/objectstore/RetrieveRequest.hpp b/objectstore/RetrieveRequest.hpp index 2e8efbed04fe269f383867414b78a88054d6fb9d..20211b20ffb305e6b02413e8a060d267965ed23f 100644 --- a/objectstore/RetrieveRequest.hpp +++ b/objectstore/RetrieveRequest.hpp @@ -68,9 +68,9 @@ public: AsyncJobDeleter * asyncDeleteJob(); JobDump getJob(uint16_t copyNb); std::list<JobDump> getJobs(); - bool addJobFailure(uint16_t copyNumber, uint64_t mountId); /**< Returns true is the request is completely failed + bool addJobFailure(uint16_t copyNumber, uint64_t mountId, log::LogContext & lc); /**< Returns true is the request is completely failed (telling wheather we should requeue or not). */ - bool finishIfNecessary(); /**< Handling of the consequences of a job status change for the entire request. + bool finishIfNecessary(log::LogContext & lc); /**< Handling of the consequences of a job status change for the entire request. * This function returns true if the request got finished. */ serializers::RetrieveJobStatus getJobStatus(uint16_t copyNumber); // Mark all jobs as pending mount (following their linking to a tape pool) diff --git a/objectstore/RootEntry.cpp b/objectstore/RootEntry.cpp index bbf006e201fe7a60c2f6aeaa2c29818b18afa2a2..ac94e580c5de8a6a4e67ec60f7c2e328f68eb10c 100644 --- a/objectstore/RootEntry.cpp +++ b/objectstore/RootEntry.cpp @@ -74,12 +74,15 @@ bool RootEntry::isEmpty() { return true; } -void RootEntry::removeIfEmpty() { +void RootEntry::removeIfEmpty(log::LogContext & lc) { checkPayloadWritable(); if (!isEmpty()) { throw NotEmpty("In RootEntry::removeIfEmpty(): root entry not empty"); } remove(); + log::ScopedParamContainer params(lc); + params.add("rootObjectName", getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeIfEmpty(): removed root entry."); } void RootEntry::garbageCollect(const std::string& presumedOwner, AgentReference & agentReference, log::LogContext & lc, @@ -102,7 +105,7 @@ namespace { } } -std::string RootEntry::addOrGetArchiveQueueAndCommit(const std::string& tapePool, AgentReference& agentRef) { +std::string RootEntry::addOrGetArchiveQueueAndCommit(const std::string& tapePool, AgentReference& agentRef, log::LogContext & lc) { checkPayloadWritable(); // Check the archive queue does not already exist try { @@ -134,7 +137,7 @@ std::string RootEntry::addOrGetArchiveQueueAndCommit(const std::string& tapePool return archiveQueueAddress; } -void RootEntry::removeArchiveQueueAndCommit(const std::string& tapePool) { +void RootEntry::removeArchiveQueueAndCommit(const std::string& tapePool, log::LogContext & lc) { checkPayloadWritable(); // find the address of the archive queue object try { @@ -171,6 +174,11 @@ void RootEntry::removeArchiveQueueAndCommit(const std::string& tapePool) { } // We can delete the queue aq.remove(); + { + log::ScopedParamContainer params(lc); + params.add("archiveQueueObject", aq.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeArchiveQueueAndCommit(): removed archive queue."); + } deleteFromRootEntry: // ... and remove it from our entry serializers::removeOccurences(m_payload.mutable_archivequeuepointers(), tapePool); @@ -258,7 +266,7 @@ void RootEntry::removeMissingRetrieveQueueReference(const std::string& vid) { serializers::removeOccurences(m_payload.mutable_retrievequeuepointers(), vid); } -void RootEntry::removeRetrieveQueueAndCommit(const std::string& vid) { +void RootEntry::removeRetrieveQueueAndCommit(const std::string& vid, log::LogContext & lc) { checkPayloadWritable(); // find the address of the retrieve queue object try { @@ -295,6 +303,11 @@ void RootEntry::removeRetrieveQueueAndCommit(const std::string& vid) { } // We can now delete the queue rq.remove(); + { + log::ScopedParamContainer params(lc); + params.add("retrieveQueueObject", rq.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeRetrieveQueueAndCommit(): removed retrieve queue."); + } deleteFromRootEntry: // ... and remove it from our entry serializers::removeOccurences(m_payload.mutable_retrievequeuepointers(), vid); @@ -370,7 +383,7 @@ std::string RootEntry::addOrGetDriveRegisterPointerAndCommit( } } -void RootEntry::removeDriveRegisterAndCommit() { +void RootEntry::removeDriveRegisterAndCommit(log::LogContext & lc) { checkPayloadWritable(); // Get the address of the drive register (nothing to do if there is none) if (!m_payload.has_driveregisterpointer() || @@ -387,6 +400,9 @@ void RootEntry::removeDriveRegisterAndCommit() { } // we can delete the drive register dr.remove(); + log::ScopedParamContainer params(lc); + params.add("driveRegisterObject", dr.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeDriveRegisterAndCommit(): removed drive register."); // And update the root entry m_payload.mutable_driveregisterpointer()->set_address(""); // We commit for safety and symmetry with the add operation @@ -418,7 +434,7 @@ std::string RootEntry::getAgentRegisterAddress() { // Get the name of a (possibly freshly created) agent register std::string RootEntry::addOrGetAgentRegisterPointerAndCommit(AgentReference& agentRef, - const EntryLogSerDeser & log) { + const EntryLogSerDeser & log, log::LogContext & lc) { // Check if the agent register exists try { return getAgentRegisterAddress(); @@ -435,7 +451,7 @@ std::string RootEntry::addOrGetAgentRegisterPointerAndCommit(AgentReference& age // decide on the object's name std::string arAddress (agentRef.nextId("AgentRegister")); // Record the agent registry in our own intent - addIntendedAgentRegistry(arAddress); + addIntendedAgentRegistry(arAddress, lc); commit(); // Create the agent registry AgentRegister ar(arAddress, m_objectStore); @@ -463,7 +479,7 @@ std::string RootEntry::addOrGetAgentRegisterPointerAndCommit(AgentReference& age } } -void RootEntry::removeAgentRegisterAndCommit() { +void RootEntry::removeAgentRegisterAndCommit(log::LogContext & lc) { checkPayloadWritable(); // Check that we do have an agent register set. Cleanup a potential intent as // well @@ -479,6 +495,9 @@ void RootEntry::removeAgentRegisterAndCommit() { "a non-empty intended agent register. Internal error."); } iar.remove(); + log::ScopedParamContainer params(lc); + params.add("agentRegisterObject", iar.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeAgentRegisterAndCommit(): removed agent register"); m_payload.set_agentregisterintent(""); commit(); } @@ -493,12 +512,15 @@ void RootEntry::removeAgentRegisterAndCommit() { "register is not empty. Cannot remove."); } ar.remove(); + log::ScopedParamContainer params(lc); + params.add("agentRegisterObject", ar.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeAgentRegisterAndCommit(): removed agent register."); m_payload.mutable_agentregisterpointer()->set_address(""); commit(); } } -void RootEntry::addIntendedAgentRegistry(const std::string& address) { +void RootEntry::addIntendedAgentRegistry(const std::string& address, log::LogContext & lc) { checkPayloadWritable(); // We are supposed to have only one intended agent registry at a time. // If we got the lock and there is one entry, this means the previous @@ -525,6 +547,9 @@ void RootEntry::addIntendedAgentRegistry(const std::string& address) { "found a non-empty intended agent register. Internal Error."); } iar.remove(); + log::ScopedParamContainer params (lc); + params.add("agentRegisterObject", iar.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::addIntendedAgentRegistry(): removed agent register."); } } m_payload.set_agentregisterintent(address); @@ -577,7 +602,7 @@ std::string RootEntry::addOrGetSchedulerGlobalLockAndCommit(AgentReference& agen } } -void RootEntry::removeSchedulerGlobalLockAndCommit() { +void RootEntry::removeSchedulerGlobalLockAndCommit(log::LogContext & lc) { checkPayloadWritable(); // Get the address of the scheduler lock (nothing to do if there is none) if (!m_payload.has_schedulerlockpointer() || @@ -594,6 +619,9 @@ void RootEntry::removeSchedulerGlobalLockAndCommit() { } // we can delete the drive register sgl.remove(); + log::ScopedParamContainer params(lc); + params.add("schedulerGlobalLockObject", sgl.getAddressIfSet()); + lc.log(log::INFO, "In RootEntry::removeSchedulerGlobalLockAndCommit(): removed scheduler global lock object."); // And update the root entry m_payload.mutable_schedulerlockpointer()->set_address(""); // We commit for safety and symmetry with the add operation diff --git a/objectstore/RootEntry.hpp b/objectstore/RootEntry.hpp index 86deabaf82423ad04c844de00a5c3e15d0fbacfb..afbf302917c2b6d34fb69cdec0e6bf4ac9c631d1 100644 --- a/objectstore/RootEntry.hpp +++ b/objectstore/RootEntry.hpp @@ -52,7 +52,7 @@ public: bool isEmpty(); // Safe remover - void removeIfEmpty(); + void removeIfEmpty(log::LogContext & lc); // Garbage collection (disallowed for root entry). void garbageCollect(const std::string &presumedOwner, AgentReference & agentReference, log::LogContext & lc, @@ -63,11 +63,11 @@ public: CTA_GENERATE_EXCEPTION_CLASS(WrongArchiveQueue); /** This function implicitly creates the archive queue structure and updates * the pointer to it. It will implicitly commit the object to the store. */ - std::string addOrGetArchiveQueueAndCommit(const std::string & tapePool, AgentReference & agentRef); + std::string addOrGetArchiveQueueAndCommit(const std::string & tapePool, AgentReference & agentRef, log::LogContext & lc); /** This function implicitly deletes the tape pool structure. * Fails if it not empty*/ CTA_GENERATE_EXCEPTION_CLASS(NoSuchArchiveQueue); - void removeArchiveQueueAndCommit(const std::string & tapePool); + void removeArchiveQueueAndCommit(const std::string & tapePool, log::LogContext & lc); /** This function is used in a cleanup utility. Removes unconditionally the reference to the archive queue */ void removeMissingArchiveQueueReference(const std::string & tapePool); void removeArchiveQueueIfAddressMatchesAndCommit(const std::string & tapePool, const std::string & archiveQueueAddress); @@ -86,7 +86,7 @@ public: /** This function is used in a cleanup utility. Removes unconditionally the reference to the retrieve queue */ void removeMissingRetrieveQueueReference(const std::string & address); CTA_GENERATE_EXCEPTION_CLASS(NoSuchRetrieveQueue); - void removeRetrieveQueueAndCommit(const std::string & vid); + void removeRetrieveQueueAndCommit(const std::string & vid, log::LogContext & lc); std::string getRetrieveQueueAddress(const std::string & vid); struct RetrieveQueueDump { std::string vid; @@ -98,7 +98,7 @@ public: CTA_GENERATE_EXCEPTION_CLASS(DriveRegisterNotEmpty); std::string getDriveRegisterAddress(); std::string addOrGetDriveRegisterPointerAndCommit(AgentReference & agentRef, const EntryLogSerDeser & log); - void removeDriveRegisterAndCommit(); + void removeDriveRegisterAndCommit(log::LogContext & lc); // Agent register manipulations ============================================== CTA_GENERATE_EXCEPTION_CLASS(AgentRegisterNotEmpty); @@ -108,16 +108,16 @@ public: * log for tracking objects being created. We already use an agent here for * object name generation, but not yet tracking. */ std::string addOrGetAgentRegisterPointerAndCommit(AgentReference & agentRef, - const EntryLogSerDeser & log); - void removeAgentRegisterAndCommit(); + const EntryLogSerDeser & log, log::LogContext & lc); + void removeAgentRegisterAndCommit(log::LogContext & lc); // Agent register manipulations ============================================== std::string getSchedulerGlobalLock(); std::string addOrGetSchedulerGlobalLockAndCommit(AgentReference & agentRef, const EntryLogSerDeser & log); - void removeSchedulerGlobalLockAndCommit(); + void removeSchedulerGlobalLockAndCommit(log::LogContext & lc); private: - void addIntendedAgentRegistry(const std::string & address); + void addIntendedAgentRegistry(const std::string & address, log::LogContext & lc); public: // Dump the root entry @@ -126,4 +126,3 @@ public: }} - diff --git a/objectstore/RootEntryTest.cpp b/objectstore/RootEntryTest.cpp index 289f347784a9d3ffd73c6ae0d44be2b40e7e70c9..989f062c63b8c2c667f5f13dd0c736d624b64c01 100644 --- a/objectstore/RootEntryTest.cpp +++ b/objectstore/RootEntryTest.cpp @@ -31,6 +31,8 @@ namespace unitTests { TEST(ObjectStore, RootEntryBasicAccess) { cta::objectstore::BackendVFS be; + cta::log::DummyLogger dl("dummyLogger"); + cta::log::LogContext lc(dl); { // Try to create the root entry cta::objectstore::RootEntry re(be); @@ -57,7 +59,7 @@ TEST(ObjectStore, RootEntryBasicAccess) { re.fetch(); cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); - re.addOrGetAgentRegisterPointerAndCommit(agentRef, el); + re.addOrGetAgentRegisterPointerAndCommit(agentRef, el, lc); ASSERT_NO_THROW(re.getAgentRegisterAddress()); re.commit(); //agent.registerSelf(); @@ -66,8 +68,8 @@ TEST(ObjectStore, RootEntryBasicAccess) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeAgentRegisterAndCommit(); - re.removeIfEmpty(); + re.removeAgentRegisterAndCommit(lc); + re.removeIfEmpty(lc); ASSERT_FALSE(re.exists()); } @@ -86,9 +88,9 @@ TEST (ObjectStore, RootEntryArchiveQueues) { re.initialize(); re.insert(); cta::objectstore::ScopedExclusiveLock rel(re); - re.addOrGetAgentRegisterPointerAndCommit(agr, el); + re.addOrGetAgentRegisterPointerAndCommit(agr, el, lc); } - ag.insertAndRegisterSelf(); + ag.insertAndRegisterSelf(lc); std::string tpAddr1, tpAddr2; { // Create the tape pools @@ -97,7 +99,7 @@ TEST (ObjectStore, RootEntryArchiveQueues) { re.fetch(); ASSERT_THROW(re.getArchiveQueueAddress("tapePool1"), cta::objectstore::RootEntry::NoSuchArchiveQueue); - tpAddr1 = re.addOrGetArchiveQueueAndCommit("tapePool1", agr); + tpAddr1 = re.addOrGetArchiveQueueAndCommit("tapePool1", agr, lc); // Check that we car read it cta::objectstore::ArchiveQueue aq(tpAddr1, be); cta::objectstore::ScopedSharedLock aql(aq); @@ -108,7 +110,7 @@ TEST (ObjectStore, RootEntryArchiveQueues) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - tpAddr2 = re.addOrGetArchiveQueueAndCommit("tapePool2", agr); + tpAddr2 = re.addOrGetArchiveQueueAndCommit("tapePool2", agr, lc); ASSERT_TRUE(be.exists(tpAddr2)); } { @@ -116,7 +118,7 @@ TEST (ObjectStore, RootEntryArchiveQueues) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeArchiveQueueAndCommit("tapePool2"); + re.removeArchiveQueueAndCommit("tapePool2", lc); ASSERT_FALSE(be.exists(tpAddr2)); } // Unregister the agent @@ -126,10 +128,10 @@ TEST (ObjectStore, RootEntryArchiveQueues) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeAgentRegisterAndCommit(); - re.removeArchiveQueueAndCommit("tapePool1"); + re.removeAgentRegisterAndCommit(lc); + re.removeArchiveQueueAndCommit("tapePool1", lc); ASSERT_FALSE(be.exists(tpAddr1)); - re.removeIfEmpty(); + re.removeIfEmpty(lc); ASSERT_FALSE(re.exists()); } @@ -153,9 +155,9 @@ TEST (ObjectStore, RootEntryDriveRegister) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock rel(re); re.fetch(); - re.addOrGetAgentRegisterPointerAndCommit(agr, el); + re.addOrGetAgentRegisterPointerAndCommit(agr, el, lc); } - ag.insertAndRegisterSelf(); + ag.insertAndRegisterSelf(lc); std::string driveRegisterAddress; { // create the drive register @@ -174,7 +176,7 @@ TEST (ObjectStore, RootEntryDriveRegister) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock rel(re); re.fetch(); - re.removeDriveRegisterAndCommit(); + re.removeDriveRegisterAndCommit(lc); ASSERT_FALSE(be.exists(driveRegisterAddress)); } // Unregister the agent @@ -184,8 +186,8 @@ TEST (ObjectStore, RootEntryDriveRegister) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeAgentRegisterAndCommit(); - re.removeIfEmpty(); + re.removeAgentRegisterAndCommit(lc); + re.removeIfEmpty(lc); ASSERT_FALSE(re.exists()); } @@ -200,6 +202,7 @@ TEST(ObjectStore, RootEntryAgentRegister) { cta::objectstore::EntryLogSerDeser el("user0", "unittesthost", time(NULL)); cta::log::DummyLogger dl("dummyLogger"); + cta::log::LogContext lc(dl); cta::objectstore::AgentReference agr("UnitTests", dl); cta::objectstore::Agent ag(agr.getAgentAddress(), be); ag.initialize(); @@ -211,7 +214,7 @@ TEST(ObjectStore, RootEntryAgentRegister) { re.fetch(); ASSERT_THROW(re.getAgentRegisterAddress(), cta::objectstore::RootEntry::NotAllocated); - arAddr = re.addOrGetAgentRegisterPointerAndCommit(agr, el); + arAddr = re.addOrGetAgentRegisterPointerAndCommit(agr, el, lc); // Check that we car read it cta::objectstore::AgentRegister ar(arAddr, be); cta::objectstore::ScopedSharedLock arl(ar); @@ -224,9 +227,9 @@ TEST(ObjectStore, RootEntryAgentRegister) { re.fetch(); // Check that we still get the same agent register ASSERT_EQ(arAddr, re.getAgentRegisterAddress()); - ASSERT_EQ(arAddr, re.addOrGetAgentRegisterPointerAndCommit(agr, el)); + ASSERT_EQ(arAddr, re.addOrGetAgentRegisterPointerAndCommit(agr, el, lc)); // Remove it - ASSERT_NO_THROW(re.removeAgentRegisterAndCommit()); + ASSERT_NO_THROW(re.removeAgentRegisterAndCommit(lc)); // Check that the object is gone ASSERT_FALSE(be.exists(arAddr)); } @@ -234,7 +237,7 @@ TEST(ObjectStore, RootEntryAgentRegister) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeIfEmpty(); + re.removeIfEmpty(lc); ASSERT_FALSE(re.exists()); } @@ -258,9 +261,9 @@ TEST (ObjectStore, RootEntrySchedulerGlobalLock) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock rel(re); re.fetch(); - re.addOrGetAgentRegisterPointerAndCommit(agr, el); + re.addOrGetAgentRegisterPointerAndCommit(agr, el, lc); } - ag.insertAndRegisterSelf(); + ag.insertAndRegisterSelf(lc); std::string schedulerGlobalLockAddress; { // create the drive register @@ -279,7 +282,7 @@ TEST (ObjectStore, RootEntrySchedulerGlobalLock) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock rel(re); re.fetch(); - re.removeSchedulerGlobalLockAndCommit(); + re.removeSchedulerGlobalLockAndCommit(lc); ASSERT_FALSE(be.exists(schedulerGlobalLockAddress)); } // Unregister the agent @@ -289,8 +292,8 @@ TEST (ObjectStore, RootEntrySchedulerGlobalLock) { cta::objectstore::RootEntry re(be); cta::objectstore::ScopedExclusiveLock lock(re); re.fetch(); - re.removeAgentRegisterAndCommit(); - re.removeIfEmpty(); + re.removeAgentRegisterAndCommit(lc); + re.removeIfEmpty(lc); ASSERT_FALSE(re.exists()); } diff --git a/objectstore/SchedulerGlobalLock.cpp b/objectstore/SchedulerGlobalLock.cpp index 5300cdcb22f32ffdf77df17ee8662fdc1d553a2e..e364a4c35193d06328715cdd189c4b791e926550 100644 --- a/objectstore/SchedulerGlobalLock.cpp +++ b/objectstore/SchedulerGlobalLock.cpp @@ -71,6 +71,9 @@ void SchedulerGlobalLock::garbageCollect(const std::string &presumedOwner, Agent throw (NotEmpty("Trying to garbage collect a non-empty AgentRegister: internal error")); } remove(); + log::ScopedParamContainer params(lc); + params.add("schedulerGlobalLock", getAddressIfSet()); + lc.log(log::INFO, "In SchedulerGlobalLock::garbageCollect(): Garbage collected and removed scheduler global lock."); } uint64_t SchedulerGlobalLock::getIncreaseCommitMountId() { diff --git a/objectstore/cta-objectstore-collect-orphaned-object.cpp b/objectstore/cta-objectstore-collect-orphaned-object.cpp index 1509ccc740ff3fde467e8bcb8d6fd05f76a68d62..e3e2c85bd0203f568ce62e7d34d082d66469965e 100644 --- a/objectstore/cta-objectstore-collect-orphaned-object.cpp +++ b/objectstore/cta-objectstore-collect-orphaned-object.cpp @@ -76,7 +76,7 @@ int main(int argc, char ** argv) { cta::objectstore::AgentReference agr("cta-objectstore-collect-orphaned-object", sl); cta::objectstore::Agent ag(agr.getAgentAddress(), *be); ag.initialize(); - ag.insertAndRegisterSelf(); + ag.insertAndRegisterSelf(lc); switch (go.type()) { case cta::objectstore::serializers::ObjectType::ArchiveRequest_t: { diff --git a/objectstore/cta-objectstore-initialize.cpp b/objectstore/cta-objectstore-initialize.cpp index 53e4af31d4c0b5eec217b74c15f731a5cac40996..9d0d2a206198a91ad4bdb329d8d8f4e7dd52c695 100644 --- a/objectstore/cta-objectstore-initialize.cpp +++ b/objectstore/cta-objectstore-initialize.cpp @@ -57,9 +57,10 @@ int main(int argc, char ** argv) { cta::objectstore::Agent ag(agr.getAgentAddress(), *be); ag.initialize(); cta::objectstore::EntryLogSerDeser el("user0", "systemhost", time(NULL)); - re.addOrGetAgentRegisterPointerAndCommit(agr,el); + cta::log::LogContext lc(logger); + re.addOrGetAgentRegisterPointerAndCommit(agr,el, lc); rel.release(); - ag.insertAndRegisterSelf(); + ag.insertAndRegisterSelf(lc); rel.lock(re); re.fetch(); re.addOrGetDriveRegisterPointerAndCommit(agr, el); diff --git a/scheduler/OStoreDB/OStoreDB.cpp b/scheduler/OStoreDB/OStoreDB.cpp index e1412448c2020751c1a8e5a603007509056dfcee..9146f6e8e6dfc44ff8ef26eba5aac38967694a05 100644 --- a/scheduler/OStoreDB/OStoreDB.cpp +++ b/scheduler/OStoreDB/OStoreDB.cpp @@ -306,7 +306,7 @@ void OStoreDB::trimEmptyQueues(log::LogContext& lc) { aq.fetch(); if (!aq.dumpJobs().size()) { aql.release(); - re.removeArchiveQueueAndCommit(a.tapePool); + re.removeArchiveQueueAndCommit(a.tapePool, lc); log::ScopedParamContainer params(lc); params.add("tapePool", a.tapePool) .add("queueObject", a.address); @@ -320,7 +320,7 @@ void OStoreDB::trimEmptyQueues(log::LogContext& lc) { rq.fetch(); if (!rq.dumpJobs().size()) { rql.release(); - re.removeRetrieveQueueAndCommit(r.vid); + re.removeRetrieveQueueAndCommit(r.vid, lc); log::ScopedParamContainer params(lc); params.add("vid", r.vid) .add("queueObject", r.address); @@ -544,7 +544,7 @@ void OStoreDB::queueArchive(const std::string &instanceName, const cta::common:: .add("queueUnlockTime", qUnlockTime); logContext.log(log::INFO, "In OStoreDB::queueArchive(): added job to queue"); } - } catch (NoSuchArchiveQueue &) { + } catch (NoSuchArchiveQueue &ex) { // Unlink the request from already connected tape pools for (auto tpa=linkedTapePools.begin(); tpa!=linkedTapePools.end(); tpa++) { objectstore::ArchiveQueue aq(*tpa, m_objectStore); @@ -552,10 +552,12 @@ void OStoreDB::queueArchive(const std::string &instanceName, const cta::common:: aq.fetch(); aq.removeJob(aReq.getAddressIfSet()); aq.commit(); - aReq.remove(); } + aReq.remove(); log::ScopedParamContainer params(logContext); params.add("tapepool", currentTapepool) + .add("archiveRequestObject", aReq.getAddressIfSet()) + .add("exceptionMessage", ex.getMessageValue()) .add("jobObject", aReq.getAddressIfSet()); logContext.log(log::INFO, "In OStoreDB::queueArchive(): failed to enqueue job"); throw; @@ -625,6 +627,10 @@ void OStoreDB::deleteArchiveRequest(const std::string &diskInstanceName, ar.setJobOwner(j.copyNb, m_agentReference->getAgentAddress()); } ar.remove(); + log::LogContext lc(m_logger); + log::ScopedParamContainer params(lc); + params.add("archiveRequestObject", ar.getAddressIfSet()); + lc.log(log::INFO, "In OStoreDB::deleteArchiveRequest(): delete archive request."); m_agentReference->removeFromOwnership(ar.getAddressIfSet(), m_objectStore); // We found and deleted the job: return. return; @@ -637,11 +643,14 @@ void OStoreDB::deleteArchiveRequest(const std::string &diskInstanceName, //------------------------------------------------------------------------------ // OStoreDB::ArchiveToFileRequestCancelation::complete() //------------------------------------------------------------------------------ -void OStoreDB::ArchiveToFileRequestCancelation::complete() { +void OStoreDB::ArchiveToFileRequestCancelation::complete(log::LogContext & lc) { if (m_closed) throw ArchiveRequestAlreadyDeleted("OStoreDB::ArchiveToFileRequestCancelation::complete(): called twice"); // We just need to delete the object and forget it m_request.remove(); + log::ScopedParamContainer params(lc); + params.add("archiveRequestObject", m_request.getAddressIfSet()); + lc.log(log::INFO, "In ArchiveToFileRequestCancelation::complete(): removed archive request."); m_agentReference.removeFromOwnership(m_request.getAddressIfSet(), m_objectStore); m_closed = true; } @@ -1053,6 +1062,8 @@ void OStoreDB::removeDrive(const std::string& drive, log::LogContext &lc) { ds.remove(); dr.removeDrive(drive); dr.commit(); + log::ScopedParamContainer params(lc); + params.add("driveStateObject", ds.getAddressIfSet()); lc.log(log::INFO, "In OStoreDB::removeDrive(): removed and dereferenced drive state object."); } else { dr.removeDrive(drive); @@ -1792,7 +1803,7 @@ std::list<std::unique_ptr<SchedulerDatabase::ArchiveJob> > OStoreDB::ArchiveMoun ScopedExclusiveLock rexl(re); re.fetch(); try { - re.removeArchiveQueueAndCommit(mountInfo.tapePool); + re.removeArchiveQueueAndCommit(mountInfo.tapePool, logContext); log::ScopedParamContainer params(logContext); params.add("tapepool", mountInfo.tapePool) .add("queueObject", aq.getAddressIfSet()); @@ -1991,7 +2002,7 @@ std::list<std::unique_ptr<SchedulerDatabase::ArchiveJob> > OStoreDB::ArchiveMoun // The queue should be removed as it is empty. ScopedExclusiveLock rexl(re); re.fetch(); - re.removeArchiveQueueAndCommit(mountInfo.tapePool); + re.removeArchiveQueueAndCommit(mountInfo.tapePool, logContext); log::ScopedParamContainer params(logContext); params.add("tapepool", mountInfo.tapePool) .add("queueObject", aq.getAddressIfSet()); @@ -2180,7 +2191,7 @@ std::list<std::unique_ptr<SchedulerDatabase::RetrieveJob> > OStoreDB::RetrieveMo ScopedExclusiveLock rexl(re); re.fetch(); try { - re.removeRetrieveQueueAndCommit(mountInfo.vid); + re.removeRetrieveQueueAndCommit(mountInfo.vid, logContext); log::ScopedParamContainer params(logContext); params.add("vid", mountInfo.vid) .add("queueObject", rq.getAddressIfSet()); @@ -2353,7 +2364,7 @@ std::list<std::unique_ptr<SchedulerDatabase::RetrieveJob> > OStoreDB::RetrieveMo // The queue should be removed as it is empty. ScopedExclusiveLock rexl(re); re.fetch(); - re.removeArchiveQueueAndCommit(mountInfo.tapePool); + re.removeArchiveQueueAndCommit(mountInfo.tapePool, logContext); log::ScopedParamContainer params(logContext); params.add("tapepool", mountInfo.tapePool) .add("queueObject", rq.getAddressIfSet()); @@ -2666,7 +2677,7 @@ void OStoreDB::RetrieveJob::fail(log::LogContext &logContext) { objectstore::ScopedExclusiveLock rrl(m_retrieveRequest); m_retrieveRequest.fetch(); // Add a job failure. If the job is failed, we will delete it. - if (m_retrieveRequest.addJobFailure(selectedCopyNb, m_mountId)) { + if (m_retrieveRequest.addJobFailure(selectedCopyNb, m_mountId, logContext)) { // The job will not be retried. Either another jobs for the same request is // queued and keeps the request referenced or the request has been deleted. // In any case, we can forget it. diff --git a/scheduler/OStoreDB/OStoreDB.hpp b/scheduler/OStoreDB/OStoreDB.hpp index d1094f9b250bc7dbba660ed097de86bd44a6465f..925f798e09ec78ab2bd3664f26780e708b651324 100644 --- a/scheduler/OStoreDB/OStoreDB.hpp +++ b/scheduler/OStoreDB/OStoreDB.hpp @@ -207,7 +207,7 @@ public: objectstore::Backend & be, catalogue::Catalogue & catalogue, log::Logger &logger): m_request(be), m_lock(), m_objectStore(be), m_catalogue(catalogue), m_logger(logger), m_agentReference(agentReference), m_closed(false) {} virtual ~ArchiveToFileRequestCancelation(); - void complete() override; + void complete(log::LogContext & lc) override; private: objectstore::ArchiveRequest m_request; objectstore::ScopedExclusiveLock m_lock; diff --git a/scheduler/OStoreDB/OStoreDBFactory.hpp b/scheduler/OStoreDB/OStoreDBFactory.hpp index 877f4b7327e76f91324d7178a162a9f52ee2975c..d7fd49501e324eee53c5fbaf02ab505ad7f90497 100644 --- a/scheduler/OStoreDB/OStoreDBFactory.hpp +++ b/scheduler/OStoreDB/OStoreDBFactory.hpp @@ -187,9 +187,10 @@ m_OStoreDB(*m_backend, *m_catalogue, *m_logger), m_agentReference("OStoreDBFacto objectstore::Agent agent(m_agentReference.getAgentAddress(), *m_backend); agent.initialize(); objectstore::EntryLogSerDeser cl("user0", "systemhost", time(NULL)); - re.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl); + log::LogContext lc(*m_logger); + re.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl, lc); rel.release(); - agent.insertAndRegisterSelf(); + agent.insertAndRegisterSelf(lc); rel.lock(re); re.fetch(); re.addOrGetDriveRegisterPointerAndCommit(m_agentReference, cl); @@ -220,9 +221,10 @@ m_OStoreDB(*m_backend, *m_catalogue, *m_logger), m_agentReference("OStoreDBFact objectstore::Agent agent(m_agentReference.getAgentAddress(), *m_backend); agent.initialize(); objectstore::EntryLogSerDeser cl("user0", "systemhost", time(NULL)); - re.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl); + log::LogContext lc(*m_logger); + re.addOrGetAgentRegisterPointerAndCommit(m_agentReference, cl, lc); rel.release(); - agent.insertAndRegisterSelf(); + agent.insertAndRegisterSelf(lc); rel.lock(re); re.fetch(); re.addOrGetDriveRegisterPointerAndCommit(m_agentReference, cl); diff --git a/scheduler/SchedulerDatabase.hpp b/scheduler/SchedulerDatabase.hpp index 544965835450402051fa9c7151fb190f36d58613..bac987e63207585da78c650b07cd8e743eff5c36 100644 --- a/scheduler/SchedulerDatabase.hpp +++ b/scheduler/SchedulerDatabase.hpp @@ -147,7 +147,7 @@ public: */ class ArchiveToFileRequestCancelation { public: - virtual void complete() = 0; + virtual void complete(log::LogContext & lc) = 0; virtual ~ArchiveToFileRequestCancelation() {}; };