The Gaudi Framework  v31r0 (aeb156f0)
AlgoExecutionTask Class Reference

#include <src/AlgoExecutionTask.h>

Inheritance diagram for AlgoExecutionTask:
Collaboration diagram for AlgoExecutionTask:

Public Member Functions

 AlgoExecutionTask (IAlgorithm *algorithm, const EventContext &ctx, ISvcLocator *svcLocator, IAlgExecStateSvc *aem, std::function< StatusCode()> promote2ExecutedClosure)
 
tbb::task * execute () override
 

Private Attributes

SmartIF< IAlgorithmm_algorithm
 
const EventContextm_evtCtx
 
IAlgExecStateSvcm_aess
 
SmartIF< ISvcLocatorm_serviceLocator
 
std::function< StatusCode()> m_promote2ExecutedClosure
 

Detailed Description

Definition at line 14 of file AlgoExecutionTask.h.

Constructor & Destructor Documentation

AlgoExecutionTask::AlgoExecutionTask ( IAlgorithm algorithm,
const EventContext ctx,
ISvcLocator svcLocator,
IAlgExecStateSvc aem,
std::function< StatusCode()>  promote2ExecutedClosure 
)
inline

Definition at line 16 of file AlgoExecutionTask.h.

18  : m_algorithm( algorithm )
19  , m_evtCtx( ctx )
20  , m_aess( aem )
21  , m_serviceLocator( svcLocator )
22  , m_promote2ExecutedClosure( std::move( promote2ExecutedClosure ) ){};
const EventContext & m_evtCtx
IAlgExecStateSvc * m_aess
SmartIF< ISvcLocator > m_serviceLocator
SmartIF< IAlgorithm > m_algorithm
T move(T...args)
std::function< StatusCode()> m_promote2ExecutedClosure

Member Function Documentation

tbb::task * AlgoExecutionTask::execute ( )
override

Definition at line 21 of file AlgoExecutionTask.cpp.

21  {
22 
23  IAlgorithm* ialg = m_algorithm.get();
24  Gaudi::Algorithm* this_algo = dynamic_cast<Gaudi::Algorithm*>( ialg );
25  if ( !this_algo ) { throw GaudiException( "Cast to Algorithm failed!", "AlgoExecutionTask", StatusCode::FAILURE ); }
26 
27  bool eventfailed = false;
29 
30  // Get the IProperty interface of the ApplicationMgr to pass it to RetCodeGuard
31  const SmartIF<IProperty> appmgr( m_serviceLocator );
32 
34  MsgStream log( messageSvc, "AlgoExecutionTask" );
35 
37  log << MSG::DEBUG << "New thread detected: 0x" << std::hex << pthread_self() << std::dec
38  << ". Doing thread local initialization." << endmsg;
40  tps = m_serviceLocator->service( "ThreadPoolSvc" );
41  if ( !tps.isValid() ) {
42  log << MSG::ERROR << "unable to get the ThreadPoolSvc to trigger thread local initialization" << endmsg;
43  throw GaudiException( "retrieval of ThrePoolSvc failed", "AlgoExecutionTask", StatusCode::FAILURE );
44  }
45 
46  tps->initThisThread();
47  }
48 
49  // select the appropriate store
50  this_algo->whiteboard()->selectStore( m_evtCtx.valid() ? m_evtCtx.slot() : 0 ).ignore();
51 
53  try {
56  if ( UNLIKELY( !sc.isSuccess() ) ) {
57  log << MSG::WARNING << "Execution of algorithm " << m_algorithm->name() << " failed" << endmsg;
58  eventfailed = true;
59  }
60  rcg.ignore(); // disarm the guard
61  } catch ( const GaudiException& Exception ) {
62  log << MSG::FATAL << ".executeEvent(): Exception with tag=" << Exception.tag() << " thrown by "
63  << m_algorithm->name() << endmsg;
64  log << MSG::ERROR << Exception << endmsg;
65  eventfailed = true;
66  } catch ( const std::exception& Exception ) {
67  log << MSG::FATAL << ".executeEvent(): Standard std::exception thrown by " << m_algorithm->name() << endmsg;
68  log << MSG::ERROR << Exception.what() << endmsg;
69  eventfailed = true;
70  } catch ( ... ) {
71  log << MSG::FATAL << ".executeEvent(): UNKNOWN Exception thrown by " << m_algorithm->name() << endmsg;
72  eventfailed = true;
73  }
74 
75  // DP it is important to propagate the failure of an event.
76  // We need to stop execution when this happens so that execute run can
77  // then receive the FAILURE
78  m_aess->updateEventStatus( eventfailed, m_evtCtx );
79 
80  // update scheduler state
82 
84 
85  return nullptr;
86 }
#define UNLIKELY(x)
Definition: Kernel.h:89
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Define general base for Gaudi exception.
Helper class to set the application return code in case of early exit (e.g.
Definition: RetCodeGuard.h:9
const EventContext & m_evtCtx
ContextID_t slot() const
Definition: EventContext.h:48
IAlgExecStateSvc * m_aess
SmartIF< ISvcLocator > m_serviceLocator
SmartIF< IHiveWhiteBoard > & whiteboard() const
Definition: Algorithm.cpp:677
SmartIF< IAlgorithm > m_algorithm
virtual void initThisThread()=0
Do thread local initialization of current thread.
constexpr int UnhandledException
Definition: AppReturnCode.h:27
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
virtual StatusCode selectStore(size_t partitionIndex)=0
Activate an given &#39;slot&#39; for all subsequent calls within the same thread id.
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
virtual StatusCode sysExecute(const EventContext &)=0
System execution. This method invokes the execute() method of a concrete algorithm.
virtual const std::string & tag() const
name tag for the exception, or exception type
STL class.
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:28
GAUDI_API void setCurrentContext(const EventContext *ctx)
virtual void updateEventStatus(const bool &b, const EventContext &ctx)=0
thread_local bool ThreadInitDone
bool isValid() const
Allow for check if smart pointer is valid.
Definition: SmartIF.h:62
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
constexpr static const auto FAILURE
Definition: StatusCode.h:86
GAUDI_API void setCurrentContextEvt(long int evtN)
T hex(T...args)
std::function< StatusCode()> m_promote2ExecutedClosure
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
bool valid() const
Definition: EventContext.h:51

Member Data Documentation

IAlgExecStateSvc* AlgoExecutionTask::m_aess
private

Definition at line 28 of file AlgoExecutionTask.h.

SmartIF<IAlgorithm> AlgoExecutionTask::m_algorithm
private

Definition at line 26 of file AlgoExecutionTask.h.

const EventContext& AlgoExecutionTask::m_evtCtx
private

Definition at line 27 of file AlgoExecutionTask.h.

std::function<StatusCode()> AlgoExecutionTask::m_promote2ExecutedClosure
private

Definition at line 30 of file AlgoExecutionTask.h.

SmartIF<ISvcLocator> AlgoExecutionTask::m_serviceLocator
private

Definition at line 29 of file AlgoExecutionTask.h.


The documentation for this class was generated from the following files: