CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::WorkerManager Class Reference

#include <WorkerManager.h>

Public Types

typedef std::vector< Worker * > AllWorkers
 

Public Member Functions

ExceptionToActionTable const & actionTable () const
 
void addToAllWorkers (Worker *w)
 
void addToUnscheduledWorkers (ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration > processConfiguration, std::string label, std::set< std::string > &unscheduledLabels, std::vector< std::string > &shouldBeUsedLabels)
 
AllWorkers const & allWorkers () const
 
void beginJob (ProductRegistry const &iRegistry)
 
void beginStream (StreamID iID, StreamContext &streamContext)
 
void endJob ()
 
void endJob (ExceptionCollector &collector)
 
void endStream (StreamID iID, StreamContext &streamContext)
 
WorkergetWorker (ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &label)
 
template<typename T , typename U >
void processOneOccurrence (typename T::MyPrincipal &principal, EventSetup const &eventSetup, StreamID streamID, typename T::Context const *topContext, U const *context, bool cleaningUpAfterException=false)
 
void setOnDemandProducts (ProductRegistry &pregistry, std::set< std::string > const &unscheduledLabels) const
 
 WorkerManager (std::shared_ptr< ActivityRegistry > actReg, ExceptionToActionTable const &actions)
 
 WorkerManager (std::shared_ptr< ModuleRegistry > modReg, std::shared_ptr< ActivityRegistry > actReg, ExceptionToActionTable const &actions)
 

Private Member Functions

void resetAll ()
 
void setupOnDemandSystem (EventPrincipal &principal, EventSetup const &es)
 
std::shared_ptr
< UnscheduledCallProducer
const > 
unscheduled () const
 
std::shared_ptr
< UnscheduledCallProducer > & 
unscheduled ()
 

Private Attributes

ExceptionToActionTable const * actionTable_
 
AllWorkers allWorkers_
 
edm::propagate_const
< std::shared_ptr
< UnscheduledCallProducer > > 
unscheduled_
 
WorkerRegistry workerReg_
 

Detailed Description

Definition at line 30 of file WorkerManager.h.

Member Typedef Documentation

typedef std::vector<Worker*> edm::WorkerManager::AllWorkers

Definition at line 32 of file WorkerManager.h.

Constructor & Destructor Documentation

edm::WorkerManager::WorkerManager ( std::shared_ptr< ActivityRegistry actReg,
ExceptionToActionTable const &  actions 
)

Definition at line 16 of file WorkerManager.cc.

16  :
19  allWorkers_(),
20  unscheduled_(new UnscheduledCallProducer) {
21  } // WorkerManager::WorkerManager
AllWorkers allWorkers_
Definition: WorkerManager.h:88
edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
actions
Definition: Schedule.cc:374
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:86
areg
Definition: Schedule.cc:374
WorkerRegistry workerReg_
Definition: WorkerManager.h:85
edm::WorkerManager::WorkerManager ( std::shared_ptr< ModuleRegistry modReg,
std::shared_ptr< ActivityRegistry actReg,
ExceptionToActionTable const &  actions 
)

Definition at line 23 of file WorkerManager.cc.

25  :
26  workerReg_(areg,modReg),
28  allWorkers_(),
29  unscheduled_(new UnscheduledCallProducer) {
30  } // WorkerManager::WorkerManager
AllWorkers allWorkers_
Definition: WorkerManager.h:88
edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
actions
Definition: Schedule.cc:374
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:86
areg
Definition: Schedule.cc:374
WorkerRegistry workerReg_
Definition: WorkerManager.h:85

Member Function Documentation

ExceptionToActionTable const& edm::WorkerManager::actionTable ( ) const
inline

Definition at line 68 of file WorkerManager.h.

References actionTable_.

Referenced by edm::GlobalSchedule::actionTable(), and edm::StreamSchedule::actionTable().

68 {return *actionTable_;}
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:86
void edm::WorkerManager::addToAllWorkers ( Worker w)

Definition at line 127 of file WorkerManager.cc.

References allWorkers_, and edm::search_all().

Referenced by edm::GlobalSchedule::addToAllWorkers(), edm::StreamSchedule::addToAllWorkers(), and addToUnscheduledWorkers().

127  {
128  if(!search_all(allWorkers_, w)) {
129  allWorkers_.push_back(w);
130  }
131  }
const double w
Definition: UKUtility.cc:23
AllWorkers allWorkers_
Definition: WorkerManager.h:88
bool search_all(ForwardSequence const &s, Datum const &d)
Definition: Algorithms.h:46
void edm::WorkerManager::addToUnscheduledWorkers ( ParameterSet pset,
ProductRegistry preg,
PreallocationConfiguration const *  prealloc,
std::shared_ptr< ProcessConfiguration processConfiguration,
std::string  label,
std::set< std::string > &  unscheduledLabels,
std::vector< std::string > &  shouldBeUsedLabels 
)

Definition at line 41 of file WorkerManager.cc.

References addToAllWorkers(), assert(), edm::ParameterSet::getParameter(), getWorker(), edm::Worker::kFilter, kFilterType(), edm::Worker::kProducer, kProducerType(), edm::Worker::moduleType(), AlCaHLTBitMon_QueryRunRegistry::string, and unscheduled_.

Referenced by edm::SecondaryEventProvider::SecondaryEventProvider(), and edm::StreamSchedule::StreamSchedule().

47  {
48  //Need to
49  // 1) create worker
50  // 2) if it is a WorkerT<EDProducer>, add it to our list
51  auto modType = pset.getParameter<std::string>("@module_edm_type");
52  if(modType == kProducerType || modType == kFilterType) {
53  Worker* newWorker = getWorker(pset, preg, prealloc, processConfiguration, label);
54  assert(newWorker->moduleType() == Worker::kProducer || newWorker->moduleType() == Worker::kFilter);
55  unscheduledLabels.insert(label);
56  unscheduled_->addWorker(newWorker);
57  //add to list so it gets reset each new event
58  addToAllWorkers(newWorker);
59  } else {
60  shouldBeUsedLabels.push_back(label);
61  }
62  }
static const std::string kFilterType("EDFilter")
assert(m_qm.get())
edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
processConfiguration
Definition: Schedule.cc:374
static const std::string kProducerType("EDProducer")
preg
Definition: Schedule.cc:374
Worker * getWorker(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &label)
prealloc
Definition: Schedule.cc:374
void addToAllWorkers(Worker *w)
AllWorkers const& edm::WorkerManager::allWorkers ( ) const
inline

Definition at line 64 of file WorkerManager.h.

References allWorkers_.

Referenced by edm::GlobalSchedule::allWorkers(), and edm::StreamSchedule::allWorkers().

64 {return allWorkers_;}
AllWorkers allWorkers_
Definition: WorkerManager.h:88
void edm::WorkerManager::beginJob ( ProductRegistry const &  iRegistry)

Definition at line 94 of file WorkerManager.cc.

References allWorkers_, edm::Worker::beginJob(), edm::for_all(), edm::InEvent, edm::InLumi, edm::InRun, and edm::ProductRegistry::productLookup().

Referenced by edm::SecondaryEventProvider::beginJob(), and edm::GlobalSchedule::beginJob().

94  {
95  auto const runLookup = iRegistry.productLookup(InRun);
96  auto const lumiLookup = iRegistry.productLookup(InLumi);
97  auto const eventLookup = iRegistry.productLookup(InEvent);
98  for(auto& worker : allWorkers_) {
99  worker->updateLookup(InRun,*runLookup);
100  worker->updateLookup(InLumi,*lumiLookup);
101  worker->updateLookup(InEvent,*eventLookup);
102  }
103 
104  for_all(allWorkers_, std::bind(&Worker::beginJob, std::placeholders::_1));
105  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void beginJob()
Definition: Worker.cc:104
void edm::WorkerManager::beginStream ( StreamID  iID,
StreamContext streamContext 
)

Definition at line 108 of file WorkerManager.cc.

References allWorkers_.

Referenced by edm::SecondaryEventProvider::beginStream(), and edm::StreamSchedule::beginStream().

108  {
109  for(auto& worker: allWorkers_) {
110  worker->beginStream(iID, streamContext);
111  }
112  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
void edm::WorkerManager::endJob ( void  )

Definition at line 74 of file WorkerManager.cc.

References allWorkers_.

Referenced by edm::SecondaryEventProvider::endJob(), and edm::GlobalSchedule::endJob().

74  {
75  for(auto& worker : allWorkers_) {
76  worker->endJob();
77  }
78  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
void edm::WorkerManager::endJob ( ExceptionCollector collector)

Definition at line 80 of file WorkerManager.cc.

References edm::ExceptionCollector::addException(), allWorkers_, and edm::convertException::wrap().

80  {
81  for(auto& worker : allWorkers_) {
82  try {
84  worker->endJob();
85  });
86  }
87  catch (cms::Exception const& ex) {
88  collector.addException(ex);
89  }
90  }
91  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
auto wrap(F iFunc) -> decltype(iFunc())
void edm::WorkerManager::endStream ( StreamID  iID,
StreamContext streamContext 
)

Definition at line 115 of file WorkerManager.cc.

References allWorkers_.

Referenced by edm::SecondaryEventProvider::endStream(), and edm::StreamSchedule::endStream().

115  {
116  for(auto& worker: allWorkers_) {
117  worker->endStream(iID, streamContext);
118  }
119  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
Worker * edm::WorkerManager::getWorker ( ParameterSet pset,
ProductRegistry preg,
PreallocationConfiguration const *  prealloc,
std::shared_ptr< ProcessConfiguration const >  processConfiguration,
std::string const &  label 
)

Definition at line 32 of file WorkerManager.cc.

References actionTable_, edm::WorkerRegistry::getWorker(), and workerReg_.

Referenced by addToUnscheduledWorkers(), edm::StreamSchedule::fillWorkers(), and edm::GlobalSchedule::GlobalSchedule().

36  {
37  WorkerParams params(&pset, preg, prealloc, processConfiguration, *actionTable_);
38  return workerReg_.getWorker(params, label);
39  }
processConfiguration
Definition: Schedule.cc:374
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:86
WorkerRegistry workerReg_
Definition: WorkerManager.h:85
Worker * getWorker(WorkerParams const &p, std::string const &moduleLabel)
Retrieve the particular instance of the worker.
preg
Definition: Schedule.cc:374
prealloc
Definition: Schedule.cc:374
template<typename T , typename U >
void edm::WorkerManager::processOneOccurrence ( typename T::MyPrincipal &  principal,
EventSetup const &  eventSetup,
StreamID  streamID,
typename T::Context const *  topContext,
U const *  context,
bool  cleaningUpAfterException = false 
)

Definition at line 95 of file WorkerManager.h.

References mps_fire::action, actionTable_, edm::addContextAndPrintException(), assert(), cms::Exception::category(), cms::Exception::context(), alignCSCRings::e, edm::exception_actions::FailPath, edm::ExceptionToActionTable::find(), edm::exception_actions::IgnoreCompletely, edm::printCmsExceptionWarning(), resetAll(), edm::exception_actions::Rethrow, setupOnDemandSystem(), edm::exception_actions::SkipEvent, unscheduled_, and edm::convertException::wrap().

Referenced by edm::SecondaryEventProvider::beginLuminosityBlock(), edm::SecondaryEventProvider::beginRun(), edm::SecondaryEventProvider::endLuminosityBlock(), edm::SecondaryEventProvider::endRun(), edm::StreamSchedule::processOneEvent(), edm::GlobalSchedule::processOneGlobal(), edm::StreamSchedule::processOneStream(), and edm::SecondaryEventProvider::setupPileUpEvent().

100  {
101  this->resetAll();
102 
103  try {
104  convertException::wrap([&]() {
105  try {
106  if (T::isEvent_) {
107  setupOnDemandSystem(dynamic_cast<EventPrincipal&>(ep), es);
108  } else {
109  //make sure the unscheduled items see this run or lumi rtansition
110  unscheduled_->runNow<T,U>(ep, es,streamID, topContext, context);
111  }
112  }
113  catch(cms::Exception& e) {
117  if (action == exception_actions::SkipEvent) {
118  printCmsExceptionWarning("SkipEvent", e);
119  } else {
120  throw;
121  }
122  }
123  });
124  }
125  catch(cms::Exception& ex) {
126  if (ex.context().empty()) {
127  addContextAndPrintException("Calling function WorkerManager::processOneOccurrence", ex, cleaningUpAfterException);
128  } else {
129  addContextAndPrintException("", ex, cleaningUpAfterException);
130  }
131  throw;
132  }
133  }
assert(m_qm.get())
void addContextAndPrintException(char const *context, cms::Exception &ex, bool disablePrint)
edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
std::string const & category() const
Definition: Exception.cc:183
exception_actions::ActionCodes find(const std::string &category) const
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:86
std::list< std::string > const & context() const
Definition: Exception.cc:191
string action
Definition: mps_fire.py:28
auto wrap(F iFunc) -> decltype(iFunc())
long double T
void setupOnDemandSystem(EventPrincipal &principal, EventSetup const &es)
void printCmsExceptionWarning(char const *behavior, cms::Exception const &e)
void edm::WorkerManager::resetAll ( )
private

Definition at line 122 of file WorkerManager.cc.

References allWorkers_, edm::for_all(), and edm::Worker::reset().

Referenced by processOneOccurrence().

122  {
123  for_all(allWorkers_, std::bind(&Worker::reset, std::placeholders::_1));
124  }
AllWorkers allWorkers_
Definition: WorkerManager.h:88
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void reset()
Definition: Worker.h:95
void edm::WorkerManager::setOnDemandProducts ( ProductRegistry pregistry,
std::set< std::string > const &  unscheduledLabels 
) const

Definition at line 64 of file WorkerManager.cc.

References edm::InEvent, parseEventContent::prod, and edm::ProductRegistry::productListUpdator().

Referenced by edm::SecondaryEventProvider::SecondaryEventProvider(), and edm::StreamSchedule::StreamSchedule().

64  {
65  for(auto& prod : pregistry.productListUpdator()) {
66  if(prod.second.produced() &&
67  prod.second.branchType() == InEvent &&
68  unscheduledLabels.end() != unscheduledLabels.find(prod.second.moduleLabel())) {
69  prod.second.setOnDemand(true);
70  }
71  }
72  }
void edm::WorkerManager::setupOnDemandSystem ( EventPrincipal principal,
EventSetup const &  es 
)
private

Definition at line 134 of file WorkerManager.cc.

References edm::EventPrincipal::setUnscheduledHandler(), unscheduled(), and unscheduled_.

Referenced by processOneOccurrence().

134  {
135  // NOTE: who owns the productdescrption? Just copied by value
136  unscheduled_->setEventSetup(es);
137  ep.setUnscheduledHandler(unscheduled());
138  }
std::shared_ptr< UnscheduledCallProducer const > unscheduled() const
Definition: WorkerManager.h:82
edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
std::shared_ptr<UnscheduledCallProducer const> edm::WorkerManager::unscheduled ( ) const
inlineprivate

Definition at line 82 of file WorkerManager.h.

References edm::get_underlying_safe(), and unscheduled_.

Referenced by setupOnDemandSystem().

edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::shared_ptr<UnscheduledCallProducer>& edm::WorkerManager::unscheduled ( )
inlineprivate

Definition at line 83 of file WorkerManager.h.

References edm::get_underlying_safe(), and unscheduled_.

edm::propagate_const< std::shared_ptr< UnscheduledCallProducer > > unscheduled_
Definition: WorkerManager.h:90
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)

Member Data Documentation

ExceptionToActionTable const* edm::WorkerManager::actionTable_
private

Definition at line 86 of file WorkerManager.h.

Referenced by actionTable(), getWorker(), and processOneOccurrence().

AllWorkers edm::WorkerManager::allWorkers_
private
edm::propagate_const<std::shared_ptr<UnscheduledCallProducer> > edm::WorkerManager::unscheduled_
private
WorkerRegistry edm::WorkerManager::workerReg_
private

Definition at line 85 of file WorkerManager.h.

Referenced by getWorker().