diff --git a/catalogue/Catalogue.hpp b/catalogue/Catalogue.hpp index 9f4b3e2608048aaeed0a007840f6a8763375a909..e6361d4914924b154ab573d3534c407e52f34090 100644 --- a/catalogue/Catalogue.hpp +++ b/catalogue/Catalogue.hpp @@ -58,6 +58,7 @@ #include "common/dataStructures/VidToTapeMap.hpp" #include "common/dataStructures/WriteTestResult.hpp" #include "common/exception/UserError.hpp" +#include "common/log/LogContext.hpp" #include "common/log/Logger.hpp" #include <list> @@ -159,13 +160,15 @@ public: * @param user The user for whom the file is to be retrieved. This will be * used by the Catalogue to determine the mount policy to be used when * retrieving the file. + * @param lc The log context. * * @return The information required to queue the associated retrieve request(s). */ virtual common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile( const std::string &instanceName, const uint64_t archiveFileId, - const common::dataStructures::UserIdentity &user) = 0; + const common::dataStructures::UserIdentity &user, + log::LogContext &lc) = 0; /** * Notifies the CTA catalogue that the specified tape has been mounted in diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp index e239c84b26dabd913315e82e9f078153e3d8f40c..31f13aaaf81c3fa934eb877aa6ae75df5e6d41d8 100644 --- a/catalogue/CatalogueTest.cpp +++ b/catalogue/CatalogueTest.cpp @@ -4881,11 +4881,13 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFile) { ASSERT_EQ(m_admin.host, rule.creationLog.host); ASSERT_EQ(rule.creationLog, rule.lastModificationLog); + log::LogContext dummyLc(m_dummyLog); + common::dataStructures::UserIdentity userIdentity; userIdentity.name = requesterName; userIdentity.group = "group"; const common::dataStructures::RetrieveFileQueueCriteria queueCriteria = - m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity); + m_catalogue->prepareToRetrieveFile(diskInstanceName1, archiveFileId, userIdentity, dummyLc); ASSERT_EQ(2, queueCriteria.archiveFile.tapeFiles.size()); ASSERT_EQ(archivePriority, queueCriteria.mountPolicy.archivePriority); @@ -4893,7 +4895,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFile) { ASSERT_EQ(maxDrivesAllowed, queueCriteria.mountPolicy.maxDrivesAllowed); // Check that the diskInstanceName mismatch detection works - ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName2, archiveFileId, userIdentity), + ASSERT_THROW(m_catalogue->prepareToRetrieveFile(diskInstanceName2, archiveFileId, userIdentity, dummyLc), exception::UserError); } diff --git a/catalogue/DummyCatalogue.hpp b/catalogue/DummyCatalogue.hpp index b3eb001562c73bfe50ed2487755280ad1d43f933..49509b6aadc2594fbb65e96d7b4d57bbdcb99828 100644 --- a/catalogue/DummyCatalogue.hpp +++ b/catalogue/DummyCatalogue.hpp @@ -99,7 +99,7 @@ public: void noSpaceLeftOnTape(const std::string& vid) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } void ping() { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } common::dataStructures::ArchiveFileQueueCriteria prepareForNewFile(const std::string& diskInstanceName, const std::string& storageClassName, const common::dataStructures::UserIdentity& user) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } - common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& instanceName, const uint64_t archiveFileId, const common::dataStructures::UserIdentity& user) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } + common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile(const std::string& instanceName, const uint64_t archiveFileId, const common::dataStructures::UserIdentity& user, log::LogContext &lc) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } void reclaimTape(const common::dataStructures::SecurityIdentity& admin, const std::string& vid) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } void setTapeDisabled(const common::dataStructures::SecurityIdentity& admin, const std::string& vid, const bool disabledValue) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } void setTapeFull(const common::dataStructures::SecurityIdentity& admin, const std::string& vid, const bool fullValue) { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); } @@ -139,4 +139,4 @@ private: std::map<std::string, bool> m_tapeEnabling; }; -}} // namespace cta::catalogue. \ No newline at end of file +}} // namespace cta::catalogue. diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index 6e831e2532268eca95dbef996c2bfb1a41f3d05d..eff3cceaddd2f5393e77d5caa208693974e5da90 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -25,6 +25,7 @@ #include "common/exception/UserError.hpp" #include "common/make_unique.hpp" #include "common/threading/MutexLocker.hpp" +#include "common/Timer.hpp" #include "common/utils/utils.hpp" #include "rdbms/AutoRollback.hpp" @@ -3959,10 +3960,14 @@ void RdbmsCatalogue::throwIfCommonEventDataMismatch(const common::dataStructures common::dataStructures::RetrieveFileQueueCriteria RdbmsCatalogue::prepareToRetrieveFile( const std::string &diskInstanceName, const uint64_t archiveFileId, - const common::dataStructures::UserIdentity &user) { + const common::dataStructures::UserIdentity &user, + log::LogContext &lc) { try { + cta::utils::Timer t; auto conn = m_connPool.getConn(); + const auto getConnTime = t.secs(utils::Timer::resetCounter); std::unique_ptr<common::dataStructures::ArchiveFile> archiveFile = getArchiveFile(conn, archiveFileId); + const auto getArchiveFileTime = t.secs(utils::Timer::resetCounter); if(nullptr == archiveFile.get()) { exception::Exception ex; ex.getMessage() << "Archive file with ID " << archiveFileId << " does not exist"; @@ -3977,8 +3982,17 @@ common::dataStructures::RetrieveFileQueueCriteria RdbmsCatalogue::prepareToRetri throw ue; } + t.reset(); const RequesterAndGroupMountPolicies mountPolicies = getMountPolicies(conn, diskInstanceName, user.name, user.group); + const auto getMountPoliciesTime = t.secs(utils::Timer::resetCounter); + + log::ScopedParamContainer spc(lc); + spc.add("getConnTime", getConnTime) + .add("getArchiveFileTime", getArchiveFileTime) + .add("getMountPoliciesTime", getMountPoliciesTime); + lc.log(log::INFO, "Catalogue::prepareToRetrieve internal timings"); + // Requester mount policies overrule requester group mount policies common::dataStructures::MountPolicy mountPolicy; if(!mountPolicies.requesterMountPolicies.empty()) { diff --git a/catalogue/RdbmsCatalogue.hpp b/catalogue/RdbmsCatalogue.hpp index 7868dbcf0ff06bffbab25f2be347bb46102e919e..16636832903212174f5059a6c005a6faccba7645 100644 --- a/catalogue/RdbmsCatalogue.hpp +++ b/catalogue/RdbmsCatalogue.hpp @@ -147,13 +147,15 @@ public: * @param user The user for whom the file is to be retrieved. This will be * used by the Catalogue to determine the mount policy to be used when * retrieving the file. + * @param lc The log context. * * @return The information required to queue the associated retrieve request(s). */ common::dataStructures::RetrieveFileQueueCriteria prepareToRetrieveFile( const std::string &instanceName, const uint64_t archiveFileId, - const common::dataStructures::UserIdentity &user) override; + const common::dataStructures::UserIdentity &user, + log::LogContext &lc) override; /** * Notifies the CTA catalogue that the specified tape has been mounted in diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp index c5297fb2b29cf0ab81c13eb1b3ffe48e7c0fb609..e537fbb379449647284b29a267faed168de16490 100644 --- a/scheduler/Scheduler.cpp +++ b/scheduler/Scheduler.cpp @@ -141,7 +141,7 @@ void Scheduler::queueRetrieve( utils::Timer t; // Get the queue criteria const common::dataStructures::RetrieveFileQueueCriteria queueCriteria = - m_catalogue.prepareToRetrieveFile(instanceName, request.archiveFileID, request.requester); + m_catalogue.prepareToRetrieveFile(instanceName, request.archiveFileID, request.requester, lc); auto catalogueTime = t.secs(cta::utils::Timer::resetCounter); std::string selectedVid = m_db.queueRetrieve(request, queueCriteria, lc); auto schedulerDbTime = t.secs();