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)
 

Private Attributes

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

Detailed Description

Definition at line 29 of file WorkerManager.h.

Member Typedef Documentation

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

Definition at line 31 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:84
actions
Definition: Schedule.cc:369
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:82
areg
Definition: Schedule.cc:369
std::shared_ptr< UnscheduledCallProducer > unscheduled_
Definition: WorkerManager.h:86
WorkerRegistry workerReg_
Definition: WorkerManager.h:81
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:84
actions
Definition: Schedule.cc:369
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:82
areg
Definition: Schedule.cc:369
std::shared_ptr< UnscheduledCallProducer > unscheduled_
Definition: WorkerManager.h:86
WorkerRegistry workerReg_
Definition: WorkerManager.h:81

Member Function Documentation

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

Definition at line 67 of file WorkerManager.h.

References actionTable_.

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

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

Definition at line 128 of file WorkerManager.cc.

References allWorkers_, and edm::search_all().

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

128  {
129  if(!search_all(allWorkers_, w)) {
130  allWorkers_.push_back(w);
131  }
132  }
const double w
Definition: UKUtility.cc:23
AllWorkers allWorkers_
Definition: WorkerManager.h:84
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())
processConfiguration
Definition: Schedule.cc:369
static const std::string kProducerType("EDProducer")
std::shared_ptr< UnscheduledCallProducer > unscheduled_
Definition: WorkerManager.h:86
preg
Definition: Schedule.cc:369
Worker * getWorker(ParameterSet &pset, ProductRegistry &preg, PreallocationConfiguration const *prealloc, std::shared_ptr< ProcessConfiguration const > processConfiguration, std::string const &label)
prealloc
Definition: Schedule.cc:369
void addToAllWorkers(Worker *w)
AllWorkers const& edm::WorkerManager::allWorkers ( ) const
inline

Definition at line 63 of file WorkerManager.h.

References allWorkers_.

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

63 {return allWorkers_;}
AllWorkers allWorkers_
Definition: WorkerManager.h:84
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, edm::loadMissingDictionaries(), 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));
106  }
AllWorkers allWorkers_
Definition: WorkerManager.h:84
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void loadMissingDictionaries()
void beginJob()
Definition: Worker.cc:104
void edm::WorkerManager::beginStream ( StreamID  iID,
StreamContext streamContext 
)

Definition at line 109 of file WorkerManager.cc.

References allWorkers_.

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

109  {
110  for(auto& worker: allWorkers_) {
111  worker->beginStream(iID, streamContext);
112  }
113  }
AllWorkers allWorkers_
Definition: WorkerManager.h:84
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:84
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:84
auto wrap(F iFunc) -> decltype(iFunc())
void edm::WorkerManager::endStream ( StreamID  iID,
StreamContext streamContext 
)

Definition at line 116 of file WorkerManager.cc.

References allWorkers_.

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

116  {
117  for(auto& worker: allWorkers_) {
118  worker->endStream(iID, streamContext);
119  }
120  }
AllWorkers allWorkers_
Definition: WorkerManager.h:84
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:369
ExceptionToActionTable const * actionTable_
Definition: WorkerManager.h:82
WorkerRegistry workerReg_
Definition: WorkerManager.h:81
Worker * getWorker(WorkerParams const &p, std::string const &moduleLabel)
Retrieve the particular instance of the worker.
preg
Definition: Schedule.cc:369
prealloc
Definition: Schedule.cc:369
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 91 of file WorkerManager.h.

References alignCSCRings::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().

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

Definition at line 123 of file WorkerManager.cc.

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

Referenced by processOneOccurrence().

123  {
124  for_all(allWorkers_, std::bind(&Worker::reset, std::placeholders::_1));
125  }
AllWorkers allWorkers_
Definition: WorkerManager.h:84
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:16
void reset()
Definition: Worker.h:94
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 135 of file WorkerManager.cc.

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

Referenced by processOneOccurrence().

135  {
136  // NOTE: who owns the productdescrption? Just copied by value
137  unscheduled_->setEventSetup(es);
138  ep.setUnscheduledHandler(unscheduled_);
139  }
std::shared_ptr< UnscheduledCallProducer > unscheduled_
Definition: WorkerManager.h:86

Member Data Documentation

ExceptionToActionTable const* edm::WorkerManager::actionTable_
private

Definition at line 82 of file WorkerManager.h.

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

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

Definition at line 81 of file WorkerManager.h.

Referenced by getWorker().