From 39dedc615c79bbe2de9c104bc162f949ba56ec54 Mon Sep 17 00:00:00 2001 From: andrius Date: Wed, 24 Jun 2020 16:13:38 +0200 Subject: [PATCH 1/2] Added QTests to protobuf files in DQMFileSaverPB --- .../FileIO/plugins/DQMFileSaverBase.cc | 5 +++++ DQMServices/FileIO/plugins/DQMFileSaverPB.cc | 22 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/DQMServices/FileIO/plugins/DQMFileSaverBase.cc b/DQMServices/FileIO/plugins/DQMFileSaverBase.cc index ce05a8100ae23..492056fb2f2ef 100644 --- a/DQMServices/FileIO/plugins/DQMFileSaverBase.cc +++ b/DQMServices/FileIO/plugins/DQMFileSaverBase.cc @@ -8,6 +8,7 @@ #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/MessageLogger/interface/JobReport.h" #include "FWCore/Utilities/interface/TimeOfDay.h" +#include "DataFormats/Histograms/interface/DQMToken.h" #include "DQMFileSaverBase.h" @@ -37,6 +38,10 @@ DQMFileSaverBase::DQMFileSaverBase(const edm::ParameterSet &ps) { std::unique_lock lck(initial_fp_lock_); initial_fp_ = fp; + + // This makes sure a file saver runs in a very end + consumesMany(); + consumesMany(); } DQMFileSaverBase::~DQMFileSaverBase() = default; diff --git a/DQMServices/FileIO/plugins/DQMFileSaverPB.cc b/DQMServices/FileIO/plugins/DQMFileSaverPB.cc index 0aae3aa55d30a..779989cbfa092 100644 --- a/DQMServices/FileIO/plugins/DQMFileSaverPB.cc +++ b/DQMServices/FileIO/plugins/DQMFileSaverPB.cc @@ -236,8 +236,26 @@ void DQMFileSaverPB::savePB(DQMStore* store, std::string const& filename, int ru histo.set_size(buffer.Length()); histo.set_streamed_histo((void const*)buffer.Buffer(), buffer.Length()); - // Save quality reports if this is not in reference section. - // XXX not supported by protobuf files. + // Save quality reports + for (QReport *qr : me->getQReports()) { + std::string result; + // TODO: 64 is likely too short; memory corruption in the old code? + char buf[64]; + std::snprintf(buf, sizeof(buf), "qr=st:%d:%.*g:", qr->getStatus(), DBL_DIG + 2, qr->getQTresult()); + result = '<' + me->getName() + '.' + qr->getQRName() + '>'; + result += buf; + result += qr->getAlgorithm() + ':' + qr->getMessage(); + result += "getName() + '.' + qr->getQRName() + '>'; + TObjString str(result.c_str()); + + dqmstorepb::ROOTFilePB::Histo& qr_histo = *dqmstore_message.add_histo(); + TBufferFile qr_buffer(TBufferFile::kWrite); + qr_buffer.WriteObject(&str); + qr_histo.set_full_pathname(me->getFullname() + '.' + qr->getQRName()); + qr_histo.set_flags(static_cast(MonitorElement::Kind::STRING)); + qr_histo.set_size(qr_buffer.Length()); + qr_histo.set_streamed_histo((void const*)qr_buffer.Buffer(), qr_buffer.Length()); + } // Save efficiency tag, if any. // XXX not supported by protobuf files. From ad7843bc83706382f6789a31f25d74f1e21b03b3 Mon Sep 17 00:00:00 2001 From: andrius Date: Wed, 24 Jun 2020 16:43:08 +0200 Subject: [PATCH 2/2] Fixed code checks --- DQMServices/FileIO/plugins/DQMFileSaverPB.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DQMServices/FileIO/plugins/DQMFileSaverPB.cc b/DQMServices/FileIO/plugins/DQMFileSaverPB.cc index 779989cbfa092..a044d6e383863 100644 --- a/DQMServices/FileIO/plugins/DQMFileSaverPB.cc +++ b/DQMServices/FileIO/plugins/DQMFileSaverPB.cc @@ -237,7 +237,7 @@ void DQMFileSaverPB::savePB(DQMStore* store, std::string const& filename, int ru histo.set_streamed_histo((void const*)buffer.Buffer(), buffer.Length()); // Save quality reports - for (QReport *qr : me->getQReports()) { + for (QReport* qr : me->getQReports()) { std::string result; // TODO: 64 is likely too short; memory corruption in the old code? char buf[64];