From 83d0a66ba3ec7c3c33c8084232eaf5dcf4a7d104 Mon Sep 17 00:00:00 2001 From: Autumn McKee Date: Wed, 26 Aug 2026 15:10:39 +0200 Subject: [PATCH] Add signposts for AOD reader state transitions --- .../src/AODJAlienReaderHelpers.cxx | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Framework/AnalysisSupport/src/AODJAlienReaderHelpers.cxx b/Framework/AnalysisSupport/src/AODJAlienReaderHelpers.cxx index 18401554c4b4d..d993884dae6bf 100644 --- a/Framework/AnalysisSupport/src/AODJAlienReaderHelpers.cxx +++ b/Framework/AnalysisSupport/src/AODJAlienReaderHelpers.cxx @@ -34,6 +34,7 @@ #include "Framework/RawDeviceService.h" #include "Framework/DataSpecUtils.h" #include "Framework/MessageContext.h" +#include "Framework/Signpost.h" #include "Framework/StringContext.h" #include "Framework/ConfigContext.h" #include "DataInputDirector.h" @@ -60,6 +61,8 @@ using namespace o2; using namespace o2::aod; +O2_DECLARE_DYNAMIC_LOG(aod_reader); + struct RuntimeWatchdog { int numberTimeFrames; uint64_t startTime; @@ -288,6 +291,30 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const INVALID_TIMEFRAME, }; auto readState = TFReaderState::READ_FIRST_TABLE; + [[maybe_unused]] auto stateName = [](TFReaderState state) -> char const* { + switch (state) { + case TFReaderState::READ_FIRST_TABLE: + return "READ_FIRST_TABLE"; + case TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE: + return "READ_FIRST_TABLE_FROM_NEXT_FILE"; + case TFReaderState::READ_NEXT_TABLE: + return "READ_NEXT_TABLE"; + case TFReaderState::TRY_NEXT_FILE: + return "TRY_NEXT_FILE"; + case TFReaderState::TIMEFRAME_READ: + return "TIMEFRAME_READ"; + case TFReaderState::INVALID_TIMEFRAME: + return "INVALID_TIMEFRAME"; + } + return "UNKNOWN"; + }; + O2_SIGNPOST_ID_FROM_POINTER(readerStateId, aod_reader, &readState); + auto transitionTo = [&](TFReaderState nextState) { + O2_SIGNPOST_EVENT_EMIT(aod_reader, readerStateId, "state transition", + "%{public}s -> %{public}s (fileCounter %d, timeFrame %d)", + stateName(readState), stateName(nextState), fcnt, ntf); + readState = nextState; + }; size_t routeIndex = 0; auto reportTimeframe = [&didir, &fcnt, &ntf, &outputs, &TFNumberHeader, &TFFileNameHeader, reportTFN, reportTFFileName](header::DataHeader const& dh) { if (reportTFN) { @@ -347,11 +374,11 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const while (readState != TFReaderState::TIMEFRAME_READ) { switch (readState) { case TFReaderState::READ_FIRST_TABLE: - readState = tryReadTable(readState); + transitionTo(tryReadTable(readState)); break; case TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE: case TFReaderState::READ_NEXT_TABLE: - readState = tryReadTable(readState); + transitionTo(tryReadTable(readState)); if (readState == TFReaderState::TRY_NEXT_FILE) { // Once a file has been selected, every requested table must exist. auto concrete = DataSpecUtils::asConcreteDataMatcher(requestedTables[routeIndex].matcher); @@ -371,7 +398,7 @@ AlgorithmSpec AODJAlienReaderHelpers::rootFileReaderCallback(ConfigContext const } ntf = 0; routeIndex = 0; - readState = TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE; + transitionTo(TFReaderState::READ_FIRST_TABLE_FROM_NEXT_FILE); break; case TFReaderState::INVALID_TIMEFRAME: return;