CMS 3D CMS Logo

Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes

edm::Worker Class Reference

#include <Worker.h>

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

List of all members.

Public Types

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

Public Member Functions

void beginJob ()
void clearCounters ()
ModuleDescription const * descPtr () const
ModuleDescription const & description () const
template<typename T >
bool doWork (typename T::MyPrincipal &, EventSetup const &c, CurrentProcessingContext const *cpc, CPUTimer *const timer)
void endJob ()
virtual Types moduleType () const =0
Workeroperator= (Worker const &)
void pathFinished (EventPrincipal &)
void postDoEvent (EventPrincipal &)
void postForkReacquireResources (unsigned int iChildIndex, unsigned int iNumberOfChildren)
void preForkReleaseResources ()
void reset ()
void respondToCloseInputFile (FileBlock const &fb)
void respondToCloseOutputFiles (FileBlock const &fb)
void respondToOpenInputFile (FileBlock const &fb)
void respondToOpenOutputFiles (FileBlock const &fb)
void setActivityRegistry (boost::shared_ptr< ActivityRegistry > areg)
void setEarlyDeleteHelper (EarlyDeleteHelper *iHelper)
State state () const
std::pair< double, double > timeCpuReal () const
int timesExcept () const
int timesFailed () const
int timesPass () const
int timesPassed () const
int timesRun () const
int timesVisited () const
virtual void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)=0
void useStopwatch ()
 Worker (ModuleDescription const &iMD, WorkerParams const &iWP)
 Worker (Worker const &)
virtual ~Worker ()

Protected Member Functions

virtual void implBeginJob ()=0
virtual bool implDoBegin (EventPrincipal &, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual bool implDoBegin (RunPrincipal &rp, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual bool implDoBegin (LuminosityBlockPrincipal &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual bool implDoEnd (EventPrincipal &, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual bool implDoEnd (RunPrincipal &rp, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual bool implDoEnd (LuminosityBlockPrincipal &lbp, EventSetup const &c, CurrentProcessingContext const *cpc)=0
virtual void implEndJob ()=0
virtual std::string workerType () const =0

Private Member Functions

virtual void implPostForkReacquireResources (unsigned int iChildIndex, unsigned int iNumberOfChildren)=0
virtual void implPreForkReleaseResources ()=0
virtual void implRespondToCloseInputFile (FileBlock const &fb)=0
virtual void implRespondToCloseOutputFiles (FileBlock const &fb)=0
virtual void implRespondToOpenInputFile (FileBlock const &fb)=0
virtual void implRespondToOpenOutputFiles (FileBlock const &fb)=0

Private Attributes

ActionTable const * actions_
boost::shared_ptr
< ActivityRegistry
actReg_
boost::shared_ptr< cms::Exceptioncached_exception_
EarlyDeleteHelperearlyDeleteHelper_
ModuleDescription md_
State state_
RunStopwatch::StopwatchPointer stopwatch_
int timesExcept_
int timesFailed_
int timesPassed_
int timesRun_
int timesVisited_

Detailed Description

Definition at line 47 of file Worker.h.


Member Enumeration Documentation

Enumerator:
Ready 
Pass 
Fail 
Exception 

Definition at line 49 of file Worker.h.

Enumerator:
kAnalyzer 
kFilter 
kProducer 
kOutputModule 

Definition at line 50 of file Worker.h.


Constructor & Destructor Documentation

edm::Worker::Worker ( ModuleDescription const &  iMD,
WorkerParams const &  iWP 
)

Definition at line 44 of file Worker.cc.

edm::Worker::~Worker ( ) [virtual]

Definition at line 61 of file Worker.cc.

                  {
  }
edm::Worker::Worker ( Worker const &  )

Member Function Documentation

void edm::Worker::beginJob ( void  )
void edm::Worker::clearCounters ( ) [inline]
ModuleDescription const* edm::Worker::descPtr ( ) const [inline]

Definition at line 78 of file Worker.h.

References md_.

{return &md_; }
ModuleDescription const& edm::Worker::description ( ) const [inline]
template<typename T >
bool edm::Worker::doWork ( typename T::MyPrincipal &  ep,
EventSetup const &  c,
CurrentProcessingContext const *  cpc,
CPUTimer *const  timer 
)

Definition at line 215 of file Worker.h.

References alignCSCRings::action, actions_, actReg_, edm::convertException::badAllocToEDM(), trackerHits::c, cached_exception_, cms::Exception::category(), edm::convertException::charPtrToEDM(), alignCSCRings::e, exception, Exception, Fail, edm::actions::FailPath, edm::ActionTable::find(), reco_skim_cfg_mod::IgnoreCompletely, edm::actions::IgnoreCompletely, implDoBegin(), implDoEnd(), edm::CurrentProcessingContext::isEndPath(), edm::CurrentProcessingContext::isUnscheduled(), md_, Pass, edm::printCmsExceptionWarning(), edm::actions::Rethrow, alignCSCRings::s, edm::actions::SkipEvent, state_, edm::convertException::stdToEDM(), stopwatch_, AlCaHLTBitMon_QueryRunRegistry::string, edm::convertException::stringToEDM(), timesExcept_, timesFailed_, timesPassed_, timesRun_, timesVisited_, and edm::convertException::unknownToEDM().

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

                                               {

    // A RunStopwatch, but only if we are processing an event.
    RunDualStopwatches stopwatch(T::isEvent_ ? stopwatch_ : RunStopwatch::StopwatchPointer(),
                                 iTimer);

    if (T::isEvent_) {
      ++timesVisited_;
    }
    bool rc = false;

    switch(state_) {
      case Ready: break;
      case Pass: return true;
      case Fail: return false;
      case Exception: {
          cached_exception_->raise();
      }
    }

    if (T::isEvent_) ++timesRun_;

    try {
      try {

        ModuleSignalSentry<T> cpp(actReg_.get(), md_);
        if (T::begin_) {
          rc = implDoBegin(ep, es, cpc);
        } else {
          rc = implDoEnd(ep, es, cpc);
        }

        if (rc) {
          state_ = Pass;
          if (T::isEvent_) ++timesPassed_;
        } else {
          state_ = Fail;
          if (T::isEvent_) ++timesFailed_;
        }
      }
      catch (cms::Exception& e) { throw; }
      catch(std::bad_alloc& bda) { convertException::badAllocToEDM(); }
      catch (std::exception& e) { convertException::stdToEDM(e); }
      catch(std::string& s) { convertException::stringToEDM(s); }
      catch(char const* c) { convertException::charPtrToEDM(c); }
      catch (...) { convertException::unknownToEDM(); }
    }
    catch(cms::Exception& ex) {

      // NOTE: the warning printed as a result of ignoring or failing
      // a module will only be printed during the full true processing
      // pass of this module

      // Get the action corresponding to this exception.  However, if processing
      // something other than an event (e.g. run, lumi) always rethrow.
      actions::ActionCodes action = (T::isEvent_ ? actions_->find(ex.category()) : actions::Rethrow);

      // If we are processing an endpath and the module was scheduled, treat SkipEvent or FailPath
      // as IgnoreCompletely, so any subsequent OutputModules are still run.
      // For unscheduled modules only treat FailPath as IgnoreCompletely but still allow SkipEvent to throw
      if (cpc && cpc->isEndPath()) {
        if ((action == actions::SkipEvent && !cpc->isUnscheduled()) ||
             action == actions::FailPath) action = actions::IgnoreCompletely;
      }
      switch(action) {
        case actions::IgnoreCompletely:
          rc = true;
          ++timesPassed_;
          state_ = Pass;
          exceptionContext<T>(ep, ex, cpc);
          edm::printCmsExceptionWarning("IgnoreCompletely", ex);
          break;
        default:
          if (T::isEvent_) ++timesExcept_;
          state_ = Exception;
          cached_exception_.reset(ex.clone());
          cached_exception_->raise();
      }
    }
    return rc;
  }
void edm::Worker::endJob ( void  )
virtual void edm::Worker::implBeginJob ( ) [protected, pure virtual]

Implemented in edm::WorkerT< T >, and edm::WorkerT< OutputModule >.

Referenced by beginJob().

virtual bool edm::Worker::implDoBegin ( LuminosityBlockPrincipal lbp,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]
virtual bool edm::Worker::implDoBegin ( RunPrincipal rp,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]
virtual bool edm::Worker::implDoBegin ( EventPrincipal ,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]

Implemented in edm::WorkerT< T >, and edm::WorkerT< OutputModule >.

Referenced by doWork().

virtual bool edm::Worker::implDoEnd ( EventPrincipal ,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]

Implemented in edm::WorkerT< T >, and edm::WorkerT< OutputModule >.

Referenced by doWork().

virtual bool edm::Worker::implDoEnd ( RunPrincipal rp,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]
virtual bool edm::Worker::implDoEnd ( LuminosityBlockPrincipal lbp,
EventSetup const &  c,
CurrentProcessingContext const *  cpc 
) [protected, pure virtual]
virtual void edm::Worker::implEndJob ( ) [protected, pure virtual]

Implemented in edm::WorkerT< T >, and edm::WorkerT< OutputModule >.

Referenced by endJob().

virtual void edm::Worker::implPostForkReacquireResources ( unsigned int  iChildIndex,
unsigned int  iNumberOfChildren 
) [private, pure virtual]
virtual void edm::Worker::implPreForkReleaseResources ( ) [private, pure virtual]
virtual void edm::Worker::implRespondToCloseInputFile ( FileBlock const &  fb) [private, pure virtual]
virtual void edm::Worker::implRespondToCloseOutputFiles ( FileBlock const &  fb) [private, pure virtual]
virtual void edm::Worker::implRespondToOpenInputFile ( FileBlock const &  fb) [private, pure virtual]
virtual void edm::Worker::implRespondToOpenOutputFiles ( FileBlock const &  fb) [private, pure virtual]
virtual Types edm::Worker::moduleType ( ) const [pure virtual]
Worker& edm::Worker::operator= ( Worker const &  )
void edm::Worker::pathFinished ( EventPrincipal iEvent)

Definition at line 120 of file Worker.cc.

References earlyDeleteHelper_, and edm::EarlyDeleteHelper::pathFinished().

                                                  {
    if(earlyDeleteHelper_) {
      earlyDeleteHelper_->pathFinished(iEvent);
    }
  }
void edm::Worker::postDoEvent ( EventPrincipal iEvent)

Definition at line 125 of file Worker.cc.

References earlyDeleteHelper_, and edm::EarlyDeleteHelper::moduleRan().

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

                                                 {
    if(earlyDeleteHelper_) {
      earlyDeleteHelper_->moduleRan(iEvent);
    }
  }
void edm::Worker::postForkReacquireResources ( unsigned int  iChildIndex,
unsigned int  iNumberOfChildren 
) [inline]

Definition at line 70 of file Worker.h.

References implPostForkReacquireResources().

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

{implPostForkReacquireResources(iChildIndex, iNumberOfChildren);}
void edm::Worker::preForkReleaseResources ( ) [inline]
void edm::Worker::reset ( void  ) [inline]

Definition at line 72 of file Worker.h.

References Ready, and state_.

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

{ state_ = Ready; }
void edm::Worker::respondToCloseInputFile ( FileBlock const &  fb) [inline]
void edm::Worker::respondToCloseOutputFiles ( FileBlock const &  fb) [inline]
void edm::Worker::respondToOpenInputFile ( FileBlock const &  fb) [inline]
void edm::Worker::respondToOpenOutputFiles ( FileBlock const &  fb) [inline]
void edm::Worker::setActivityRegistry ( boost::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 64 of file Worker.cc.

References actReg_.

                                                                         {
    actReg_ = areg;
  }
void edm::Worker::setEarlyDeleteHelper ( EarlyDeleteHelper iHelper)

Definition at line 68 of file Worker.cc.

References earlyDeleteHelper_.

                                                              {
    earlyDeleteHelper_=iHelper;
  }
State edm::Worker::state ( ) const [inline]

Definition at line 107 of file Worker.h.

References state_.

{ return state_; }
std::pair<double, double> edm::Worker::timeCpuReal ( ) const [inline]

Definition at line 92 of file Worker.h.

References stopwatch_.

                                                {
      return std::pair<double, double>(stopwatch_->cpuTime(), stopwatch_->realTime());
    }
int edm::Worker::timesExcept ( ) const [inline]

Definition at line 106 of file Worker.h.

References timesExcept_.

Referenced by edm::fillWorkerSummaryAux().

{ return timesExcept_; }
int edm::Worker::timesFailed ( ) const [inline]

Definition at line 105 of file Worker.h.

References timesFailed_.

Referenced by edm::fillWorkerSummaryAux().

{ return timesFailed_; }
int edm::Worker::timesPass ( ) const [inline]

Definition at line 109 of file Worker.h.

References timesPassed().

{ return timesPassed(); } // for backward compatibility only - to be removed soon
int edm::Worker::timesPassed ( ) const [inline]

Definition at line 104 of file Worker.h.

References timesPassed_.

Referenced by edm::fillWorkerSummaryAux(), and timesPass().

{ return timesPassed_; }
int edm::Worker::timesRun ( ) const [inline]

Definition at line 102 of file Worker.h.

References timesRun_.

Referenced by edm::fillWorkerSummaryAux().

{ return timesRun_; }
int edm::Worker::timesVisited ( ) const [inline]

Definition at line 103 of file Worker.h.

References timesVisited_.

Referenced by edm::fillWorkerSummaryAux().

{ return timesVisited_; }
virtual void edm::Worker::updateLookup ( BranchType  iBranchType,
ProductHolderIndexHelper const &   
) [pure virtual]
void edm::Worker::useStopwatch ( )

Definition at line 116 of file Worker.cc.

References stopwatch_.

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

                           {
    stopwatch_.reset(new RunStopwatch::StopwatchPointer::element_type);
  }
virtual std::string edm::Worker::workerType ( ) const [protected, pure virtual]

Member Data Documentation

Definition at line 147 of file Worker.h.

Referenced by doWork().

boost::shared_ptr<ActivityRegistry> edm::Worker::actReg_ [private]

Definition at line 150 of file Worker.h.

Referenced by beginJob(), doWork(), endJob(), and setActivityRegistry().

boost::shared_ptr<cms::Exception> edm::Worker::cached_exception_ [private]

Definition at line 148 of file Worker.h.

Referenced by doWork().

Definition at line 152 of file Worker.h.

Referenced by pathFinished(), postDoEvent(), and setEarlyDeleteHelper().

Definition at line 146 of file Worker.h.

Referenced by beginJob(), descPtr(), description(), doWork(), and endJob().

Definition at line 144 of file Worker.h.

Referenced by beginJob(), doWork(), endJob(), reset(), and state().

Definition at line 137 of file Worker.h.

Referenced by doWork(), timeCpuReal(), and useStopwatch().

Definition at line 143 of file Worker.h.

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

Definition at line 142 of file Worker.h.

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

Definition at line 141 of file Worker.h.

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

int edm::Worker::timesRun_ [private]

Definition at line 139 of file Worker.h.

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

Definition at line 140 of file Worker.h.

Referenced by clearCounters(), doWork(), and timesVisited().