CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Friends
edm::Worker Class Referenceabstract

#include <Worker.h>

Inheritance diagram for edm::Worker:
edm::WorkerT< T >

Classes

class  RunModuleTask
 
class  TransitionIDValue
 
class  TransitionIDValueBase
 

Public Types

enum  State { Ready, Pass, Fail, Exception }
 
enum  Types { kAnalyzer, kFilter, kProducer, kOutputModule }
 

Public Member Functions

void addedToPath ()
 
void beginJob ()
 
void beginStream (StreamID id, StreamContext &streamContext)
 
void callWhenDoneAsync (WaitingTask *task)
 
void clearCounters ()
 
virtual std::vector< ConsumesInfoconsumesInfo () const =0
 
ModuleDescription const * descPtr () const
 
ModuleDescription const & description () const
 
template<typename T >
bool doWork (typename T::MyPrincipal const &, EventSetup const &c, StreamID stream, ParentContext const &parentContext, typename T::Context const *context)
 
template<typename T >
void doWorkAsync (WaitingTask *task, typename T::MyPrincipal const &, EventSetup const &c, StreamID stream, ParentContext const &parentContext, typename T::Context const *context)
 
void endJob ()
 
void endStream (StreamID id, StreamContext &streamContext)
 
virtual void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc) const =0
 
virtual Types moduleType () const =0
 
Workeroperator= (Worker const &)=delete
 
void postDoEvent (EventPrincipal const &)
 
void postForkReacquireResources (unsigned int iChildIndex, unsigned int iNumberOfChildren)
 
void preForkReleaseResources ()
 
void registerThinnedAssociations (ProductRegistry const &registry, ThinnedAssociationsHelper &helper)
 
void reset ()
 
virtual void resolvePutIndicies (BranchType iBranchType, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies)=0
 
void respondToCloseInputFile (FileBlock const &fb)
 
void respondToOpenInputFile (FileBlock const &fb)
 
void setActivityRegistry (std::shared_ptr< ActivityRegistry > areg)
 
void setEarlyDeleteHelper (EarlyDeleteHelper *iHelper)
 
void skipOnPath ()
 
State state () const
 
int timesExcept () const
 
int timesFailed () const
 
int timesPass () const
 
int timesPassed () const
 
int timesRun () const
 
int timesVisited () const
 
virtual void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &)=0
 
 Worker (ModuleDescription const &iMD, ExceptionToActionTable const *iActions)
 
 Worker (Worker const &)=delete
 
virtual ~Worker ()
 

Protected Member Functions

ActivityRegistryactivityRegistry ()
 
virtual void implBeginJob ()=0
 
virtual void implBeginStream (StreamID)=0
 
virtual bool implDo (EventPrincipal const &, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoBegin (RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoBegin (LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoEnd (RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoEnd (LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoPrePrefetchSelection (StreamID id, EventPrincipal const &ep, ModuleCallingContext const *mcc)=0
 
virtual bool implDoStreamBegin (StreamID id, RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoStreamBegin (StreamID id, LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoStreamEnd (StreamID id, RunPrincipal const &rp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual bool implDoStreamEnd (StreamID id, LuminosityBlockPrincipal const &lbp, EventSetup const &c, ModuleCallingContext const *mcc)=0
 
virtual void implEndJob ()=0
 
virtual void implEndStream (StreamID)=0
 
void resetModuleDescription (ModuleDescription const *)
 
virtual std::string workerType () const =0
 

Private Member Functions

void emitPostModuleEventPrefetchingSignal ()
 
virtual void implPostForkReacquireResources (unsigned int iChildIndex, unsigned int iNumberOfChildren)=0
 
virtual void implPreForkReleaseResources ()=0
 
virtual void implRegisterThinnedAssociations (ProductRegistry const &, ThinnedAssociationsHelper &)=0
 
virtual void implRespondToCloseInputFile (FileBlock const &fb)=0
 
virtual void implRespondToOpenInputFile (FileBlock const &fb)=0
 
virtual void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const =0
 
virtual std::vector< ProductResolverIndex > const & itemsShouldPutInEvent () const =0
 
virtual void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const =0
 
virtual std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFromEvent () const =0
 
virtual void preActionBeforeRunEventAsync (WaitingTask *iTask, ModuleCallingContext const &moduleCallingContext, Principal const &iPrincipal) const =0
 
void prefetchAsync (WaitingTask *, ParentContext const &parentContext, Principal const &)
 
template<typename T >
bool runModule (typename T::MyPrincipal const &, EventSetup const &c, StreamID stream, ParentContext const &parentContext, typename T::Context const *context)
 
template<typename T >
void runModuleAfterAsyncPrefetch (std::exception_ptr const *iEPtr, typename T::MyPrincipal const &ep, EventSetup const &es, StreamID streamID, ParentContext const &parentContext, typename T::Context const *context)
 
virtual SerialTaskQueueChainserializeRunModule ()=0
 
template<bool IS_EVENT>
std::exception_ptr setException (std::exception_ptr iException)
 
template<bool IS_EVENT>
bool setFailed ()
 
template<bool IS_EVENT>
bool setPassed ()
 
bool shouldRethrowException (cms::Exception &ex, ParentContext const &parentContext, bool isEvent, TransitionIDValueBase const &iID) const
 

Static Private Member Functions

static void exceptionContext (const std::string &iID, bool iIsEvent, cms::Exception &ex, ModuleCallingContext const *mcc)
 

Private Attributes

ExceptionToActionTable const * actions_
 
std::shared_ptr< ActivityRegistryactReg_
 
std::exception_ptr cached_exception_
 
edm::propagate_const< EarlyDeleteHelper * > earlyDeleteHelper_
 
ModuleCallingContext moduleCallingContext_
 
std::atomic< int > numberOfPathsLeftToRun_
 
int numberOfPathsOn_
 
std::atomic< Statestate_
 
std::atomic< int > timesExcept_
 
std::atomic< int > timesFailed_
 
std::atomic< int > timesPassed_
 
std::atomic< int > timesRun_
 
std::atomic< int > timesVisited_
 
edm::WaitingTaskList waitingTasks_
 
std::atomic< bool > workStarted_
 

Friends

template<typename O >
class workerhelper::CallImpl
 

Detailed Description

Definition at line 75 of file Worker.h.

Member Enumeration Documentation

Enumerator
Ready 
Pass 
Fail 
Exception 

Definition at line 77 of file Worker.h.

Enumerator
kAnalyzer 
kFilter 
kProducer 
kOutputModule 

Definition at line 78 of file Worker.h.

Constructor & Destructor Documentation

edm::Worker::Worker ( ModuleDescription const &  iMD,
ExceptionToActionTable const *  iActions 
)

Definition at line 72 of file Worker.cc.

73  :
74  timesRun_(),
75  timesVisited_(),
76  timesPassed_(),
77  timesFailed_(),
78  timesExcept_(),
79  state_(Ready),
83  actions_(iActions),
85  actReg_(),
86  earlyDeleteHelper_(nullptr),
87  workStarted_(false)
88  {
89  }
std::atomic< int > timesVisited_
Definition: Worker.h:385
std::atomic< int > numberOfPathsLeftToRun_
Definition: Worker.h:391
std::atomic< int > timesExcept_
Definition: Worker.h:388
std::atomic< bool > workStarted_
Definition: Worker.h:403
std::atomic< int > timesFailed_
Definition: Worker.h:387
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
ExceptionToActionTable const * actions_
Definition: Worker.h:395
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
std::exception_ptr cached_exception_
Definition: Worker.h:396
std::atomic< State > state_
Definition: Worker.h:389
int numberOfPathsOn_
Definition: Worker.h:390
std::atomic< int > timesPassed_
Definition: Worker.h:386
edm::propagate_const< EarlyDeleteHelper * > earlyDeleteHelper_
Definition: Worker.h:400
std::atomic< int > timesRun_
Definition: Worker.h:384
edm::Worker::~Worker ( )
virtual

Definition at line 91 of file Worker.cc.

91  {
92  }
edm::Worker::Worker ( Worker const &  )
delete

Member Function Documentation

ActivityRegistry* edm::Worker::activityRegistry ( )
inlineprotected

Definition at line 197 of file Worker.h.

References benchmark_cfg::fb, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by edm::WorkerT< T >::implDo().

197 { return actReg_.get(); }
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
void edm::Worker::addedToPath ( )
inline

Definition at line 153 of file Worker.h.

Referenced by edm::WorkerInPath::WorkerInPath().

153  {
155  }
int numberOfPathsOn_
Definition: Worker.h:390
void edm::Worker::beginJob ( void  )

Definition at line 234 of file Worker.cc.

References actReg_, cms::Exception::addContext(), description(), Exception, implBeginJob(), edm::ModuleDescription::moduleLabel(), edm::ModuleDescription::moduleName(), state_, and edm::convertException::wrap().

Referenced by edm::WorkerManager::beginJob(), and edm::GlobalSchedule::replaceModule().

234  {
235  try {
236  convertException::wrap([&]() {
237  ModuleBeginJobSignalSentry cpp(actReg_.get(), description());
238  implBeginJob();
239  });
240  }
241  catch(cms::Exception& ex) {
242  state_ = Exception;
243  std::ostringstream ost;
244  ost << "Calling beginJob for module " << description().moduleName() << "/'" << description().moduleLabel() << "'";
245  ex.addContext(ost.str());
246  throw;
247  }
248  }
ModuleDescription const & description() const
Definition: Worker.h:123
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
std::string const & moduleName() const
std::string const & moduleLabel() const
std::atomic< State > state_
Definition: Worker.h:389
virtual void implBeginJob()=0
void addContext(std::string const &context)
Definition: Exception.cc:227
auto wrap(F iFunc) -> decltype(iFunc())
void edm::Worker::beginStream ( StreamID  id,
StreamContext streamContext 
)

Definition at line 266 of file Worker.cc.

References actReg_, cms::Exception::addContext(), description(), Exception, implBeginStream(), edm::LuminosityBlockIndex::invalidLuminosityBlockIndex(), edm::RunIndex::invalidRunIndex(), edm::StreamContext::kBeginStream, edm::ModuleCallingContext::kRunning, moduleCallingContext_, edm::ModuleDescription::moduleLabel(), edm::ModuleDescription::moduleName(), edm::StreamContext::setEventID(), edm::StreamContext::setLuminosityBlockIndex(), edm::StreamContext::setRunIndex(), edm::ModuleCallingContext::setState(), edm::StreamContext::setTimestamp(), edm::StreamContext::setTransition(), state_, and edm::convertException::wrap().

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

266  {
267  try {
268  convertException::wrap([&]() {
269  streamContext.setTransition(StreamContext::Transition::kBeginStream);
270  streamContext.setEventID(EventID(0, 0, 0));
271  streamContext.setRunIndex(RunIndex::invalidRunIndex());
272  streamContext.setLuminosityBlockIndex(LuminosityBlockIndex::invalidLuminosityBlockIndex());
273  streamContext.setTimestamp(Timestamp());
274  ParentContext parentContext(&streamContext);
275  ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext);
277  ModuleBeginStreamSignalSentry beginSentry(actReg_.get(), streamContext, moduleCallingContext_);
278  implBeginStream(id);
279  });
280  }
281  catch(cms::Exception& ex) {
282  state_ = Exception;
283  std::ostringstream ost;
284  ost << "Calling beginStream for module " << description().moduleName() << "/'" << description().moduleLabel() << "'";
285  ex.addContext(ost.str());
286  throw;
287  }
288  }
ModuleDescription const & description() const
Definition: Worker.h:123
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
std::string const & moduleName() const
std::string const & moduleLabel() const
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
static RunIndex invalidRunIndex()
Definition: RunIndex.cc:9
std::atomic< State > state_
Definition: Worker.h:389
static LuminosityBlockIndex invalidLuminosityBlockIndex()
void addContext(std::string const &context)
Definition: Exception.cc:227
virtual void implBeginStream(StreamID)=0
auto wrap(F iFunc) -> decltype(iFunc())
void edm::Worker::callWhenDoneAsync ( WaitingTask task)
inline

Definition at line 98 of file Worker.h.

References bk::beginJob().

98  {
99  waitingTasks_.add(task);
100  }
void add(WaitingTask *)
Adds task to the waiting list.
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
void edm::Worker::clearCounters ( )
inline

Definition at line 145 of file Worker.h.

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

145  {
146  timesRun_.store(0,std::memory_order_release);
147  timesVisited_.store(0,std::memory_order_release);
148  timesPassed_.store(0,std::memory_order_release);
149  timesFailed_.store(0,std::memory_order_release);
150  timesExcept_.store(0,std::memory_order_release);
151  }
std::atomic< int > timesVisited_
Definition: Worker.h:385
std::atomic< int > timesExcept_
Definition: Worker.h:388
std::atomic< int > timesFailed_
Definition: Worker.h:387
std::atomic< int > timesPassed_
Definition: Worker.h:386
std::atomic< int > timesRun_
Definition: Worker.h:384
virtual std::vector<ConsumesInfo> edm::Worker::consumesInfo ( ) const
pure virtual
ModuleDescription const* edm::Worker::descPtr ( ) const
inline

Definition at line 124 of file Worker.h.

ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
ModuleDescription const * moduleDescription() const
ModuleDescription const& edm::Worker::description ( ) const
inline
template<typename T >
bool edm::Worker::doWork ( typename T::MyPrincipal const &  ep,
EventSetup const &  c,
StreamID  stream,
ParentContext const &  parentContext,
typename T::Context const *  context 
)

Definition at line 673 of file Worker.h.

References Fail, edm::ServiceRegistry::instance(), edm::ModuleCallingContext::kInvalid, edm::ModuleCallingContext::kPrefetching, edm::make_empty_waiting_task(), Pass, edm::ServiceRegistry::presentToken(), mps_fire::queue, Ready, edm::ModuleCallingContext::setContext(), and edm::convertException::wrap().

Referenced by edm::WorkerInPath::runWorker().

677  {
678 
679  if (T::isEvent_) {
680  timesVisited_.fetch_add(1,std::memory_order_relaxed);
681  }
682  bool rc = false;
683 
684  switch(state_) {
685  case Ready: break;
686  case Pass: return true;
687  case Fail: return false;
688  case Exception: {
689  std::rethrow_exception(cached_exception_);
690  }
691  }
692 
693  bool expected = false;
694  if(not workStarted_.compare_exchange_strong(expected, true) ) {
695  //another thread beat us here
696  auto waitTask = edm::make_empty_waiting_task();
697  waitTask->increment_ref_count();
698 
699  waitingTasks_.add(waitTask.get());
700 
701  waitTask->wait_for_all();
702 
703  switch(state_) {
704  case Ready: assert(false);
705  case Pass: return true;
706  case Fail: return false;
707  case Exception: {
708  std::rethrow_exception(cached_exception_);
709  }
710  }
711  }
712 
713  //Need the context to be set until after any exception is resolved
715 
716  auto resetContext = [](ModuleCallingContext* iContext) {iContext->setContext(ModuleCallingContext::State::kInvalid,ParentContext(),nullptr); };
717  std::unique_ptr<ModuleCallingContext, decltype(resetContext)> prefetchSentry(&moduleCallingContext_,resetContext);
718 
719  try {
720  convertException::wrap([&]() {
721 
722  if (T::isEvent_) {
723 
724  //if have TriggerResults based selection we want to reject the event before doing prefetching
725  if( not workerhelper::CallImpl<T>::prePrefetchSelection(this,streamID,ep,&moduleCallingContext_) ) {
726  timesRun_.fetch_add(1,std::memory_order_relaxed);
727  rc = setPassed<T::isEvent_>();
728  waitingTasks_.doneWaiting(nullptr);
729  return;
730  }
731  auto waitTask = edm::make_empty_waiting_task();
732  {
733  //Make sure signal is sent once the prefetching is done
734  // [the 'pre' signal was sent in prefetchAsync]
735  //The purpose of this block is to send the signal after wait_for_all
736  auto sentryFunc = [this](void*) {
738  };
739  std::unique_ptr<ActivityRegistry, decltype(sentryFunc)> signalSentry(actReg_.get(),sentryFunc);
740 
741  //set count to 2 since wait_for_all requires value to not go to 0
742  waitTask->set_ref_count(2);
743 
744  prefetchAsync(waitTask.get(),parentContext, ep);
745  waitTask->decrement_ref_count();
746  waitTask->wait_for_all();
747  }
748  if(waitTask->exceptionPtr() != nullptr) {
749  std::rethrow_exception(*(waitTask->exceptionPtr()));
750  }
751  }
752  //successful prefetch so no reset necessary
753  prefetchSentry.release();
754  if(auto queue = serializeRunModule()) {
755  auto serviceToken = ServiceRegistry::instance().presentToken();
756  queue->pushAndWait([&]() {
757  //Need to make the services available
758  ServiceRegistry::Operate guard(serviceToken);
759  rc = runModule<T>(ep,es,streamID,parentContext,context);
760  });
761  } else {
762  rc = runModule<T>(ep,es,streamID,parentContext,context);
763  }
764  });
765  }
766  catch(cms::Exception& ex) {
767  TransitionIDValue<typename T::MyPrincipal> idValue(ep);
768  if(shouldRethrowException(ex, parentContext, T::isEvent_, idValue)) {
769  assert(not cached_exception_);
770  setException<T::isEvent_>(std::current_exception());
772  std::rethrow_exception(cached_exception_);
773  } else {
774  rc = setPassed<T::isEvent_>();
775  }
776  }
777  waitingTasks_.doneWaiting(nullptr);
778  return rc;
779  }
bool shouldRethrowException(cms::Exception &ex, ParentContext const &parentContext, bool isEvent, TransitionIDValueBase const &iID) const
Definition: Worker.cc:155
std::atomic< int > timesVisited_
Definition: Worker.h:385
std::atomic< bool > workStarted_
Definition: Worker.h:403
void add(WaitingTask *)
Adds task to the waiting list.
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
virtual SerialTaskQueueChain * serializeRunModule()=0
ServiceToken presentToken() const
void setContext(State state, ParentContext const &parent, ModuleCallingContext const *previousOnThread)
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
std::exception_ptr cached_exception_
Definition: Worker.h:396
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
std::unique_ptr< edm::EmptyWaitingTask, waitingtask::TaskDestroyer > make_empty_waiting_task()
Create an EmptyWaitingTask which will properly be destroyed.
static ServiceRegistry & instance()
std::atomic< State > state_
Definition: Worker.h:389
void prefetchAsync(WaitingTask *, ParentContext const &parentContext, Principal const &)
Definition: Worker.cc:198
void emitPostModuleEventPrefetchingSignal()
Definition: Worker.h:292
auto wrap(F iFunc) -> decltype(iFunc())
std::atomic< int > timesRun_
Definition: Worker.h:384
template<typename T >
void edm::Worker::doWorkAsync ( WaitingTask task,
typename T::MyPrincipal const &  ep,
EventSetup const &  c,
StreamID  stream,
ParentContext const &  parentContext,
typename T::Context const *  context 
)

Definition at line 604 of file Worker.h.

References edm::ModuleCallingContext::kPrefetching, and edm::ModuleCallingContext::setContext().

Referenced by edm::WorkerInPath::runWorkerAsync().

609  {
610  waitingTasks_.add(task);
611  if(T::isEvent_) {
612  timesVisited_.fetch_add(1,std::memory_order_relaxed);
613  }
614 
615  bool expected = false;
616  if(workStarted_.compare_exchange_strong(expected,true)) {
618 
619  //if have TriggerResults based selection we want to reject the event before doing prefetching
620  if( not workerhelper::CallImpl<T>::prePrefetchSelection(this,streamID,ep,&moduleCallingContext_) ) {
621  setPassed<T::isEvent_>();
622  waitingTasks_.doneWaiting(nullptr);
623  return;
624  }
625 
626  auto runTask = new (tbb::task::allocate_root()) RunModuleTask<T>(
627  this, ep,es,streamID,parentContext,context);
628  prefetchAsync(runTask, parentContext, ep);
629  }
630  }
std::atomic< int > timesVisited_
Definition: Worker.h:385
std::atomic< bool > workStarted_
Definition: Worker.h:403
void add(WaitingTask *)
Adds task to the waiting list.
void setContext(State state, ParentContext const &parent, ModuleCallingContext const *previousOnThread)
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
void prefetchAsync(WaitingTask *, ParentContext const &parentContext, Principal const &)
Definition: Worker.cc:198
void edm::Worker::emitPostModuleEventPrefetchingSignal ( )
inlineprivate

Definition at line 292 of file Worker.h.

292  {
293  actReg_->postModuleEventPrefetchingSignal_.emit(*moduleCallingContext_.getStreamContext(),moduleCallingContext_);
294  }
StreamContext const * getStreamContext() const
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
void edm::Worker::endJob ( void  )

Definition at line 250 of file Worker.cc.

References actReg_, cms::Exception::addContext(), description(), Exception, implEndJob(), edm::ModuleDescription::moduleLabel(), edm::ModuleDescription::moduleName(), state_, and edm::convertException::wrap().

250  {
251  try {
252  convertException::wrap([&]() {
253  ModuleEndJobSignalSentry cpp(actReg_.get(), description());
254  implEndJob();
255  });
256  }
257  catch(cms::Exception& ex) {
258  state_ = Exception;
259  std::ostringstream ost;
260  ost << "Calling endJob for module " << description().moduleName() << "/'" << description().moduleLabel() << "'";
261  ex.addContext(ost.str());
262  throw;
263  }
264  }
ModuleDescription const & description() const
Definition: Worker.h:123
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
std::string const & moduleName() const
std::string const & moduleLabel() const
std::atomic< State > state_
Definition: Worker.h:389
virtual void implEndJob()=0
void addContext(std::string const &context)
Definition: Exception.cc:227
auto wrap(F iFunc) -> decltype(iFunc())
void edm::Worker::endStream ( StreamID  id,
StreamContext streamContext 
)

Definition at line 290 of file Worker.cc.

References actReg_, cms::Exception::addContext(), description(), Exception, implEndStream(), edm::LuminosityBlockIndex::invalidLuminosityBlockIndex(), edm::RunIndex::invalidRunIndex(), edm::StreamContext::kEndStream, edm::ModuleCallingContext::kRunning, moduleCallingContext_, edm::ModuleDescription::moduleLabel(), edm::ModuleDescription::moduleName(), edm::StreamContext::setEventID(), edm::StreamContext::setLuminosityBlockIndex(), edm::StreamContext::setRunIndex(), edm::ModuleCallingContext::setState(), edm::StreamContext::setTimestamp(), edm::StreamContext::setTransition(), state_, and edm::convertException::wrap().

290  {
291  try {
292  convertException::wrap([&]() {
293  streamContext.setTransition(StreamContext::Transition::kEndStream);
294  streamContext.setEventID(EventID(0, 0, 0));
295  streamContext.setRunIndex(RunIndex::invalidRunIndex());
296  streamContext.setLuminosityBlockIndex(LuminosityBlockIndex::invalidLuminosityBlockIndex());
297  streamContext.setTimestamp(Timestamp());
298  ParentContext parentContext(&streamContext);
299  ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext);
301  ModuleEndStreamSignalSentry endSentry(actReg_.get(), streamContext, moduleCallingContext_);
302  implEndStream(id);
303  });
304  }
305  catch(cms::Exception& ex) {
306  state_ = Exception;
307  std::ostringstream ost;
308  ost << "Calling endStream for module " << description().moduleName() << "/'" << description().moduleLabel() << "'";
309  ex.addContext(ost.str());
310  throw;
311  }
312  }
ModuleDescription const & description() const
Definition: Worker.h:123
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
std::string const & moduleName() const
std::string const & moduleLabel() const
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
static RunIndex invalidRunIndex()
Definition: RunIndex.cc:9
std::atomic< State > state_
Definition: Worker.h:389
static LuminosityBlockIndex invalidLuminosityBlockIndex()
void addContext(std::string const &context)
Definition: Exception.cc:227
virtual void implEndStream(StreamID)=0
auto wrap(F iFunc) -> decltype(iFunc())
void edm::Worker::exceptionContext ( const std::string &  iID,
bool  iIsEvent,
cms::Exception ex,
ModuleCallingContext const *  mcc 
)
staticprivate

Definition at line 99 of file Worker.cc.

References cms::Exception::addContext(), edm::ModuleCallingContext::internalContext(), edm::ParentContext::kInternal, edm::ParentContext::kModule, edm::ParentContext::kPlaceInPath, edm::InternalContext::moduleCallingContext(), edm::ModuleCallingContext::moduleCallingContext(), edm::ModuleCallingContext::moduleDescription(), edm::ModuleDescription::moduleLabel(), edm::ModuleDescription::moduleName(), edm::PlaceInPathContext::pathContext(), edm::PathContext::pathName(), edm::ModuleCallingContext::placeInPathContext(), and edm::ModuleCallingContext::type().

Referenced by shouldRethrowException().

102  {
103 
104  ModuleCallingContext const* imcc = mcc;
105  while(imcc->type() == ParentContext::Type::kModule) {
106  std::ostringstream iost;
107  iost << "Calling method for module "
108  << imcc->moduleDescription()->moduleName() << "/'"
109  << imcc->moduleDescription()->moduleLabel() << "'";
110  ex.addContext(iost.str());
111  imcc = imcc->moduleCallingContext();
112  }
113  if(imcc->type() == ParentContext::Type::kInternal) {
114  std::ostringstream iost;
115  iost << "Calling method for module "
116  << imcc->moduleDescription()->moduleName() << "/'"
117  << imcc->moduleDescription()->moduleLabel() << "' (probably inside some kind of mixing module)";
118  ex.addContext(iost.str());
119  imcc = imcc->internalContext()->moduleCallingContext();
120  }
121  while(imcc->type() == ParentContext::Type::kModule) {
122  std::ostringstream iost;
123  iost << "Calling method for module "
124  << imcc->moduleDescription()->moduleName() << "/'"
125  << imcc->moduleDescription()->moduleLabel() << "'";
126  ex.addContext(iost.str());
127  imcc = imcc->moduleCallingContext();
128  }
129  std::ostringstream ost;
130  if (iIsEvent) {
131  ost << "Calling event method";
132  }
133  else {
134  // It should be impossible to get here, because
135  // this function only gets called when the IgnoreCompletely
136  // exception behavior is active, which can only be true
137  // for events.
138  ost << "Calling unknown function";
139  }
140  ost << " for module " << imcc->moduleDescription()->moduleName() << "/'" << imcc->moduleDescription()->moduleLabel() << "'";
141  ex.addContext(ost.str());
142 
143  if (imcc->type() == ParentContext::Type::kPlaceInPath) {
144  ost.str("");
145  ost << "Running path '";
146  ost << imcc->placeInPathContext()->pathContext()->pathName() << "'";
147  ex.addContext(ost.str());
148  }
149  ost.str("");
150  ost << "Processing ";
151  ost << iID;
152  ex.addContext(ost.str());
153  }
void addContext(std::string const &context)
Definition: Exception.cc:227
virtual void edm::Worker::implBeginJob ( )
protectedpure virtual

Implemented in edm::WorkerT< T >.

Referenced by beginJob().

virtual void edm::Worker::implBeginStream ( StreamID  )
protectedpure virtual

Implemented in edm::WorkerT< T >.

Referenced by beginStream().

virtual bool edm::Worker::implDo ( EventPrincipal const &  ,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoBegin ( RunPrincipal const &  rp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoBegin ( LuminosityBlockPrincipal const &  lbp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual

Implemented in edm::WorkerT< T >.

virtual bool edm::Worker::implDoEnd ( RunPrincipal const &  rp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoEnd ( LuminosityBlockPrincipal const &  lbp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual

Implemented in edm::WorkerT< T >.

virtual bool edm::Worker::implDoPrePrefetchSelection ( StreamID  id,
EventPrincipal const &  ep,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoStreamBegin ( StreamID  id,
RunPrincipal const &  rp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoStreamBegin ( StreamID  id,
LuminosityBlockPrincipal const &  lbp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual

Implemented in edm::WorkerT< T >.

virtual bool edm::Worker::implDoStreamEnd ( StreamID  id,
RunPrincipal const &  rp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual
virtual bool edm::Worker::implDoStreamEnd ( StreamID  id,
LuminosityBlockPrincipal const &  lbp,
EventSetup const &  c,
ModuleCallingContext const *  mcc 
)
protectedpure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::implEndJob ( )
protectedpure virtual

Implemented in edm::WorkerT< T >.

Referenced by endJob().

virtual void edm::Worker::implEndStream ( StreamID  )
protectedpure virtual

Implemented in edm::WorkerT< T >.

Referenced by endStream().

virtual void edm::Worker::implPostForkReacquireResources ( unsigned int  iChildIndex,
unsigned int  iNumberOfChildren 
)
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::implPreForkReleaseResources ( )
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::implRegisterThinnedAssociations ( ProductRegistry const &  ,
ThinnedAssociationsHelper  
)
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::implRespondToCloseInputFile ( FileBlock const &  fb)
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::implRespondToOpenInputFile ( FileBlock const &  fb)
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::itemsMayGet ( BranchType  ,
std::vector< ProductResolverIndexAndSkipBit > &   
) const
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual std::vector<ProductResolverIndex> const& edm::Worker::itemsShouldPutInEvent ( ) const
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual void edm::Worker::itemsToGet ( BranchType  ,
std::vector< ProductResolverIndexAndSkipBit > &   
) const
privatepure virtual

Implemented in edm::WorkerT< T >.

virtual std::vector<ProductResolverIndexAndSkipBit> const& edm::Worker::itemsToGetFromEvent ( ) const
privatepure virtual

Implemented in edm::WorkerT< T >.

Referenced by prefetchAsync().

virtual void edm::Worker::modulesWhoseProductsAreConsumed ( std::vector< ModuleDescription const * > &  modules,
ProductRegistry const &  preg,
std::map< std::string, ModuleDescription const * > const &  labelsToDesc 
) const
pure virtual

Implemented in edm::WorkerT< T >.

virtual Types edm::Worker::moduleType ( ) const
pure virtual
Worker& edm::Worker::operator= ( Worker const &  )
delete
void edm::Worker::postDoEvent ( EventPrincipal const &  iEvent)

Definition at line 320 of file Worker.cc.

References earlyDeleteHelper_.

Referenced by edm::WorkerT< T >::implDo().

320  {
321  if(earlyDeleteHelper_) {
322  earlyDeleteHelper_->moduleRan(iEvent);
323  }
324  }
int iEvent
Definition: GenABIO.cc:230
edm::propagate_const< EarlyDeleteHelper * > earlyDeleteHelper_
Definition: Worker.h:400
void edm::Worker::postForkReacquireResources ( unsigned int  iChildIndex,
unsigned int  iNumberOfChildren 
)
inline

Definition at line 110 of file Worker.h.

Referenced by edm::Schedule::postForkReacquireResources().

110 {implPostForkReacquireResources(iChildIndex, iNumberOfChildren);}
virtual void implPostForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)=0
virtual void edm::Worker::preActionBeforeRunEventAsync ( WaitingTask iTask,
ModuleCallingContext const &  moduleCallingContext,
Principal const &  iPrincipal 
) const
privatepure virtual

Implemented in edm::WorkerT< T >.

Referenced by prefetchAsync().

void edm::Worker::prefetchAsync ( WaitingTask iTask,
ParentContext const &  parentContext,
Principal const &  iPrincipal 
)
private

Definition at line 198 of file Worker.cc.

References actReg_, edm::ModuleCallingContext::getStreamContext(), mps_monitormerge::items, itemsToGetFromEvent(), edm::ModuleCallingContext::kPrefetching, moduleCallingContext_, preActionBeforeRunEventAsync(), edm::Principal::prefetchAsync(), edm::ProductResolverIndexAmbiguous, and edm::ModuleCallingContext::setContext().

198  {
199  // Prefetch products the module declares it consumes (not including the products it maybe consumes)
200  std::vector<ProductResolverIndexAndSkipBit> const& items = itemsToGetFromEvent();
201 
203 
204  actReg_->preModuleEventPrefetchingSignal_.emit(*moduleCallingContext_.getStreamContext(),moduleCallingContext_);
205 
206  //Need to be sure the ref count isn't set to 0 immediately
207  iTask->increment_ref_count();
208  for(auto const& item : items) {
209  ProductResolverIndex productResolverIndex = item.productResolverIndex();
210  bool skipCurrentProcess = item.skipCurrentProcess();
211  if(productResolverIndex != ProductResolverIndexAmbiguous) {
212  iPrincipal.prefetchAsync(iTask,productResolverIndex, skipCurrentProcess, &moduleCallingContext_);
213  }
214  }
215 
217 
218  if(0 == iTask->decrement_ref_count()) {
219  //if everything finishes before we leave this routine, we need to launch the task
220  tbb::task::spawn(*iTask);
221  }
222  }
unsigned int ProductResolverIndex
StreamContext const * getStreamContext() const
virtual std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFromEvent() const =0
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
void setContext(State state, ParentContext const &parent, ModuleCallingContext const *previousOnThread)
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
virtual void preActionBeforeRunEventAsync(WaitingTask *iTask, ModuleCallingContext const &moduleCallingContext, Principal const &iPrincipal) const =0
void edm::Worker::preForkReleaseResources ( )
inline

Definition at line 109 of file Worker.h.

Referenced by edm::Schedule::preForkReleaseResources().

virtual void implPreForkReleaseResources()=0
void edm::Worker::registerThinnedAssociations ( ProductRegistry const &  registry,
ThinnedAssociationsHelper helper 
)
inline

Definition at line 111 of file Worker.h.

Definition: helper.py:1
virtual void implRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &)=0
static Interceptor::Registry registry("Interceptor")
void edm::Worker::reset ( void  )
inline

Definition at line 113 of file Worker.h.

References Ready.

Referenced by edm::WorkerManager::resetAll().

113  {
114  cached_exception_ = std::exception_ptr();
115  state_ = Ready;
117  workStarted_ = false;
119  }
std::atomic< int > numberOfPathsLeftToRun_
Definition: Worker.h:391
std::atomic< bool > workStarted_
Definition: Worker.h:403
void reset()
Resets access to the resource so that added tasks will wait.
std::exception_ptr cached_exception_
Definition: Worker.h:396
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
std::atomic< State > state_
Definition: Worker.h:389
int numberOfPathsOn_
Definition: Worker.h:390
void edm::Worker::resetModuleDescription ( ModuleDescription const *  iDesc)
protected
virtual void edm::Worker::resolvePutIndicies ( BranchType  iBranchType,
std::unordered_multimap< std::string, edm::ProductResolverIndex > const &  iIndicies 
)
pure virtual

Implemented in edm::WorkerT< T >.

void edm::Worker::respondToCloseInputFile ( FileBlock const &  fb)
inline

Definition at line 107 of file Worker.h.

Referenced by edm::Schedule::respondToCloseInputFile().

virtual void implRespondToCloseInputFile(FileBlock const &fb)=0
void edm::Worker::respondToOpenInputFile ( FileBlock const &  fb)
inline

Definition at line 106 of file Worker.h.

Referenced by edm::Schedule::respondToOpenInputFile().

virtual void implRespondToOpenInputFile(FileBlock const &fb)=0
template<typename T >
bool edm::Worker::runModule ( typename T::MyPrincipal const &  ep,
EventSetup const &  c,
StreamID  stream,
ParentContext const &  parentContext,
typename T::Context const *  context 
)
private

Definition at line 783 of file Worker.h.

References edm::EventSetup::get().

787  {
788  //unscheduled producers should advance this
789  //if (T::isEvent_) {
790  // ++timesVisited_;
791  //}
792  ModuleContextSentry moduleContextSentry(&moduleCallingContext_, parentContext);
793  if (T::isEvent_) {
794  timesRun_.fetch_add(1,std::memory_order_relaxed);
795  }
796 
797  bool rc = workerhelper::CallImpl<T>::call(this,streamID,ep,es, actReg_.get(), &moduleCallingContext_, context);
798 
799  if (rc) {
800  setPassed<T::isEvent_>();
801  } else {
802  setFailed<T::isEvent_>();
803  }
804  return rc;
805  }
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
std::atomic< int > timesRun_
Definition: Worker.h:384
template<typename T >
void edm::Worker::runModuleAfterAsyncPrefetch ( std::exception_ptr const *  iEPtr,
typename T::MyPrincipal const &  ep,
EventSetup const &  es,
StreamID  streamID,
ParentContext const &  parentContext,
typename T::Context const *  context 
)
private

Definition at line 633 of file Worker.h.

References cms::Exception::addContext(), heppy_report::description, edm::ModuleCallingContext::kInvalid, edm::ModuleCallingContext::setContext(), and edm::convertException::wrap().

Referenced by edm::Worker::RunModuleTask< T >::execute().

638  {
639  try {
640  convertException::wrap([&]() {
641  if(iEPtr) {
642  assert(*iEPtr);
644  std::rethrow_exception(*iEPtr);
645  }
646 
647  runModule<T>(ep,es,streamID,parentContext,context);
648  });
649  } catch( cms::Exception& iException) {
650  TransitionIDValue<typename T::MyPrincipal> idValue(ep);
651  if(shouldRethrowException(iException, parentContext, T::isEvent_, idValue)) {
652  assert(not cached_exception_);
653  std::ostringstream iost;
654  if(iEPtr) {
655  iost<<"Prefetching for module ";
656  } else {
657  iost<<"Calling method for module ";
658  }
659  iost<<description().moduleName() << "/'"
660  << description().moduleLabel() << "'";
661  iException.addContext(iost.str());
662  setException<T::isEvent_>(std::current_exception());
664  return;
665  } else {
666  setPassed<T::isEvent_>();
667  }
668  }
669  waitingTasks_.doneWaiting(nullptr);
670  }
bool shouldRethrowException(cms::Exception &ex, ParentContext const &parentContext, bool isEvent, TransitionIDValueBase const &iID) const
Definition: Worker.cc:155
ModuleDescription const & description() const
Definition: Worker.h:123
std::string const & moduleName() const
std::string const & moduleLabel() const
void setContext(State state, ParentContext const &parent, ModuleCallingContext const *previousOnThread)
ModuleCallingContext moduleCallingContext_
Definition: Worker.h:393
std::exception_ptr cached_exception_
Definition: Worker.h:396
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
void addContext(std::string const &context)
Definition: Exception.cc:227
auto wrap(F iFunc) -> decltype(iFunc())
virtual SerialTaskQueueChain* edm::Worker::serializeRunModule ( )
privatepure virtual
void edm::Worker::setActivityRegistry ( std::shared_ptr< ActivityRegistry areg)

The signals are required to live longer than the last call to 'doWork' this was done to improve performance based on profiling

Definition at line 94 of file Worker.cc.

References actReg_.

94  {
95  actReg_ = areg;
96  }
std::shared_ptr< ActivityRegistry > actReg_
Definition: Worker.h:398
void edm::Worker::setEarlyDeleteHelper ( EarlyDeleteHelper iHelper)

Definition at line 224 of file Worker.cc.

References earlyDeleteHelper_.

224  {
225  earlyDeleteHelper_=iHelper;
226  }
edm::propagate_const< EarlyDeleteHelper * > earlyDeleteHelper_
Definition: Worker.h:400
template<bool IS_EVENT>
std::exception_ptr edm::Worker::setException ( std::exception_ptr  iException)
inlineprivate

Definition at line 279 of file Worker.h.

References Exception.

279  {
280  if (IS_EVENT) {
281  timesExcept_.fetch_add(1,std::memory_order_relaxed);
282  }
283  cached_exception_ = iException; // propagate_const<T> has no reset() function
284  state_ = Exception;
285  return cached_exception_;
286  }
std::atomic< int > timesExcept_
Definition: Worker.h:388
std::exception_ptr cached_exception_
Definition: Worker.h:396
std::atomic< State > state_
Definition: Worker.h:389
template<bool IS_EVENT>
bool edm::Worker::setFailed ( )
inlineprivate

Definition at line 270 of file Worker.h.

References Fail.

270  {
271  if(IS_EVENT) {
272  timesFailed_.fetch_add(1,std::memory_order_relaxed);
273  }
274  state_ = Fail;
275  return false;
276  }
std::atomic< int > timesFailed_
Definition: Worker.h:387
std::atomic< State > state_
Definition: Worker.h:389
template<bool IS_EVENT>
bool edm::Worker::setPassed ( )
inlineprivate

Definition at line 261 of file Worker.h.

References Pass.

261  {
262  if(IS_EVENT) {
263  timesPassed_.fetch_add(1,std::memory_order_relaxed);
264  }
265  state_ = Pass;
266  return true;
267  }
std::atomic< State > state_
Definition: Worker.h:389
std::atomic< int > timesPassed_
Definition: Worker.h:386
bool edm::Worker::shouldRethrowException ( cms::Exception ex,
ParentContext const &  parentContext,
bool  isEvent,
TransitionIDValueBase const &  iID 
) const
private

Definition at line 155 of file Worker.cc.

References mps_alisetup::action, actions_, cms::Exception::category(), description(), exceptionContext(), edm::exception_actions::FailPath, edm::ExceptionToActionTable::find(), edm::ModuleCallingContext::getTopModuleCallingContext(), edm::exception_actions::IgnoreCompletely, edm::PathContext::isEndPath(), edm::ModuleCallingContext::kInvalid, edm::ParentContext::kPlaceInPath, edm::PlaceInPathContext::pathContext(), edm::ModuleCallingContext::placeInPathContext(), edm::printCmsExceptionWarning(), edm::exception_actions::Rethrow, edm::exception_actions::SkipEvent, edm::ModuleCallingContext::type(), and edm::Worker::TransitionIDValueBase::value().

158  {
159 
160  // NOTE: the warning printed as a result of ignoring or failing
161  // a module will only be printed during the full true processing
162  // pass of this module
163 
164  // Get the action corresponding to this exception. However, if processing
165  // something other than an event (e.g. run, lumi) always rethrow.
167 
168  if(action == exception_actions::Rethrow) {
169  return true;
170  }
171 
172  ModuleCallingContext tempContext(&description(),ModuleCallingContext::State::kInvalid, parentContext, nullptr);
173 
174  // If we are processing an endpath and the module was scheduled, treat SkipEvent or FailPath
175  // as IgnoreCompletely, so any subsequent OutputModules are still run.
176  // For unscheduled modules only treat FailPath as IgnoreCompletely but still allow SkipEvent to throw
177  ModuleCallingContext const* top_mcc = tempContext.getTopModuleCallingContext();
178  if(top_mcc->type() == ParentContext::Type::kPlaceInPath &&
179  top_mcc->placeInPathContext()->pathContext()->isEndPath()) {
180 
181  if ((action == exception_actions::SkipEvent && tempContext.type() == ParentContext::Type::kPlaceInPath) ||
183  }
184  switch(action) {
186  {
187  exceptionContext(iID.value(), isEvent, ex, &tempContext);
188  edm::printCmsExceptionWarning("IgnoreCompletely", ex);
189  return false;
190  break;
191  }
192  default:
193  return true;
194  }
195  }
ModuleDescription const & description() const
Definition: Worker.h:123
std::string const & category() const
Definition: Exception.cc:183
exception_actions::ActionCodes find(const std::string &category) const
ExceptionToActionTable const * actions_
Definition: Worker.h:395
static void exceptionContext(const std::string &iID, bool iIsEvent, cms::Exception &ex, ModuleCallingContext const *mcc)
Definition: Worker.cc:99
void printCmsExceptionWarning(char const *behavior, cms::Exception const &e)
void edm::Worker::skipOnPath ( )

Definition at line 314 of file Worker.cc.

References cached_exception_, edm::WaitingTaskList::doneWaiting(), numberOfPathsLeftToRun_, and waitingTasks_.

Referenced by edm::WorkerInPath::skipWorker().

314  {
315  if( 0 == --numberOfPathsLeftToRun_) {
317  }
318  }
std::atomic< int > numberOfPathsLeftToRun_
Definition: Worker.h:391
std::exception_ptr cached_exception_
Definition: Worker.h:396
void doneWaiting(std::exception_ptr iPtr)
Signals that the resource is now available and tasks should be spawned.
edm::WaitingTaskList waitingTasks_
Definition: Worker.h:402
State edm::Worker::state ( ) const
inline

Definition at line 162 of file Worker.h.

Referenced by edm::WorkerInPath::checkResultsOfRunWorker().

162 { return state_; }
std::atomic< State > state_
Definition: Worker.h:389
int edm::Worker::timesExcept ( ) const
inline

Definition at line 161 of file Worker.h.

Referenced by edm::fillWorkerSummaryAux().

161 { return timesExcept_.load(std::memory_order_acquire); }
std::atomic< int > timesExcept_
Definition: Worker.h:388
int edm::Worker::timesFailed ( ) const
inline

Definition at line 160 of file Worker.h.

Referenced by edm::fillWorkerSummaryAux().

160 { return timesFailed_.load(std::memory_order_acquire); }
std::atomic< int > timesFailed_
Definition: Worker.h:387
int edm::Worker::timesPass ( ) const
inline

Definition at line 164 of file Worker.h.

164 { return timesPassed(); } // for backward compatibility only - to be removed soon
int timesPassed() const
Definition: Worker.h:159
int edm::Worker::timesPassed ( ) const
inline

Definition at line 159 of file Worker.h.

Referenced by edm::fillWorkerSummaryAux().

159 { return timesPassed_.load(std::memory_order_acquire); }
std::atomic< int > timesPassed_
Definition: Worker.h:386
int edm::Worker::timesRun ( ) const
inline

Definition at line 157 of file Worker.h.

Referenced by edm::fillWorkerSummaryAux().

157 { return timesRun_.load(std::memory_order_acquire); }
std::atomic< int > timesRun_
Definition: Worker.h:384
int edm::Worker::timesVisited ( ) const
inline

Definition at line 158 of file Worker.h.

Referenced by edm::fillWorkerSummaryAux().

158 { return timesVisited_.load(std::memory_order_acquire); }
std::atomic< int > timesVisited_
Definition: Worker.h:385
virtual void edm::Worker::updateLookup ( BranchType  iBranchType,
ProductResolverIndexHelper const &   
)
pure virtual

Implemented in edm::WorkerT< T >.

Referenced by edm::Schedule::changeModule().

virtual std::string edm::Worker::workerType ( ) const
protectedpure virtual

Implemented in edm::WorkerT< T >.

Friends And Related Function Documentation

template<typename O >
friend class workerhelper::CallImpl
friend

Definition at line 167 of file Worker.h.

Member Data Documentation

ExceptionToActionTable const* edm::Worker::actions_
private

Definition at line 395 of file Worker.h.

Referenced by shouldRethrowException().

std::shared_ptr<ActivityRegistry> edm::Worker::actReg_
private

Definition at line 398 of file Worker.h.

Referenced by beginJob(), beginStream(), endJob(), endStream(), prefetchAsync(), and setActivityRegistry().

std::exception_ptr edm::Worker::cached_exception_
private

Definition at line 396 of file Worker.h.

Referenced by skipOnPath().

edm::propagate_const<EarlyDeleteHelper*> edm::Worker::earlyDeleteHelper_
private

Definition at line 400 of file Worker.h.

Referenced by postDoEvent(), and setEarlyDeleteHelper().

ModuleCallingContext edm::Worker::moduleCallingContext_
private

Definition at line 393 of file Worker.h.

Referenced by beginStream(), endStream(), prefetchAsync(), and resetModuleDescription().

std::atomic<int> edm::Worker::numberOfPathsLeftToRun_
private

Definition at line 391 of file Worker.h.

Referenced by skipOnPath().

int edm::Worker::numberOfPathsOn_
private

Definition at line 390 of file Worker.h.

std::atomic<State> edm::Worker::state_
private

Definition at line 389 of file Worker.h.

Referenced by beginJob(), beginStream(), endJob(), and endStream().

std::atomic<int> edm::Worker::timesExcept_
private

Definition at line 388 of file Worker.h.

std::atomic<int> edm::Worker::timesFailed_
private

Definition at line 387 of file Worker.h.

std::atomic<int> edm::Worker::timesPassed_
private

Definition at line 386 of file Worker.h.

std::atomic<int> edm::Worker::timesRun_
private

Definition at line 384 of file Worker.h.

std::atomic<int> edm::Worker::timesVisited_
private

Definition at line 385 of file Worker.h.

edm::WaitingTaskList edm::Worker::waitingTasks_
private

Definition at line 402 of file Worker.h.

Referenced by skipOnPath().

std::atomic<bool> edm::Worker::workStarted_
private

Definition at line 403 of file Worker.h.