From 4434a6f8bb6762a510fcf4b6822d2b35855e4a47 Mon Sep 17 00:00:00 2001
From: Cedric Caffy <cedric.caffy@cern.ch>
Date: Fri, 26 Feb 2021 09:36:27 +0100
Subject: [PATCH] [checksumBlob] The first checksum information in a
 checksumBlob can be added to log parameters

---
 catalogue/MysqlCatalogue.cpp                          |  6 ++----
 catalogue/OracleCatalogue.cpp                         |  4 ++--
 catalogue/PostgresCatalogue.cpp                       |  4 ++--
 catalogue/RdbmsCatalogue.cpp                          |  4 ++--
 catalogue/SqliteCatalogue.cpp                         |  4 ++--
 common/checksum/ChecksumBlob.cpp                      | 11 +++++++++++
 common/checksum/ChecksumBlob.hpp                      |  8 ++++++++
 scheduler/Scheduler.cpp                               |  4 ++--
 .../castor/tape/tapeserver/daemon/DiskReadTask.cpp    |  9 +++++----
 .../tape/tapeserver/daemon/MigrationReportPacker.cpp  |  5 ++++-
 10 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/catalogue/MysqlCatalogue.cpp b/catalogue/MysqlCatalogue.cpp
index c5bc490ed4..fb2095ef8f 100644
--- a/catalogue/MysqlCatalogue.cpp
+++ b/catalogue/MysqlCatalogue.cpp
@@ -629,7 +629,6 @@ void MysqlCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string &
          .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
          .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
-         .add("checksumBlob", archiveFile->checksumBlob)
          .add("creationTime", std::to_string(archiveFile->creationTime))
          .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
          .add("storageClass", archiveFile->storageClass)
@@ -644,9 +643,9 @@ void MysqlCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string &
           << " blockId: " << it->blockId
           << " creationTime: " << it->creationTime
           << " fileSize: " << it->fileSize
-          << " checksumBlob: " << it->checksumBlob //this shouldn't be here: repeated field
           << " copyNb: " << it->copyNb;
         spc.add("TAPE FILE", tapeCopyLogStream.str());
+        archiveFile->checksumBlob.addFirstChecksumToLog(spc);
       }
       lc.log(log::WARNING, "Failed to delete archive file because the disk instance of the request does not match that "
         "of the archived file");
@@ -694,7 +693,6 @@ void MysqlCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string &
        .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
        .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
-       .add("checksumBlob", archiveFile->checksumBlob)
        .add("creationTime", std::to_string(archiveFile->creationTime))
        .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
        .add("storageClass", archiveFile->storageClass)
@@ -705,6 +703,7 @@ void MysqlCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string &
        .add("deleteFromArchiveFileTime", deleteFromArchiveFileTime)
        .add("setTapeDirtyTime",setTapeDirtyTime)
        .add("commitTime", commitTime);
+    archiveFile->checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << it->copyNb
@@ -713,7 +712,6 @@ void MysqlCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string &
         << " blockId: " << it->blockId
         << " creationTime: " << it->creationTime
         << " fileSize: " << it->fileSize
-        << " checksumBlob: " << it->checksumBlob //this shouldn't be here: repeated field
         << " copyNb: " << static_cast<int>(it->copyNb); //this shouldn't be here: repeated field
       spc.add("TAPE FILE", tapeCopyLogStream.str());
     }
diff --git a/catalogue/OracleCatalogue.cpp b/catalogue/OracleCatalogue.cpp
index 30915eedb1..a0679a3203 100644
--- a/catalogue/OracleCatalogue.cpp
+++ b/catalogue/OracleCatalogue.cpp
@@ -956,13 +956,13 @@ void OracleCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
          .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
          .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
-         .add("checksumBlob", archiveFile->checksumBlob)
          .add("creationTime", std::to_string(archiveFile->creationTime))
          .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
          .add("storageClass", archiveFile->storageClass)
          .add("getConnTime", getConnTime)
          .add("createStmtTime", createStmtTime)
          .add("selectFromArchiveFileTime", selectFromArchiveFileTime);
+      archiveFile->checksumBlob.addFirstChecksumToLog(spc);
       for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
         std::stringstream tapeCopyLogStream;
         tapeCopyLogStream << "copy number: " << static_cast<int>(it->copyNb)
@@ -1020,7 +1020,6 @@ void OracleCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
        .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
        .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
-       .add("checksumBlob", archiveFile->checksumBlob)
        .add("creationTime", std::to_string(archiveFile->creationTime))
        .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
        .add("storageClass", archiveFile->storageClass)
@@ -1031,6 +1030,7 @@ void OracleCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
        .add("setTapeDirtyTime",setTapeDirtyTime)
        .add("deleteFromArchiveFileTime", deleteFromArchiveFileTime)
        .add("commitTime", commitTime);
+    archiveFile->checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << it->copyNb
diff --git a/catalogue/PostgresCatalogue.cpp b/catalogue/PostgresCatalogue.cpp
index e179a58c6b..449dbc9f6a 100644
--- a/catalogue/PostgresCatalogue.cpp
+++ b/catalogue/PostgresCatalogue.cpp
@@ -900,13 +900,13 @@ void PostgresCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::strin
          .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
          .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
-         .add("checksumBlob", archiveFile->checksumBlob)
          .add("creationTime", std::to_string(archiveFile->creationTime))
          .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
          .add("storageClass", archiveFile->storageClass)
          .add("getConnTime", getConnTime)
          .add("createStmtTime", createStmtTime)
          .add("selectFromArchiveFileTime", selectFromArchiveFileTime);
+      archiveFile->checksumBlob.addFirstChecksumToLog(spc);
       for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
         std::stringstream tapeCopyLogStream;
         tapeCopyLogStream << "copy number: " << it->copyNb
@@ -965,7 +965,6 @@ void PostgresCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::strin
        .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
        .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
-       .add("checksumBlob", archiveFile->checksumBlob)
        .add("creationTime", std::to_string(archiveFile->creationTime))
        .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
        .add("storageClass", archiveFile->storageClass)
@@ -976,6 +975,7 @@ void PostgresCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::strin
        .add("deleteFromArchiveFileTime", deleteFromArchiveFileTime)
        .add("setTapeDirtyTime",setTapeDirtyTime)
        .add("commitTime", commitTime);
+    archiveFile->checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << it->copyNb
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index 903451754f..2af09a8a7d 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -8618,12 +8618,12 @@ void RdbmsCatalogue::moveArchiveFileToRecycleLog(const common::dataStructures::D
      .add("diskFileInfo.owner_uid", archiveFile.diskFileInfo.owner_uid)
      .add("diskFileInfo.gid", archiveFile.diskFileInfo.gid)
      .add("fileSize", std::to_string(archiveFile.fileSize))
-     .add("checksumBlob", archiveFile.checksumBlob)
      .add("creationTime", std::to_string(archiveFile.creationTime))
      .add("reconciliationTime", std::to_string(archiveFile.reconciliationTime))
      .add("diskFilePath",request.diskFilePath)
      .add("errorMessage",ex.getMessageValue())
      .add("storageClass", archiveFile.storageClass);
+    archiveFile.checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile.tapeFiles.begin(); it!=archiveFile.tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << static_cast<int>(it->copyNb)
@@ -8656,10 +8656,10 @@ void RdbmsCatalogue::moveArchiveFileToRecycleLog(const common::dataStructures::D
      .add("diskFileInfo.owner_uid", archiveFile.diskFileInfo.owner_uid)
      .add("diskFileInfo.gid", archiveFile.diskFileInfo.gid)
      .add("fileSize", std::to_string(archiveFile.fileSize))
-     .add("checksumBlob", archiveFile.checksumBlob)
      .add("creationTime", std::to_string(archiveFile.creationTime))
      .add("reconciliationTime", std::to_string(archiveFile.reconciliationTime))
      .add("storageClass", archiveFile.storageClass);
+    archiveFile.checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile.tapeFiles.begin(); it!=archiveFile.tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << static_cast<int>(it->copyNb)
diff --git a/catalogue/SqliteCatalogue.cpp b/catalogue/SqliteCatalogue.cpp
index 365232ffa8..9120b2a3d5 100644
--- a/catalogue/SqliteCatalogue.cpp
+++ b/catalogue/SqliteCatalogue.cpp
@@ -85,12 +85,12 @@ void SqliteCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
          .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
          .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
          .add("fileSize", std::to_string(archiveFile->fileSize))
-         .add("checksumBlob", archiveFile->checksumBlob)
          .add("creationTime", std::to_string(archiveFile->creationTime))
          .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
          .add("storageClass", archiveFile->storageClass)
          .add("getConnTime", getConnTime)
          .add("getArchiveFileTime", getArchiveFileTime);
+      archiveFile->checksumBlob.addFirstChecksumToLog(spc);
       for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
         std::stringstream tapeCopyLogStream;
         tapeCopyLogStream << "copy number: " << it->copyNb
@@ -159,7 +159,6 @@ void SqliteCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
        .add("diskFileInfo.owner_uid", archiveFile->diskFileInfo.owner_uid)
        .add("diskFileInfo.gid", archiveFile->diskFileInfo.gid)
        .add("fileSize", std::to_string(archiveFile->fileSize))
-       .add("checksumBlob", archiveFile->checksumBlob)
        .add("creationTime", std::to_string(archiveFile->creationTime))
        .add("reconciliationTime", std::to_string(archiveFile->reconciliationTime))
        .add("storageClass", archiveFile->storageClass)
@@ -169,6 +168,7 @@ void SqliteCatalogue::DO_NOT_USE_deleteArchiveFile_DO_NOT_USE(const std::string
        .add("deleteFromArchiveFileTime", deleteFromArchiveFileTime)
        .add("setTapeDirtyTime",setTapeDirtyTime)
        .add("commitTime", commitTime);
+    archiveFile->checksumBlob.addFirstChecksumToLog(spc);
     for(auto it=archiveFile->tapeFiles.begin(); it!=archiveFile->tapeFiles.end(); it++) {
       std::stringstream tapeCopyLogStream;
       tapeCopyLogStream << "copy number: " << it->copyNb
diff --git a/common/checksum/ChecksumBlob.cpp b/common/checksum/ChecksumBlob.cpp
index 507243fefc..68583c6dc3 100644
--- a/common/checksum/ChecksumBlob.cpp
+++ b/common/checksum/ChecksumBlob.cpp
@@ -150,6 +150,17 @@ std::string ChecksumBlob::ByteArrayToHex(const std::string &bytearray) {
   return value.str();
 }
 
+void ChecksumBlob::addFirstChecksumToLog(cta::log::ScopedParamContainer &spc) const{
+  const auto & csItor = m_cs.begin();
+  if(csItor != m_cs.end()){
+    auto & cs = *csItor;
+    std::string checksumTypeParam = "checksumType";
+    std::string checksumValueParam = "checksumValue";
+    spc.add(checksumTypeParam,ChecksumTypeName.at(cs.first))
+       .add(checksumValueParam,ByteArrayToHex(cs.second));
+  }
+}
+
 std::ostream &operator<<(std::ostream &os, const ChecksumBlob &csb) {
   os << "[ ";
   auto num_els = csb.m_cs.size();
diff --git a/common/checksum/ChecksumBlob.hpp b/common/checksum/ChecksumBlob.hpp
index 12c4b4d26d..adc404779f 100644
--- a/common/checksum/ChecksumBlob.hpp
+++ b/common/checksum/ChecksumBlob.hpp
@@ -23,6 +23,7 @@
 #include <common/exception/ChecksumBlobSizeMismatch.hpp>
 #include <common/exception/ChecksumTypeMismatch.hpp>
 #include <common/exception/ChecksumValueMismatch.hpp>
+#include "common/log/LogContext.hpp"
 
 namespace cta {
 namespace checksum {
@@ -189,6 +190,13 @@ public:
     }
     return true;
   }
+  
+  /**
+   * Adds the first checksum of the list of checksums
+   * in the log params container given in parameter
+   * @param spc the log param container to put the first checksum in
+   */
+  void addFirstChecksumToLog(cta::log::ScopedParamContainer &spc) const;
 
   /*!
    * Returns false if all the checksums in the blob match
diff --git a/scheduler/Scheduler.cpp b/scheduler/Scheduler.cpp
index 95555ea3ca..680d3c8751 100644
--- a/scheduler/Scheduler.cpp
+++ b/scheduler/Scheduler.cpp
@@ -164,7 +164,6 @@ std::string Scheduler::queueArchiveWithGivenId(const uint64_t archiveFileId, con
      .add("diskFilePath", request.diskFileInfo.path)
      .add("diskFileOwnerUid", request.diskFileInfo.owner_uid)
      .add("diskFileGid", request.diskFileInfo.gid)
-     .add("checksumBlob", request.checksumBlob)
      .add("archiveReportURL", midEllipsis(request.archiveReportURL, 50, 15))
      .add("archiveErrorReportURL", midEllipsis(request.archiveErrorReportURL, 50, 15))
      .add("creationHost", request.creationLog.host)
@@ -175,6 +174,7 @@ std::string Scheduler::queueArchiveWithGivenId(const uint64_t archiveFileId, con
      .add("srcURL", midEllipsis(request.srcURL, 50, 15))
      .add("catalogueTime", catalogueTime)
      .add("schedulerDbTime", schedulerDbTime);
+  request.checksumBlob.addFirstChecksumToLog(spc);
   lc.log(log::INFO, "Queued archive request");
   return archiveReqAddr;
 }
@@ -227,7 +227,6 @@ std::string Scheduler::queueRetrieve(
      .add("requesterName", request.requester.name)
      .add("requesterGroup", request.requester.group)
      .add("criteriaArchiveFileId", queueCriteria.archiveFile.archiveFileID)
-     .add("criteriaChecksumBlob", queueCriteria.archiveFile.checksumBlob)
      .add("criteriaCreationTime", queueCriteria.archiveFile.creationTime)
      .add("criteriaDiskFileId", queueCriteria.archiveFile.diskFileId)
      .add("criteriaDiskFileOwnerUid", queueCriteria.archiveFile.diskFileInfo.owner_uid)
@@ -235,6 +234,7 @@ std::string Scheduler::queueRetrieve(
      .add("criteriaFileSize", queueCriteria.archiveFile.fileSize)
      .add("reconciliationTime", queueCriteria.archiveFile.reconciliationTime)
      .add("storageClass", queueCriteria.archiveFile.storageClass);
+  queueCriteria.archiveFile.checksumBlob.addFirstChecksumToLog(spc);
   uint32_t copyNumber=0;
   for (auto & tf:queueCriteria.archiveFile.tapeFiles) {
     std::stringstream tc;
diff --git a/tapeserver/castor/tape/tapeserver/daemon/DiskReadTask.cpp b/tapeserver/castor/tape/tapeserver/daemon/DiskReadTask.cpp
index eb1399d028..61b5e0143e 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/DiskReadTask.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/DiskReadTask.cpp
@@ -165,10 +165,11 @@ void DiskReadTask::execute(cta::log::LogContext&  lc, cta::disk::DiskFileFactory
     m_nextTask.pushDataBlock(mb);
     mb=NULL;
     
-    LogContext::ScopedParam sp(lc, Param("blockID",blockId));
-    LogContext::ScopedParam sp0(lc, Param("exceptionMessage", e.getMessageValue()));
-    LogContext::ScopedParam sp1(lc,Param("fileSize",m_archiveJob->archiveFile.fileSize));
-    LogContext::ScopedParam sp2(lc,Param("checksumBlob",m_archiveJob->archiveFile.checksumBlob));
+    cta::log::ScopedParamContainer spc(lc);
+    spc.add("blockID",blockId)
+       .add("exceptionMessage", e.getMessageValue())
+       .add("fileSize",m_archiveJob->archiveFile.fileSize);
+    m_archiveJob->archiveFile.checksumBlob.addFirstChecksumToLog(spc);
     lc.log(cta::log::ERR,"Exception while reading a file");
     
     //deal here the number of mem block
diff --git a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
index 2c7bba9c61..7424d5e902 100644
--- a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
+++ b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPacker.cpp
@@ -198,8 +198,11 @@ void MigrationReportPacker::ReportSkipped::execute(MigrationReportPacker& report
   {
     cta::log::ScopedParamContainer params(reportPacker.m_lc);
     params.add("failureLog", m_failureLog)
+          .add("fileSize",m_skippedArchiveJob->archiveFile.fileSize)
           .add("fileId", m_skippedArchiveJob->archiveFile.archiveFileID);
-    reportPacker.m_lc.log(cta::log::ERR,"In MigrationReportPacker::ReportSkipped::execute(): skipping archive job after exception.");
+    m_skippedArchiveJob->archiveFile.checksumBlob.addFirstChecksumToLog(params);
+    
+    reportPacker.m_lc.log(cta::log::DEBUG,"In MigrationReportPacker::ReportSkipped::execute(): skipping archive job after exception.");
   }
   try {
     m_skippedArchiveJob->transferFailed(m_failureLog, reportPacker.m_lc);
-- 
GitLab