From f91231827a6ff1f8426cd35a27be437ddcbe57ba Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Tue, 17 Mar 2026 17:25:12 +0100 Subject: [PATCH 1/2] DPL: protect against missing monitoring --- Framework/AnalysisSupport/src/DataInputDirector.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Framework/AnalysisSupport/src/DataInputDirector.cxx b/Framework/AnalysisSupport/src/DataInputDirector.cxx index ace4565449c4b..7027655b7abe7 100644 --- a/Framework/AnalysisSupport/src/DataInputDirector.cxx +++ b/Framework/AnalysisSupport/src/DataInputDirector.cxx @@ -314,7 +314,9 @@ void DataInputDescriptor::printFileOpening() monitoringInfo += fmt::format(",se={},open_time={:.1f}", alienFile->GetSE(), alienFile->GetElapsed()); } #endif - mContext.monitoring->send(o2::monitoring::Metric{monitoringInfo, "aod-file-open-info"}.addTag(o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::DPL)); + if (mContext.monitoring) { + mContext.monitoring->send(o2::monitoring::Metric{monitoringInfo, "aod-file-open-info"}.addTag(o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::DPL)); + } LOGP(info, "Opening file: {}", monitoringInfo); } @@ -335,7 +337,9 @@ void DataInputDescriptor::printFileStatistics() monitoringInfo += fmt::format(",se={},open_time={:.1f}", alienFile->GetSE(), alienFile->GetElapsed()); } #endif - mContext.monitoring->send(o2::monitoring::Metric{monitoringInfo, "aod-file-read-info"}.addTag(o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::DPL)); + if (mContext.monitoring) { + mContext.monitoring->send(o2::monitoring::Metric{monitoringInfo, "aod-file-read-info"}.addTag(o2::monitoring::tags::Key::Subsystem, o2::monitoring::tags::Value::DPL)); + } LOGP(info, "Read info: {}", monitoringInfo); } From c9d07d8384e130ffc78c538b819e9d6e5cc964b0 Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Tue, 17 Mar 2026 17:25:12 +0100 Subject: [PATCH 2/2] DPL: allow non-owning TFileFileSystem Given this filesystem is really a virtual entity, it makes sense to allow for actual ownership of the TFile elsewhere. --- .../Core/include/Framework/RootArrowFilesystem.h | 3 ++- Framework/Core/src/RootArrowFilesystem.cxx | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Framework/Core/include/Framework/RootArrowFilesystem.h b/Framework/Core/include/Framework/RootArrowFilesystem.h index 5aceaed077001..07aaa348c220a 100644 --- a/Framework/Core/include/Framework/RootArrowFilesystem.h +++ b/Framework/Core/include/Framework/RootArrowFilesystem.h @@ -146,7 +146,7 @@ class TFileFileSystem : public VirtualRootFileSystemBase public: arrow::Result GetFileInfo(const std::string& path) override; - TFileFileSystem(TDirectoryFile* f, size_t readahead, RootObjectReadingFactory&); + TFileFileSystem(TDirectoryFile* f, size_t readahead, RootObjectReadingFactory&, bool ownsFile = true); ~TFileFileSystem() override; @@ -172,6 +172,7 @@ class TFileFileSystem : public VirtualRootFileSystemBase private: TDirectoryFile* mFile; RootObjectReadingFactory& mObjectFactory; + bool mOwnsFile = true; }; class TBufferFileFS : public VirtualRootFileSystemBase diff --git a/Framework/Core/src/RootArrowFilesystem.cxx b/Framework/Core/src/RootArrowFilesystem.cxx index 403e393ec6090..6976c710062e6 100644 --- a/Framework/Core/src/RootArrowFilesystem.cxx +++ b/Framework/Core/src/RootArrowFilesystem.cxx @@ -34,18 +34,21 @@ namespace o2::framework { using arrow::Status; -TFileFileSystem::TFileFileSystem(TDirectoryFile* f, size_t readahead, RootObjectReadingFactory& factory) +TFileFileSystem::TFileFileSystem(TDirectoryFile* f, size_t readahead, RootObjectReadingFactory& factory, bool ownsFile) : VirtualRootFileSystemBase(), mFile(f), - mObjectFactory(factory) + mObjectFactory(factory), + mOwnsFile(ownsFile) { ((TFile*)mFile)->SetReadaheadSize(50 * 1024 * 1024); } TFileFileSystem::~TFileFileSystem() { - mFile->Close(); - delete mFile; + if (mOwnsFile) { + mFile->Close(); + delete mFile; + } } std::shared_ptr TFileFileSystem::GetObjectHandler(arrow::dataset::FileSource source)