CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
edm::Path Class Reference

#include <Path.h>

Public Types

typedef WorkersInPath::size_type size_type
 
typedef hlt::HLTState State
 
typedef std::shared_ptr< HLTGlobalStatusTrigResPtr
 
typedef std::vector< WorkerInPathWorkersInPath
 

Public Member Functions

int bitPosition () const
 
unsigned int bitPosition (size_type i) const
 
void clearCounters ()
 
Worker const * getWorker (size_type i) const
 
std::string const & name () const
 
Pathoperator= (Path const &)=delete
 
 Path (int bitpos, std::string const &path_name, WorkersInPath const &workers, TrigResPtr trptr, ExceptionToActionTable const &actions, std::shared_ptr< ActivityRegistry > reg, StreamContext const *streamContext, std::atomic< bool > *stopProcessEvent, PathContext::PathType pathType)
 
 Path (Path const &)
 
void processOneOccurrenceAsync (WaitingTaskHolder, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *)
 
template<typename T >
void runAllModulesAsync (WaitingTaskHolder, typename T::TransitionInfoType const &, ServiceToken const &, StreamID const &, typename T::Context const *)
 
void setEarlyDeleteHelpers (std::map< const Worker *, EarlyDeleteHelper *> const &)
 
void setPathStatusInserter (PathStatusInserter *pathStatusInserter, Worker *pathStatusInserterWorker)
 
size_type size () const
 
int timesExcept () const
 
int timesExcept (size_type i) const
 
int timesFailed () const
 
int timesFailed (size_type i) const
 
int timesPassed () const
 
int timesPassed (size_type i) const
 
int timesRun () const
 
int timesVisited (size_type i) const
 

Private Member Functions

void finished (std::exception_ptr, StreamContext const *, EventTransitionInfo const &, StreamID const &)
 
bool handleWorkerFailure (cms::Exception &e, int nwrwue, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id) const
 
void recordStatus (int nwrwue, hlt::HLTState state)
 
void runNextWorkerAsync (unsigned int iNextModuleIndex, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *, oneapi::tbb::task_group &iGroup)
 
void threadsafe_setFailedModuleInfo (int nwrwue, std::exception_ptr)
 
void updateCounters (hlt::HLTState state)
 
void workerFinished (std::exception_ptr const *, unsigned int iModuleIndex, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *, oneapi::tbb::task_group &iGroup)
 

Static Private Member Functions

static void exceptionContext (cms::Exception &ex, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id, PathContext const &)
 

Private Attributes

ExceptionToActionTable const *const act_table_
 
std::shared_ptr< ActivityRegistry > const actReg_
 
int const bitpos_
 
int failedModuleIndex_
 
std::atomic< unsigned int > modulesToRun_
 
PathContext pathContext_
 
PathStatusInserterpathStatusInserter_
 
WorkerpathStatusInserterWorker_
 
State state_
 
std::atomic< bool > stateLock_ = false
 
std::atomic< bool > *const stopProcessingEvent_
 
int timesExcept_
 
int timesFailed_
 
int timesPassed_
 
int timesRun_
 
TrigResPtr const trptr_
 
WaitingTaskList waitingTasks_
 
WorkersInPath workers_
 

Detailed Description

Definition at line 41 of file Path.h.

Member Typedef Documentation

◆ size_type

typedef WorkersInPath::size_type edm::Path::size_type

Definition at line 46 of file Path.h.

◆ State

Definition at line 43 of file Path.h.

◆ TrigResPtr

typedef std::shared_ptr<HLTGlobalStatus> edm::Path::TrigResPtr

Definition at line 47 of file Path.h.

◆ WorkersInPath

typedef std::vector<WorkerInPath> edm::Path::WorkersInPath

Definition at line 45 of file Path.h.

Constructor & Destructor Documentation

◆ Path() [1/2]

edm::Path::Path ( int  bitpos,
std::string const &  path_name,
WorkersInPath const &  workers,
TrigResPtr  trptr,
ExceptionToActionTable const &  actions,
std::shared_ptr< ActivityRegistry reg,
StreamContext const *  streamContext,
std::atomic< bool > *  stopProcessEvent,
PathContext::PathType  pathType 
)

Definition at line 18 of file Path.cc.

References modulesToRun_, pathContext_, and workers_.

27  : timesRun_(),
28  timesPassed_(),
29  timesFailed_(),
30  timesExcept_(),
33  bitpos_(bitpos),
34  trptr_(trptr),
35  actReg_(areg),
38  pathContext_(path_name, streamContext, bitpos, pathType),
39  stopProcessingEvent_(stopProcessingEvent),
40  pathStatusInserter_(nullptr),
41  pathStatusInserterWorker_(nullptr) {
42  for (auto& workerInPath : workers_) {
43  workerInPath.setPathContext(&pathContext_);
44  }
45  modulesToRun_ = workers_.size();
46  }
TrigResPtr const trptr_
Definition: Path.h:109
std::atomic< unsigned int > modulesToRun_
Definition: Path.h:119
not [yet] run
Definition: HLTenums.h:17
roAction_t actions[nactions]
Definition: GenABIO.cc:181
int timesFailed_
Definition: Path.h:99
int timesExcept_
Definition: Path.h:100
PathContext pathContext_
Definition: Path.h:116
int const bitpos_
Definition: Path.h:108
std::atomic< bool > *const stopProcessingEvent_
Definition: Path.h:118
ExceptionToActionTable const *const act_table_
Definition: Path.h:112
WorkersInPath workers_
Definition: Path.h:114
int failedModuleIndex_
Definition: Path.h:105
std::shared_ptr< ActivityRegistry > const actReg_
Definition: Path.h:111
State state_
Definition: Path.h:106
int timesPassed_
Definition: Path.h:98
int timesRun_
Definition: Path.h:97
Worker * pathStatusInserterWorker_
Definition: Path.h:122
PathStatusInserter * pathStatusInserter_
Definition: Path.h:121

◆ Path() [2/2]

edm::Path::Path ( Path const &  r)

Definition at line 48 of file Path.cc.

References modulesToRun_, pathContext_, and workers_.

49  : timesRun_(r.timesRun_),
50  timesPassed_(r.timesPassed_),
51  timesFailed_(r.timesFailed_),
52  timesExcept_(r.timesExcept_),
53  failedModuleIndex_(r.failedModuleIndex_),
54  state_(r.state_),
55  bitpos_(r.bitpos_),
56  trptr_(r.trptr_),
57  actReg_(r.actReg_),
58  act_table_(r.act_table_),
59  workers_(r.workers_),
60  pathContext_(r.pathContext_),
61  stopProcessingEvent_(r.stopProcessingEvent_),
62  pathStatusInserter_(r.pathStatusInserter_),
63  pathStatusInserterWorker_(r.pathStatusInserterWorker_) {
64  for (auto& workerInPath : workers_) {
65  workerInPath.setPathContext(&pathContext_);
66  }
67  modulesToRun_ = workers_.size();
68  }
TrigResPtr const trptr_
Definition: Path.h:109
std::atomic< unsigned int > modulesToRun_
Definition: Path.h:119
int timesFailed_
Definition: Path.h:99
int timesExcept_
Definition: Path.h:100
PathContext pathContext_
Definition: Path.h:116
int const bitpos_
Definition: Path.h:108
std::atomic< bool > *const stopProcessingEvent_
Definition: Path.h:118
ExceptionToActionTable const *const act_table_
Definition: Path.h:112
WorkersInPath workers_
Definition: Path.h:114
int failedModuleIndex_
Definition: Path.h:105
std::shared_ptr< ActivityRegistry > const actReg_
Definition: Path.h:111
State state_
Definition: Path.h:106
int timesPassed_
Definition: Path.h:98
int timesRun_
Definition: Path.h:97
Worker * pathStatusInserterWorker_
Definition: Path.h:122
PathStatusInserter * pathStatusInserter_
Definition: Path.h:121

Member Function Documentation

◆ bitPosition() [1/2]

int edm::Path::bitPosition ( ) const
inline

Definition at line 73 of file Path.h.

References bitpos_.

Referenced by finished().

73 { return bitpos_; }
int const bitpos_
Definition: Path.h:108

◆ bitPosition() [2/2]

unsigned int edm::Path::bitPosition ( size_type  i) const
inline

Definition at line 90 of file Path.h.

References mps_fire::i, and workers_.

90 { return workers_.at(i).bitPosition(); }
WorkersInPath workers_
Definition: Path.h:114

◆ clearCounters()

void edm::Path::clearCounters ( )

Definition at line 198 of file Path.cc.

References edm::WorkerInPath::clearCounters(), edm::for_all(), timesExcept_, timesFailed_, timesPassed_, timesRun_, and workers_.

Referenced by edm::StreamSchedule::clearCounters().

198  {
199  using std::placeholders::_1;
201  for_all(workers_, std::bind(&WorkerInPath::clearCounters, _1));
202  }
int timesFailed_
Definition: Path.h:99
int timesExcept_
Definition: Path.h:100
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:14
WorkersInPath workers_
Definition: Path.h:114
int timesPassed_
Definition: Path.h:98
int timesRun_
Definition: Path.h:97

◆ exceptionContext()

void edm::Path::exceptionContext ( cms::Exception ex,
bool  isEvent,
bool  begin,
BranchType  branchType,
ModuleDescription const &  desc,
std::string const &  id,
PathContext const &  pathContext 
)
staticprivate

Definition at line 119 of file Path.cc.

References cms::Exception::addContext(), l1ctLayer2EG_cff::id, edm::InLumi, edm::InRun, and edm::PathContext::pathName().

Referenced by handleWorkerFailure().

125  {
126  std::ostringstream ost;
127  ost << "Running path '" << pathContext.pathName() << "'";
128  ex.addContext(ost.str());
129  ost.str("");
130  ost << "Processing ";
131  //For the event case, the Worker has already
132  // added the necessary module context to the exception
133  if (begin && branchType == InRun) {
134  ost << "stream begin Run";
135  } else if (begin && branchType == InLumi) {
136  ost << "stream begin LuminosityBlock ";
137  } else if (!begin && branchType == InLumi) {
138  ost << "stream end LuminosityBlock ";
139  } else if (!begin && branchType == InRun) {
140  ost << "stream end Run ";
141  } else if (isEvent) {
142  // It should be impossible to get here ...
143  ost << "Event ";
144  }
145  ost << id;
146  ex.addContext(ost.str());
147  }
void addContext(std::string const &context)
Definition: Exception.cc:165

◆ finished()

void edm::Path::finished ( std::exception_ptr  iException,
StreamContext const *  iContext,
EventTransitionInfo const &  iInfo,
StreamID const &  streamID 
)
private

Definition at line 324 of file Path.cc.

References actReg_, bitPosition(), CMS_SA_ALLOW, edm::WaitingTaskList::doneWaiting(), failedModuleIndex_, pathContext_, pathStatusInserter_, pathStatusInserterWorker_, recordStatus(), edm::Worker::runModuleDirectly(), edm::PathStatusInserter::setPathStatus(), state_, mps_update::status, updateCounters(), and waitingTasks_.

Referenced by processOneOccurrenceAsync(), and workerFinished().

327  {
329  auto failedModuleBitPosition = bitPosition(failedModuleIndex_);
330  recordStatus(failedModuleBitPosition, state_);
331  // Caught exception is propagated via WaitingTaskList
332  CMS_SA_ALLOW try {
333  HLTPathStatus status(state_, failedModuleBitPosition);
334 
335  if (pathStatusInserter_) { // pathStatusInserter is null for EndPaths
337  }
338  std::exception_ptr jException =
339  pathStatusInserterWorker_->runModuleDirectly<OccurrenceTraits<EventPrincipal, BranchActionStreamBegin>>(
340  iInfo, streamID, ParentContext(iContext), iContext);
341  if (jException && not iException) {
342  iException = jException;
343  }
344  actReg_->postPathEventSignal_(*iContext, pathContext_, status);
345  } catch (...) {
346  if (not iException) {
347  iException = std::current_exception();
348  }
349  }
350  waitingTasks_.doneWaiting(iException);
351  }
std::exception_ptr runModuleDirectly(typename T::TransitionInfoType const &, StreamID, ParentContext const &, typename T::Context const *)
Definition: Worker.h:1182
#define CMS_SA_ALLOW
void recordStatus(int nwrwue, hlt::HLTState state)
Definition: Path.cc:175
void setPathStatus(StreamID const &, HLTPathStatus const &)
PathContext pathContext_
Definition: Path.h:116
WaitingTaskList waitingTasks_
Definition: Path.h:117
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
void updateCounters(hlt::HLTState state)
Definition: Path.cc:181
int failedModuleIndex_
Definition: Path.h:105
std::shared_ptr< ActivityRegistry > const actReg_
Definition: Path.h:111
State state_
Definition: Path.h:106
int bitPosition() const
Definition: Path.h:73
Worker * pathStatusInserterWorker_
Definition: Path.h:122
PathStatusInserter * pathStatusInserter_
Definition: Path.h:121

◆ getWorker()

Worker const* edm::Path::getWorker ( size_type  i) const
inline

Definition at line 89 of file Path.h.

References mps_fire::i, and workers_.

Referenced by setEarlyDeleteHelpers().

89 { return workers_.at(i).getWorker(); }
WorkersInPath workers_
Definition: Path.h:114

◆ handleWorkerFailure()

bool edm::Path::handleWorkerFailure ( cms::Exception e,
int  nwrwue,
bool  isEvent,
bool  begin,
BranchType  branchType,
ModuleDescription const &  desc,
std::string const &  id 
) const
private

Definition at line 70 of file Path.cc.

References act_table_, writedatasetfile::action, edm::Exception::codeToString(), submitPVResolutionJobs::desc, MillePedeFileConverter_cfg::e, exceptionContext(), edm::exception_actions::FailPath, edm::ExceptionToActionTable::find(), pathContext_, edm::printCmsExceptionWarning(), edm::errors::ProductNotFound, edm::exception_actions::Rethrow, edm::exception_actions::SkipEvent, stopProcessingEvent_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by workerFinished().

76  {
77  if (e.context().empty()) {
78  exceptionContext(e, isEvent, begin, branchType, desc, id, pathContext_);
79  }
80  bool should_continue = true;
81 
82  // there is no support as of yet for specific paths having
83  // different exception behavior
84 
85  // If not processing an event, always rethrow.
87  switch (action) {
89  should_continue = false;
90  edm::printCmsExceptionWarning("FailPath", e);
91  break;
92  }
94  //Need the other Paths to stop as soon as possible
96  *stopProcessingEvent_ = true;
97  }
98  break;
99  }
100  default: {
103  if (e.category() == pNF) {
104  std::ostringstream ost;
105  ost << "If you wish to continue processing events after a " << pNF << " exception,\n"
106  << "add \"SkipEvent = cms.untracked.vstring('ProductNotFound')\" to the \"options\" PSet in the "
107  "configuration.\n";
108  e.addAdditionalInfo(ost.str());
109  }
110  }
111  //throw will copy which will slice the object
112  e.raise();
113  }
114  }
115 
116  return should_continue;
117  }
static const std::string & codeToString(Code)
-----------— implementation details ---------------—
Definition: EDMException.cc:54
PathContext pathContext_
Definition: Path.h:116
std::atomic< bool > *const stopProcessingEvent_
Definition: Path.h:118
ExceptionToActionTable const *const act_table_
Definition: Path.h:112
static void exceptionContext(cms::Exception &ex, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id, PathContext const &)
Definition: Path.cc:119
exception_actions::ActionCodes find(const std::string &category) const
void printCmsExceptionWarning(char const *behavior, cms::Exception const &e)

◆ name()

std::string const& edm::Path::name ( void  ) const
inline

◆ operator=()

Path& edm::Path::operator= ( Path const &  )
delete

◆ processOneOccurrenceAsync()

void edm::Path::processOneOccurrenceAsync ( WaitingTaskHolder  iTask,
EventTransitionInfo const &  iInfo,
ServiceToken const &  iToken,
StreamID const &  iStreamID,
StreamContext const *  iStreamContext 
)

Definition at line 218 of file Path.cc.

References actReg_, edm::WaitingTaskList::add(), failedModuleIndex_, finished(), edm::WaitingTaskHolder::group(), modulesToRun_, edm::hlt::Pass, pathContext_, edm::WaitingTaskList::reset(), runNextWorkerAsync(), state_, timesRun_, waitingTasks_, and workers_.

222  {
224  modulesToRun_ = workers_.size();
225  ++timesRun_;
226  waitingTasks_.add(iTask);
227  if (actReg_) {
228  ServiceRegistry::Operate guard(iToken);
229  actReg_->prePathEventSignal_(*iStreamContext, pathContext_);
230  }
231  //If the Path succeeds, these are the values we have at the end
232  state_ = hlt::Pass;
233  failedModuleIndex_ = workers_.size() - 1;
234 
235  if (workers_.empty()) {
236  ServiceRegistry::Operate guard(iToken);
237  finished(std::exception_ptr(), iStreamContext, iInfo, iStreamID);
238  return;
239  }
240 
241  runNextWorkerAsync(0, iInfo, iToken, iStreamID, iStreamContext, *iTask.group());
242  }
std::atomic< unsigned int > modulesToRun_
Definition: Path.h:119
void runNextWorkerAsync(unsigned int iNextModuleIndex, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *, oneapi::tbb::task_group &iGroup)
Definition: Path.cc:353
PathContext pathContext_
Definition: Path.h:116
WaitingTaskList waitingTasks_
Definition: Path.h:117
void reset()
Resets access to the resource so that added tasks will wait.
accept
Definition: HLTenums.h:18
void finished(std::exception_ptr, StreamContext const *, EventTransitionInfo const &, StreamID const &)
Definition: Path.cc:324
void add(oneapi::tbb::task_group *, WaitingTask *)
Adds task to the waiting list.
WorkersInPath workers_
Definition: Path.h:114
int failedModuleIndex_
Definition: Path.h:105
std::shared_ptr< ActivityRegistry > const actReg_
Definition: Path.h:111
State state_
Definition: Path.h:106
int timesRun_
Definition: Path.h:97

◆ recordStatus()

void edm::Path::recordStatus ( int  nwrwue,
hlt::HLTState  state 
)
private

Definition at line 175 of file Path.cc.

References bitpos_, and trptr_.

Referenced by finished().

175  {
176  if (trptr_) {
177  trptr_->at(bitpos_) = HLTPathStatus(state, nwrwue);
178  }
179  }
TrigResPtr const trptr_
Definition: Path.h:109
int const bitpos_
Definition: Path.h:108

◆ runAllModulesAsync()

template<typename T >
void edm::Path::runAllModulesAsync ( WaitingTaskHolder  task,
typename T::TransitionInfoType const &  info,
ServiceToken const &  token,
StreamID const &  streamID,
typename T::Context const *  context 
)

Definition at line 189 of file Path.h.

References visDQMUpload::context, info(), TrackValidation_cff::task, unpackBuffers-CaloStage2::token, and workers_.

193  {
194  for (auto& worker : workers_) {
195  worker.runWorkerAsync<T>(task, info, token, streamID, context);
196  }
197  }
static const TGPicture * info(bool iBackgroundIsBlack)
WorkersInPath workers_
Definition: Path.h:114
long double T

◆ runNextWorkerAsync()

void edm::Path::runNextWorkerAsync ( unsigned int  iNextModuleIndex,
EventTransitionInfo const &  iInfo,
ServiceToken const &  iToken,
StreamID const &  iID,
StreamContext const *  iContext,
oneapi::tbb::task_group &  iGroup 
)
private

Definition at line 353 of file Path.cc.

References info(), edm::ServiceWeakToken::lock(), edm::make_waiting_task(), workerFinished(), and workers_.

Referenced by processOneOccurrenceAsync(), and workerFinished().

358  {
359  //Figure out which next modules can run concurrently
360  const int firstModuleIndex = iNextModuleIndex;
361  int lastModuleIndex = firstModuleIndex;
362  while (lastModuleIndex + 1 != static_cast<int>(workers_.size()) and workers_[lastModuleIndex].runConcurrently()) {
363  ++lastModuleIndex;
364  }
365  for (; lastModuleIndex >= firstModuleIndex; --lastModuleIndex) {
366  ServiceWeakToken weakToken = iToken;
367  auto nextTask = make_waiting_task([this, lastModuleIndex, info = iInfo, iID, iContext, weakToken, &iGroup](
368  std::exception_ptr const* iException) {
369  this->workerFinished(iException, lastModuleIndex, info, weakToken.lock(), iID, iContext, iGroup);
370  });
371  workers_[lastModuleIndex].runWorkerAsync<OccurrenceTraits<EventPrincipal, BranchActionStreamBegin>>(
372  WaitingTaskHolder(iGroup, nextTask), iInfo, iToken, iID, iContext);
373  }
374  }
static const TGPicture * info(bool iBackgroundIsBlack)
void workerFinished(std::exception_ptr const *, unsigned int iModuleIndex, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *, oneapi::tbb::task_group &iGroup)
Definition: Path.cc:244
FunctorWaitingTask< F > * make_waiting_task(F f)
Definition: WaitingTask.h:92
WorkersInPath workers_
Definition: Path.h:114

◆ setEarlyDeleteHelpers()

void edm::Path::setEarlyDeleteHelpers ( std::map< const Worker *, EarlyDeleteHelper *> const &  iWorkerToDeleter)

Definition at line 204 of file Path.cc.

References newFWLiteAna::found, getWorker(), and size().

204  {
205  for (unsigned int index = 0; index != size(); ++index) {
206  auto found = iWorkerToDeleter.find(getWorker(index));
207  if (found != iWorkerToDeleter.end()) {
208  found->second->addedToPath();
209  }
210  }
211  }
Worker const * getWorker(size_type i) const
Definition: Path.h:89
size_type size() const
Definition: Path.h:84

◆ setPathStatusInserter()

void edm::Path::setPathStatusInserter ( PathStatusInserter pathStatusInserter,
Worker pathStatusInserterWorker 
)

Definition at line 213 of file Path.cc.

References pathStatusInserter_, and pathStatusInserterWorker_.

213  {
214  pathStatusInserter_ = pathStatusInserter;
215  pathStatusInserterWorker_ = pathStatusInserterWorker;
216  }
Worker * pathStatusInserterWorker_
Definition: Path.h:122
PathStatusInserter * pathStatusInserter_
Definition: Path.h:121

◆ size()

size_type edm::Path::size ( void  ) const
inline

Definition at line 84 of file Path.h.

References workers_.

Referenced by ntupleDataFormat._Collection::__iter__(), ntupleDataFormat._Collection::__len__(), and setEarlyDeleteHelpers().

84 { return workers_.size(); }
WorkersInPath workers_
Definition: Path.h:114

◆ threadsafe_setFailedModuleInfo()

void edm::Path::threadsafe_setFailedModuleInfo ( int  nwrwue,
std::exception_ptr  iExcept 
)
private

Definition at line 149 of file Path.cc.

References edm::hlt::Exception, edm::hlt::Fail, failedModuleIndex_, state_, and stateLock_.

Referenced by workerFinished().

149  {
150  bool expected = false;
151  while (stateLock_.compare_exchange_strong(expected, true)) {
152  expected = false;
153  }
154  if (iExcept) {
155  if (state_ == hlt::Exception) {
156  if (nwrwue < failedModuleIndex_) {
157  failedModuleIndex_ = nwrwue;
158  }
159  } else {
161  failedModuleIndex_ = nwrwue;
162  }
163  } else {
164  if (state_ != hlt::Exception) {
165  if (nwrwue < failedModuleIndex_) {
166  failedModuleIndex_ = nwrwue;
167  }
168  state_ = hlt::Fail;
169  }
170  }
171 
172  stateLock_ = false;
173  }
reject
Definition: HLTenums.h:19
int failedModuleIndex_
Definition: Path.h:105
State state_
Definition: Path.h:106
std::atomic< bool > stateLock_
Definition: Path.h:104

◆ timesExcept() [1/2]

int edm::Path::timesExcept ( ) const
inline

Definition at line 81 of file Path.h.

References timesExcept_.

81 { return timesExcept_; }
int timesExcept_
Definition: Path.h:100

◆ timesExcept() [2/2]

int edm::Path::timesExcept ( size_type  i) const
inline

Definition at line 88 of file Path.h.

References mps_fire::i, and workers_.

88 { return workers_.at(i).timesExcept(); }
WorkersInPath workers_
Definition: Path.h:114

◆ timesFailed() [1/2]

int edm::Path::timesFailed ( ) const
inline

Definition at line 80 of file Path.h.

References timesFailed_.

80 { return timesFailed_; }
int timesFailed_
Definition: Path.h:99

◆ timesFailed() [2/2]

int edm::Path::timesFailed ( size_type  i) const
inline

Definition at line 87 of file Path.h.

References mps_fire::i, and workers_.

87 { return workers_.at(i).timesFailed(); }
WorkersInPath workers_
Definition: Path.h:114

◆ timesPassed() [1/2]

int edm::Path::timesPassed ( ) const
inline

Definition at line 79 of file Path.h.

References timesPassed_.

79 { return timesPassed_; }
int timesPassed_
Definition: Path.h:98

◆ timesPassed() [2/2]

int edm::Path::timesPassed ( size_type  i) const
inline

Definition at line 86 of file Path.h.

References mps_fire::i, and workers_.

86 { return workers_.at(i).timesPassed(); }
WorkersInPath workers_
Definition: Path.h:114

◆ timesRun()

int edm::Path::timesRun ( ) const
inline

Definition at line 78 of file Path.h.

References timesRun_.

78 { return timesRun_; }
int timesRun_
Definition: Path.h:97

◆ timesVisited()

int edm::Path::timesVisited ( size_type  i) const
inline

Definition at line 85 of file Path.h.

References mps_fire::i, and workers_.

85 { return workers_.at(i).timesVisited(); }
WorkersInPath workers_
Definition: Path.h:114

◆ updateCounters()

void edm::Path::updateCounters ( hlt::HLTState  state)
private

Definition at line 181 of file Path.cc.

References edm::hlt::Exception, edm::hlt::Fail, edm::hlt::Pass, timesExcept_, timesFailed_, and timesPassed_.

Referenced by finished().

181  {
182  switch (state) {
183  case hlt::Pass: {
184  ++timesPassed_;
185  break;
186  }
187  case hlt::Fail: {
188  ++timesFailed_;
189  break;
190  }
191  case hlt::Exception: {
192  ++timesExcept_;
193  }
194  default:;
195  }
196  }
int timesFailed_
Definition: Path.h:99
reject
Definition: HLTenums.h:19
int timesExcept_
Definition: Path.h:100
accept
Definition: HLTenums.h:18
int timesPassed_
Definition: Path.h:98

◆ workerFinished()

void edm::Path::workerFinished ( std::exception_ptr const *  iException,
unsigned int  iModuleIndex,
EventTransitionInfo const &  iInfo,
ServiceToken const &  iToken,
StreamID const &  iID,
StreamContext const *  iContext,
oneapi::tbb::task_group &  iGroup 
)
private

Definition at line 244 of file Path.cc.

References cms::cuda::assert(), cms::Exception::clone(), CMS_SA_ALLOW, submitPVResolutionJobs::desc, cppFunctionSkipper::exception, finished(), handleWorkerFailure(), edm::EventPrincipal::id(), edm::InEvent, modulesToRun_, edm::WaitingTaskList::presetTaskAsFailed(), edm::EventTransitionInfo::principal(), runNextWorkerAsync(), edm::errors::StdException, stopProcessingEvent_, threadsafe_setFailedModuleInfo(), edm::errors::Unknown, waitingTasks_, and workers_.

Referenced by runNextWorkerAsync().

250  {
251  EventPrincipal const& iEP = iInfo.principal();
252  ServiceRegistry::Operate guard(iToken);
253 
254  //This call also allows the WorkerInPath to update statistics
255  // so should be done even if an exception happened
256  auto& worker = workers_[iModuleIndex];
257  bool shouldContinue = worker.checkResultsOfRunWorker(true);
258  std::exception_ptr finalException;
259  if (iException) {
260  std::unique_ptr<cms::Exception> pEx;
261  try {
262  std::rethrow_exception(*iException);
263  } catch (cms::Exception& oldEx) {
264  pEx = std::unique_ptr<cms::Exception>(oldEx.clone());
265  } catch (std::exception const& oldEx) {
266  pEx = std::make_unique<edm::Exception>(errors::StdException);
267  } catch (...) {
268  pEx = std::make_unique<edm::Exception>(errors::Unknown);
269  }
270  // Caught exception is propagated via WaitingTaskList
271  CMS_SA_ALLOW try {
272  std::ostringstream ost;
273  ost << iEP.id();
274  ModuleDescription const* desc = worker.getWorker()->description();
275  assert(desc != nullptr);
276  shouldContinue = handleWorkerFailure(*pEx,
277  iModuleIndex,
278  /*isEvent*/ true,
279  /*isBegin*/ true,
280  InEvent,
281  *desc,
282  ost.str());
283  //If we didn't rethrow, then we effectively skipped
284  worker.skipWorker(iEP);
285  finalException = std::exception_ptr();
286  } catch (...) {
287  shouldContinue = false;
288  finalException = std::current_exception();
289  //set the exception early to avoid case where another Path is waiting
290  // on a module in this Path and not running the module will lead to a
291  // different but related exception in the other Path. We want this
292  // Paths exception to be the one that gets reported.
293  waitingTasks_.presetTaskAsFailed(finalException);
294  }
295  }
297  shouldContinue = false;
298  }
299  auto const nextIndex = iModuleIndex + 1;
300  if (shouldContinue and nextIndex < workers_.size()) {
301  if (not worker.runConcurrently()) {
302  --modulesToRun_;
303  runNextWorkerAsync(nextIndex, iInfo, iToken, iID, iContext, iGroup);
304  return;
305  }
306  }
307 
308  if (not shouldContinue) {
309  threadsafe_setFailedModuleInfo(iModuleIndex, finalException);
310  }
311  if (not shouldContinue and not worker.runConcurrently()) {
312  //we are leaving the path early
313  for (auto it = workers_.begin() + nextIndex, itEnd = workers_.end(); it != itEnd; ++it) {
314  --modulesToRun_;
315  it->skipWorker(iEP);
316  }
317  }
318  if (--modulesToRun_ == 0) {
319  //The path should only be marked as finished once all outstanding modules finish
320  finished(finalException, iContext, iInfo, iID);
321  }
322  }
bool handleWorkerFailure(cms::Exception &e, int nwrwue, bool isEvent, bool begin, BranchType branchType, ModuleDescription const &, std::string const &id) const
Definition: Path.cc:70
#define CMS_SA_ALLOW
std::atomic< unsigned int > modulesToRun_
Definition: Path.h:119
void threadsafe_setFailedModuleInfo(int nwrwue, std::exception_ptr)
Definition: Path.cc:149
void runNextWorkerAsync(unsigned int iNextModuleIndex, EventTransitionInfo const &, ServiceToken const &, StreamID const &, StreamContext const *, oneapi::tbb::task_group &iGroup)
Definition: Path.cc:353
WaitingTaskList waitingTasks_
Definition: Path.h:117
assert(be >=bs)
void finished(std::exception_ptr, StreamContext const *, EventTransitionInfo const &, StreamID const &)
Definition: Path.cc:324
std::atomic< bool > *const stopProcessingEvent_
Definition: Path.h:118
WorkersInPath workers_
Definition: Path.h:114
void presetTaskAsFailed(std::exception_ptr iExcept)
virtual Exception * clone() const
Definition: Exception.cc:181

Member Data Documentation

◆ act_table_

ExceptionToActionTable const* const edm::Path::act_table_
private

Definition at line 112 of file Path.h.

Referenced by handleWorkerFailure().

◆ actReg_

std::shared_ptr<ActivityRegistry> const edm::Path::actReg_
private

Definition at line 111 of file Path.h.

Referenced by finished(), and processOneOccurrenceAsync().

◆ bitpos_

int const edm::Path::bitpos_
private

Definition at line 108 of file Path.h.

Referenced by bitPosition(), and recordStatus().

◆ failedModuleIndex_

int edm::Path::failedModuleIndex_
private

Definition at line 105 of file Path.h.

Referenced by finished(), processOneOccurrenceAsync(), and threadsafe_setFailedModuleInfo().

◆ modulesToRun_

std::atomic<unsigned int> edm::Path::modulesToRun_
private

Definition at line 119 of file Path.h.

Referenced by Path(), processOneOccurrenceAsync(), and workerFinished().

◆ pathContext_

PathContext edm::Path::pathContext_
private

Definition at line 116 of file Path.h.

Referenced by finished(), handleWorkerFailure(), name(), Path(), and processOneOccurrenceAsync().

◆ pathStatusInserter_

PathStatusInserter* edm::Path::pathStatusInserter_
private

Definition at line 121 of file Path.h.

Referenced by finished(), and setPathStatusInserter().

◆ pathStatusInserterWorker_

Worker* edm::Path::pathStatusInserterWorker_
private

Definition at line 122 of file Path.h.

Referenced by finished(), and setPathStatusInserter().

◆ state_

State edm::Path::state_
private

Definition at line 106 of file Path.h.

Referenced by finished(), processOneOccurrenceAsync(), and threadsafe_setFailedModuleInfo().

◆ stateLock_

std::atomic<bool> edm::Path::stateLock_ = false
private

Definition at line 104 of file Path.h.

Referenced by threadsafe_setFailedModuleInfo().

◆ stopProcessingEvent_

std::atomic<bool>* const edm::Path::stopProcessingEvent_
private

Definition at line 118 of file Path.h.

Referenced by handleWorkerFailure(), and workerFinished().

◆ timesExcept_

int edm::Path::timesExcept_
private

Definition at line 100 of file Path.h.

Referenced by clearCounters(), timesExcept(), and updateCounters().

◆ timesFailed_

int edm::Path::timesFailed_
private

Definition at line 99 of file Path.h.

Referenced by clearCounters(), timesFailed(), and updateCounters().

◆ timesPassed_

int edm::Path::timesPassed_
private

Definition at line 98 of file Path.h.

Referenced by clearCounters(), timesPassed(), and updateCounters().

◆ timesRun_

int edm::Path::timesRun_
private

Definition at line 97 of file Path.h.

Referenced by clearCounters(), processOneOccurrenceAsync(), and timesRun().

◆ trptr_

TrigResPtr const edm::Path::trptr_
private

Definition at line 109 of file Path.h.

Referenced by recordStatus().

◆ waitingTasks_

WaitingTaskList edm::Path::waitingTasks_
private

Definition at line 117 of file Path.h.

Referenced by finished(), processOneOccurrenceAsync(), and workerFinished().

◆ workers_

WorkersInPath edm::Path::workers_
private