ApplicationMgr Class Reference

The Application Manager class. More...

#include <src/ApplicationMgr/ApplicationMgr.h>

Inheritance diagram for ApplicationMgr:
Collaboration diagram for ApplicationMgr:

Public Types

typedef std::list< std::pair< IService *, int > > ListSvc
 
typedef std::vector< std::string > VectorName
 
- Public Types inherited from CommonMessaging< implements4< IAppMgrUI, IEventProcessor, IService, IStateful > >
using base_class = CommonMessaging
 
using base_class = CommonMessaging
 

Public Member Functions

 ApplicationMgr (IInterface *=nullptr)
 
 ~ApplicationMgr () override=default
 
StatusCode queryInterface (const InterfaceID &iid, void **pinterface) override
 
StatusCode run () override
 
StatusCode configure () override
 
StatusCode terminate () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode nextEvent (int maxevt) override
 
const std::string & name () const override
 
StatusCode executeEvent (void *par) override
 implementation of IEventProcessor::executeEvent(void*) More...
 
StatusCode executeRun (int evtmax) override
 implementation of IEventProcessor::executeRun(int) More...
 
StatusCode stopRun () override
 implementation of IEventProcessor::stopRun() More...
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 
StatusCode sysStart () override
 
StatusCode sysStop () override
 
StatusCode sysFinalize () override
 
StatusCode sysReinitialize () override
 
StatusCode sysRestart () override
 
void SIGoHandler (Property &theProp)
 
void SIExitHandler (Property &theProp)
 
template<class I >
SmartIF< IComponentManager > & getManager ()
 
SmartIF< ISvcManager > & svcManager ()
 
SmartIF< IAlgManager > & algManager ()
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Needed to locate the message service. More...
 
Property handlers
void evtLoopPropertyHandler (Property &theProp)
 
StatusCode decodeExtSvcNameList ()
 
StatusCode decodeCreateSvcNameList ()
 
void createSvcNameListHandler (Property &)
 
void extSvcNameListHandler (Property &theProp)
 
StatusCode decodeMultiThreadSvcNameList ()
 
void multiThreadSvcNameListHandler (Property &theProp)
 
StatusCode decodeDllNameList ()
 
void dllNameListHandler (Property &theProp)
 
void pluginDebugPropertyHandler (Property &theProp)
 
void initLoopCheckHndlr (Property &)
 
- Public Member Functions inherited from CommonMessaging< implements4< IAppMgrUI, IEventProcessor, IService, IStateful > >
 ~CommonMessaging () override=default
 Virtual destructor. More...
 
 ~CommonMessaging () override=default
 Virtual destructor. More...
 
SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Protected Types

typedef std::map< unsigned long, SmartIF< IComponentManager > > ManagersMap
 Typedef for the map of component managers, the key is the "id" field of the basic InterfaceID of the managed components. More...
 

Protected Member Functions

StatusCode declareMultiSvcType (const std::string &name, const std::string &type)
 declare one or more copies of svc type/name as determined by NoOfThreads More...
 
StatusCode addMultiSvc (const Gaudi::Utils::TypeNameString &typeName, int prio)
 add one or more copies of svc type/name as determined by NoOfThreads More...
 
void setServiceManager (ISvcManager *) override
 
StatusCode i_startup ()
 Internal startup routine. More...
 
StatusCode GoToState (Gaudi::StateMachine::State state, bool ignoreFailures=false)
 Reach a state from current state (whichever it is) going through the correct transitions. More...
 
- Protected Member Functions inherited from CommonMessaging< implements4< IAppMgrUI, IEventProcessor, IService, IStateful > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Protected Attributes

ManagersMap m_managers
 Map of known component managers. More...
 
StringArrayProperty m_declaredManagers
 Property to declare the list of known managers. More...
 
SmartIF< ISvcManagerm_svcManager
 Cached pointer to the manager of services. More...
 
SmartIF< IAlgManagerm_algManager
 Cached pointer to the manager of algorithms. More...
 
SmartIF< ISvcLocatorm_svcLocator
 Reference to its own service locator (must be instantiated prior to any service!) More...
 
SmartIF< DLLClassManagerm_classManager
 Reference to the class manager. More...
 
SmartIF< PropertyMgrm_propertyMgr
 Reference to Property Manager. More...
 
IntegerProperty m_SIGo
 For SI's "Go" command via callback. More...
 
IntegerProperty m_SIExit
 For SI's "Exit" command via callback. More...
 
StringArrayProperty m_topAlgNameList
 List of top level algorithms names. More...
 
StringArrayProperty m_outStreamNameList
 List of output stream names. More...
 
StringProperty m_outStreamType
 Output stream type (obsolete?) More...
 
StringProperty m_messageSvcType
 MessageSvc type. More...
 
StringProperty m_jobOptionsSvcType
 JobOptionsSvc type. More...
 
std::string m_name = "ApplicationMgr"
 Name. More...
 
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Internal State. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Internal State. More...
 
VectorName m_defServices
 Vector default services names. More...
 
VectorName m_svcMapping
 Default mapping of services. More...
 
VectorName m_svcOptMapping
 Default mapping of services. More...
 
SmartIF< IMessageSvcm_messageSvc
 Reference to the message service. More...
 
SmartIF< IRunablem_runable
 Reference to the runable object. More...
 
SmartIF< IEventProcessorm_processingMgr
 Reference to processing manager object. More...
 
SmartIF< IJobOptionsSvcm_jobOptionsSvc
 Reference to JobOption service. More...
 
int m_evtMax
 Number of events to be processed. More...
 
StringArrayProperty m_extSvcNameList
 List of external services names. More...
 
BooleanProperty m_extSvcCreates
 LHCb or ATLAS defn of "ExtSvc". More...
 
StringArrayProperty m_multiThreadSvcNameList
 List of external services names for which we want a copy per evt thread. More...
 
int m_noOfEvtThreads
 no of multiThreadSvc copies More...
 
StringArrayProperty m_dllNameList
 List of DDL's names. More...
 
std::string m_jobOptionsType
 Source type (e.g. dbase, file...) More...
 
std::string m_jobOptionsPath
 The "file" to look for properties. More...
 
std::string m_jobOptionsPreAction
 additional command to run on config More...
 
std::string m_jobOptionsPostAction
 additional command to run on config More...
 
std::string m_runableType
 Runable type. More...
 
std::string m_eventLoopMgr
 Processing manager type. More...
 
std::string m_evtsel
 Event selection. More...
 
std::string m_histPersName
 CGL: Name of the Hist Pers Svc. More...
 
int m_outputLevel
 Message output level. More...
 
std::string m_appName
 The name of the application. More...
 
std::string m_appVersion
 The version of the application. More...
 
bool m_actHistory
 Activate HistorySvc. More...
 
bool m_codeCheck
 Activate StatusCode checking. More...
 
IntegerProperty m_pluginDebugLevel
 Debug level for the plugin system. More...
 
StringArrayProperty m_createSvcNameList
 
BooleanProperty m_auditTools
 Defaults for auditors. More...
 
BooleanProperty m_auditSvcs
 
BooleanProperty m_auditAlgs
 
std::map< std::string, std::string > m_environment
 Environment variables to set. More...
 
BooleanProperty m_loopCheck
 For ServiceMgr initialization loop checking. More...
 
BooleanProperty m_stopOnSignal
 Property to enable/disable the "stop on signal" service (enabled by default). More...
 
BooleanProperty m_stalledEventMonitoring
 Property to enable/disable the monitoring and reporting of stalled events (enabled by default). More...
 
bool m_propertiesPrint
 flag to activate the printout of properties More...
 
IntegerProperty m_returnCode
 Property to record the error conditions occurring during the running. More...
 
bool m_useHiveAlgorithmManager
 
- Protected Attributes inherited from CommonMessaging< implements4< IAppMgrUI, IEventProcessor, IService, IStateful > >
SmartIF< IMessageSvcm_msgsvc
 Pointer to the message service;. More...
 
std::unique_ptr< MsgStreamm_msgStream
 The predefined message stream. More...
 
bool m_streamWithService
 Flag to create a new MsgStream if it was created without the message service. More...
 

Private Types

typedef CommonMessaging< implements4< IAppMgrUI, IEventProcessor, IService, IStateful > > base_class
 

Private Attributes

std::vector< std::string > m_okDlls
 names of successfully loaded dlls More...
 

Detailed Description

The Application Manager class.

The main purpose of the Application Manager is to steer any data processing application. This includes all data processing applications for LHCb data in all stages: simulation, reconstruction, analysis, high level triggers, etc. Specific implementations of the ApplicationMgr will be developed to cope with the different environments (on-line, off-line, interactive, batch, etc.).

Author
Pere Mato

Definition at line 46 of file ApplicationMgr.h.

Member Typedef Documentation

typedef std::list<std::pair<IService*,int> > ApplicationMgr::ListSvc

Definition at line 55 of file ApplicationMgr.h.

typedef std::map<unsigned long, SmartIF<IComponentManager> > ApplicationMgr::ManagersMap
protected

Typedef for the map of component managers, the key is the "id" field of the basic InterfaceID of the managed components.

Definition at line 182 of file ApplicationMgr.h.

typedef std::vector<std::string> ApplicationMgr::VectorName

Definition at line 56 of file ApplicationMgr.h.

Constructor & Destructor Documentation

ApplicationMgr::ApplicationMgr ( IInterface = nullptr)

Definition at line 53 of file ApplicationMgr.cpp.

54 {
55  // IInterface initialization
56  addRef(); // Initial count set to 1
57 
58  // Instantiate component managers
59  m_managers[IService::interfaceID().id()] = new ServiceManager(this);
60 
61  m_propertyMgr = new PropertyMgr(this);
63 
64  // Instantiate internal services
65  // SvcLocator/Factory HAS to be already instantiated
66  m_classManager = new DLLClassManager(this);
67 
68  AlgorithmManager *algMgr = new AlgorithmManager(this);
69  m_managers[IAlgorithm::interfaceID().id()] = algMgr;
70  // m_managers[IAlgorithm::interfaceID().id()] = new HiveAlgorithmManager(this);
71 
73  m_propertyMgr->declareProperty("Exit", m_SIExit = 0 );
77  m_propertyMgr->declareProperty("ExtSvcCreates", m_extSvcCreates=true );
78 
80  m_propertyMgr->declareProperty("SvcOptMapping", m_svcOptMapping );
81 
84  m_propertyMgr->declareProperty("OutStreamType", m_outStreamType = "OutputStream" );
85  m_propertyMgr->declareProperty("MessageSvcType",m_messageSvcType= "MessageSvc" );
86  m_propertyMgr->declareProperty("JobOptionsSvcType",
87  m_jobOptionsSvcType = "JobOptionsSvc" );
88  m_propertyMgr->declareProperty( s_runable, m_runableType = "AppMgrRunable");
89  m_propertyMgr->declareProperty( s_eventloop, m_eventLoopMgr = "EventLoopMgr");
90 
91  m_propertyMgr->declareProperty("HistogramPersistency", m_histPersName="NONE");
92 
93  // Declare Job Options Service properties and set default
94  m_propertyMgr->declareProperty("JobOptionsType", m_jobOptionsType = "FILE");
95  m_propertyMgr->declareProperty("JobOptionsPath", m_jobOptionsPath = "");
96  m_propertyMgr->declareProperty("JobOptionsPostAction", m_jobOptionsPostAction = "");
97  m_propertyMgr->declareProperty("JobOptionsPreAction", m_jobOptionsPreAction = "");
98  m_propertyMgr->declareProperty("EvtMax", m_evtMax = -1);
101 
103  m_propertyMgr->declareProperty("NoOfThreads", m_noOfEvtThreads = 0);
104  m_propertyMgr->declareProperty("AppName", m_appName = "ApplicationMgr");
105  m_propertyMgr->declareProperty("AppVersion", m_appVersion = "");
106 
107  m_propertyMgr->declareProperty("AuditTools", m_auditTools = false);
108  m_propertyMgr->declareProperty("AuditServices", m_auditSvcs = false);
109  m_propertyMgr->declareProperty("AuditAlgorithms", m_auditAlgs = false);
110 
111  m_propertyMgr->declareProperty("ActivateHistory", m_actHistory = false);
112  m_propertyMgr->declareProperty("StatusCodeCheck", m_codeCheck = false);
113 
115 
116  // ServiceMgr Initialization loop checking
117  m_propertyMgr->declareProperty("InitializationLoopCheck", m_loopCheck = true)
120 
121  // Flag to activate the printout of properties
123  ( "PropertiesPrint",
124  m_propertiesPrint = false,
125  "Flag to activate the printout of properties" );
126 
127  m_propertyMgr->declareProperty("PluginDebugLevel", m_pluginDebugLevel = 0 );
128 
129  m_propertyMgr->declareProperty("StopOnSignal", m_stopOnSignal = false,
130  "Flag to enable/disable the signal handler that schedule a stop of the event loop");
131 
132  m_propertyMgr->declareProperty("StalledEventMonitoring", m_stalledEventMonitoring = false,
133  "Flag to enable/disable the monitoring and reporting of stalled events");
134 
136  "Return code of the application. Set internally in case of error conditions.");
137 
138  m_propertyMgr->declareProperty("AlgTypeAliases", algMgr->typeAliases(),
139  "Aliases of algorithm types, to replace an algorithm type for every instance");
140 
141  // Add action handlers to the appropriate properties
148 
150  { "EvtDataSvc/EventDataSvc",
151  "DetDataSvc/DetectorDataSvc",
152  "HistogramSvc/HistogramDataSvc",
153  "HbookCnv::PersSvc/HbookHistSvc",
154  "RootHistCnv::PersSvc/RootHistSvc",
155  "EvtPersistencySvc/EventPersistencySvc",
156  "DetPersistencySvc/DetectorPersistencySvc",
157  "HistogramPersistencySvc/HistogramPersistencySvc" } );
158 }
The ServiceManager class is in charge of the creation of concrete instances of Services.
The AlgorithmManager class is in charge of the creation of concrete instances of Algorithms.
std::string m_jobOptionsType
Source type (e.g. dbase, file...)
StringArrayProperty m_createSvcNameList
StringArrayProperty m_outStreamNameList
List of output stream names.
StringProperty m_messageSvcType
MessageSvc type.
virtual Property & declareUpdateHandler(std::function< void(Property &)> fun)
set new callback for update
Definition: Property.cpp:72
int m_noOfEvtThreads
no of multiThreadSvc copies
ManagersMap m_managers
Map of known component managers.
std::string m_histPersName
CGL: Name of the Hist Pers Svc.
bool m_codeCheck
Activate StatusCode checking.
std::string m_jobOptionsPreAction
additional command to run on config
StringProperty m_outStreamType
Output stream type (obsolete?)
std::string m_appName
The name of the application.
IntegerProperty m_pluginDebugLevel
Debug level for the plugin system.
std::map< std::string, std::string > m_environment
Environment variables to set.
StringArrayProperty m_dllNameList
List of DDL's names.
AlgTypeAliasesMap & typeAliases()
Property manager helper class.
Definition: PropertyMgr.h:35
std::string m_jobOptionsPostAction
additional command to run on config
SmartIF< ISvcManager > & svcManager()
int m_outputLevel
Message output level.
int m_evtMax
Number of events to be processed.
IntegerProperty m_returnCode
Property to record the error conditions occurring during the running.
std::string m_jobOptionsPath
The "file" to look for properties.
Property * declareProperty(const std::string &name, TYPE &value, const std::string &doc="none")
Declare a property (templated)
Definition: PropertyMgr.h:188
BooleanProperty m_extSvcCreates
LHCb or ATLAS defn of "ExtSvc".
VectorName m_svcMapping
Default mapping of services.
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:47
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!) ...
bool m_actHistory
Activate HistorySvc.
BooleanProperty m_loopCheck
For ServiceMgr initialization loop checking.
StringArrayProperty m_topAlgNameList
List of top level algorithms names.
std::string m_evtsel
Event selection.
StringArrayProperty m_multiThreadSvcNameList
List of external services names for which we want a copy per evt thread.
VectorName m_svcOptMapping
Default mapping of services.
std::string m_runableType
Runable type.
SmartIF< PropertyMgr > m_propertyMgr
Reference to Property Manager.
void initLoopCheckHndlr(Property &)
bool m_propertiesPrint
flag to activate the printout of properties
void SIGoHandler(Property &theProp)
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
StringArrayProperty m_extSvcNameList
List of external services names.
StringProperty m_jobOptionsSvcType
JobOptionsSvc type.
void evtLoopPropertyHandler(Property &theProp)
BooleanProperty m_stalledEventMonitoring
Property to enable/disable the monitoring and reporting of stalled events (enabled by default)...
std::string m_eventLoopMgr
Processing manager type.
void SIExitHandler(Property &theProp)
IntegerProperty m_SIGo
For SI's "Go" command via callback.
BooleanProperty m_auditTools
Defaults for auditors.
BooleanProperty m_auditAlgs
virtual void setLoopCheckEnabled(bool en=true)=0
Set the value of the initialization loop check flag.
constexpr int Success
Definition: AppReturnCode.h:16
void pluginDebugPropertyHandler(Property &theProp)
BooleanProperty m_stopOnSignal
Property to enable/disable the "stop on signal" service (enabled by default).
std::string m_appVersion
The version of the application.
BooleanProperty m_auditSvcs
IntegerProperty m_SIExit
For SI's "Exit" command via callback.
ApplicationMgr::~ApplicationMgr ( )
overridedefault

Member Function Documentation

StatusCode ApplicationMgr::addMultiSvc ( const Gaudi::Utils::TypeNameString typeName,
int  prio 
)
protected

add one or more copies of svc type/name as determined by NoOfThreads

Definition at line 1168 of file ApplicationMgr.cpp.

1169  {
1173  if (0 == m_noOfEvtThreads) {
1174  result = svcManager()->addService(typeName, prio);
1175  // result = svcManager()->addService(name, type, prio); // CHECKME???
1176  if( result.isFailure() ) {
1177  log << MSG::ERROR << "addMultiSvc: Cannot add service "
1178  << typeName.type() << "/" << typeName.name() << endmsg;
1179  } else {
1180  ON_VERBOSE
1181  log << MSG::VERBOSE << "addMultiSvc: added service "
1182  << typeName.type() << "/" << typeName.name() << endmsg;
1183  }
1184  } else {
1185  for(int iCopy=0; iCopy<m_noOfEvtThreads; ++iCopy) {
1186  const std::string &type = typeName.type();
1187  std::string thrName(typeName.name() + getGaudiThreadIDfromID(iCopy));
1188  result = svcManager()->addService(TypeNameString(thrName, type), prio);
1189  if( result.isFailure() ) {
1190  log << MSG::ERROR << "addMultiSvc: Cannot add service "
1191  << type << "/" << thrName << endmsg;
1192  } else {
1193  ON_VERBOSE
1194  log << MSG::VERBOSE << "addMultiSvc: added service "
1195  << type << "/" << thrName << endmsg;
1196  }
1197  }
1198  }
1199  return result;
1200 }
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
int m_noOfEvtThreads
no of multiThreadSvc copies
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
GAUDI_API std::string getGaudiThreadIDfromID(int iCopy)
helper function to extract Gaudi Thread ID from thread copy number
Definition: ThreadGaudi.cpp:16
const std::string & type() const
std::string m_name
Name.
#define ON_VERBOSE
const std::string & name() const
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
string type
Definition: gaudirun.py:151
SmartIF<IAlgManager>& ApplicationMgr::algManager ( )
inline

Definition at line 147 of file ApplicationMgr.h.

147  {
148  // Cache the casted pointer to IAlgManager
149  if (!m_algManager) {
150  m_algManager = getManager<IAlgorithm>();
151  }
152  return m_algManager;
153  }
SmartIF< IAlgManager > m_algManager
Cached pointer to the manager of algorithms.
StatusCode ApplicationMgr::configure ( )
override

Definition at line 311 of file ApplicationMgr.cpp.

311  {
312 
313  // Check if the state is compatible with the transition
314  MsgStream tlog( m_messageSvc, name() );
316  tlog << MSG::INFO << "Already Configured" << endmsg;
317  return StatusCode::SUCCESS;
318  }
320  tlog << MSG::FATAL
321  << "configure: Invalid state \"" << m_state << "\"" << endmsg;
322  return StatusCode::FAILURE;
323  }
325 
326  // Reset application return code.
328 
329  StatusCode sc;
330  sc = i_startup();
331  if ( !sc.isSuccess() ) {
332  return sc;
333  }
334 
336 
337  // Get my own options using the Job options service
338  if (log.level() <= MSG::DEBUG)
339  log << MSG::DEBUG << "Getting my own properties" << endmsg;
341  if( !sc.isSuccess() ) {
342  log << MSG::WARNING << "Problems getting my properties from JobOptionsSvc"
343  << endmsg;
344  return sc;
345  }
346 
347  // Check current outputLevel to eventually inform the MessageSvc
348  if( m_outputLevel != MSG::NIL && !m_appName.empty() ) {
349  assert(m_messageSvc);
351  // Print a welcome message
352  log << MSG::ALWAYS
353  << std::endl
354  << "=================================================================="
355  << "=================================================================="
356  << std::endl
357  << " "
358  << " Welcome to " << m_appName;
359 
360  if( "" != m_appVersion ) {
361  log << MSG::ALWAYS << " version " << m_appVersion;
362  }
363  else {
364  log << MSG::ALWAYS
365  << " (GaudiCoreSvc "
366  << "v" << GAUDICORESVC_MAJOR_VERSION
367  << "r" << GAUDICORESVC_MINOR_VERSION
368 #if GAUDICORESVC_PATCH_VERSION
369  << "p" << GAUDICORESVC_PATCH_VERSION
370 #endif
371  << ")";
372  }
373 
374  // Add the host name and current time to the message
375  log << MSG::ALWAYS
376  << std::endl
377  << " "
378  << " running on " << System::hostName()
379  << " on " << Gaudi::Time::current().format(true) << std::endl
380  << "=================================================================="
381  << "=================================================================="
382  << endmsg;
383  }
384 
385  // print all own properties if the options "PropertiesPrint" is set to true
386  if ( m_propertiesPrint )
387  {
388  const auto& properties = m_propertyMgr->getProperties() ;
389  log << MSG::ALWAYS
390  << "List of ALL properties of "
391  << System::typeinfoName ( typeid( *this ) ) << "/" << this->name()
392  << " #properties = " << properties.size() << endmsg ;
393  for ( const auto& property : properties )
394  { log << "Property ['Name': Value] = " << *property << endmsg ; }
395  }
396 
397  // Check if StatusCode need to be checked
398  if (m_codeCheck) {
400  sc = addMultiSvc("StatusCodeSvc", -9999);
401  if ( sc.isFailure() ) {
402  log << MSG::FATAL << "Error adding StatusCodeSvc for multiple threads" << endmsg;
403  return StatusCode::FAILURE;
404  }
405  } else {
407  }
408 
409  // set the requested environment variables
410  for ( auto& var : m_environment ) {
411  const std::string &name = var.first;
412  const std::string &value = var.second;
413  std::string old = System::getEnv(name.c_str());
414  const MSG::Level lvl = (!old.empty() && (old != "UNKNOWN" ))
415  ? MSG::WARNING
416  : MSG::DEBUG;
417  if (UNLIKELY(m_outputLevel <= lvl))
418  log << lvl << "Setting " << name << " = " << value << endmsg;
419  System::setEnv(name,value);
420  }
421 
422  //Declare Service Types
423  for(auto& j : m_svcMapping) {
425  if ( declareMultiSvcType(itm.name(), itm.type()).isFailure() ) {
426  log << MSG::ERROR << "configure: declaring svc type:'" << j << "' failed." << endmsg;
427  return StatusCode::FAILURE;
428  }
429  }
430  for(auto& j : m_svcOptMapping) {
432  if ( declareMultiSvcType(itm.name(), itm.type()).isFailure() ) {
433  log << MSG::ERROR << "configure: declaring svc type:'" << j << "' failed." << endmsg;
434  return StatusCode::FAILURE;
435  }
436  }
437 
438  //--------------------------------------------------------------------------
439  // Declare other Services and Algorithms by loading DLL's
440  sc = decodeDllNameList( );
441  if ( sc.isFailure( ) ) {
442  log << MSG::ERROR << "Failure loading declared DLL's" << endmsg;
443  return sc;
444  }
445 
446  //--------------------------------------------------------------------------
447  // Deal with the services explicitly declared by the user.
448  sc = decodeExtSvcNameList();
449  if ( sc.isFailure( ) ) {
450  log << MSG::ERROR << "Failure during external service association" << endmsg;
451  return sc;
452  }
453 
455  if ( sc.isFailure( ) ) {
456  log << MSG::ERROR << "Failure during multi thread service creation"
457  << endmsg;
458  return sc;
459  }
460 
462  if ( sc.isFailure( ) ) {
463  log << MSG::ERROR << "Failure during external service creation" << endmsg;
464  return sc;
465  }
466 
467 
468  //--------------------------------------------------------------------------
469  // Retrieve intrinsic services. If needed configure them.
470  //--------------------------------------------------------------------------
472  sc = addMultiSvc(evtloop_item, ServiceManager::DEFAULT_SVC_PRIORITY*10);
473  if( !sc.isSuccess() ) {
474  log << MSG::FATAL << "Error adding :" << m_eventLoopMgr << endmsg;
475  return sc;
476  }
477 
478  if (m_noOfEvtThreads == 0) {
480  if( !m_runable ) {
481  log << MSG::FATAL
482  << "Error retrieving Runable:" << m_runableType
483  << "\n Check option ApplicationMgr." << s_runable << endmsg;
484  return sc;
485  }
486  m_processingMgr = m_svcLocator->service(evtloop_item);
487  if( !m_processingMgr ) {
488  log << MSG::FATAL
489  << "Error retrieving Processing manager:" << m_eventLoopMgr
490  << "\n Check option ApplicationMgr." << s_eventloop
491  << "\n No events will be processed." << endmsg;
492  return sc;
493  }
494  }
495 
496  // Establish Update Handlers for ExtSvc and DLLs Properties
498  this);
500  this);
504  this );
505 
506  if (m_actHistory) {
507  // Create HistorySvc with a priority to ensure it's initialized last, finalized first
508  sc = svcManager()->addService("HistorySvc",std::numeric_limits<int>::max());
509  if ( sc.isFailure() ) {
510  log << MSG::FATAL << "Error adding HistorySvc" << endmsg;
511  return StatusCode::FAILURE;
512  }
513 
514  if (m_noOfEvtThreads > 0) {
515  sc = addMultiSvc("HistorySvc",std::numeric_limits<int>::max());
516  if ( sc.isFailure() ) {
517  log << MSG::FATAL << "Error adding HistorySvc for multiple threads"
518  << endmsg;
519  return StatusCode::FAILURE;
520  }
521  }
522  }
523 
524  log << MSG::INFO << "Application Manager Configured successfully" << endmsg;
526  return StatusCode::SUCCESS;
527 }
void dllNameListHandler(Property &theProp)
Gaudi::StateMachine::State m_targetState
Internal State.
StringArrayProperty m_createSvcNameList
void createSvcNameListHandler(Property &)
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatusCode decodeDllNameList()
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IRunable > m_runable
Reference to the runable object.
tuple itm
Definition: ana.py:57
virtual Property & declareUpdateHandler(std::function< void(Property &)> fun)
set new callback for update
Definition: Property.cpp:72
int m_noOfEvtThreads
no of multiThreadSvc copies
bool m_codeCheck
Activate StatusCode checking.
static Time current(void)
Returns the current time.
Definition: Time.cpp:113
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
std::string m_appName
The name of the application.
static GAUDI_API void enableChecking()
Definition: StatusCode.cpp:19
std::map< std::string, std::string > m_environment
Environment variables to set.
StringArrayProperty m_dllNameList
List of DDL's names.
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
SmartIF< ISvcManager > & svcManager()
GAUDI_API int setEnv(const std::string &name, const std::string &value, int overwrite=1)
Set an environment variables.
Definition: System.cpp:745
int m_outputLevel
Message output level.
StatusCode addMultiSvc(const Gaudi::Utils::TypeNameString &typeName, int prio)
add one or more copies of svc type/name as determined by NoOfThreads
IntegerProperty m_returnCode
Property to record the error conditions occurring during the running.
void multiThreadSvcNameListHandler(Property &theProp)
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
VectorName m_svcMapping
Default mapping of services.
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!) ...
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual StatusCode setMyProperties(const std::string &client, IProperty *me)=0
Override default properties of the calling client.
bool m_actHistory
Activate HistorySvc.
const std::vector< Property * > & getProperties() const override
get all properties
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:617
StringArrayProperty m_multiThreadSvcNameList
List of external services names for which we want a copy per evt thread.
VectorName m_svcOptMapping
Default mapping of services.
std::string m_runableType
Runable type.
StatusCode decodeExtSvcNameList()
SmartIF< PropertyMgr > m_propertyMgr
Reference to Property Manager.
bool m_propertiesPrint
flag to activate the printout of properties
StringArrayProperty m_extSvcNameList
List of external services names.
StatusCode decodeCreateSvcNameList()
GAUDI_API const std::string & hostName()
Host name.
Definition: System.cpp:438
std::string m_eventLoopMgr
Processing manager type.
#define UNLIKELY(x)
Definition: Kernel.h:126
StatusCode i_startup()
Internal startup routine.
static GAUDI_API void disableChecking()
Definition: StatusCode.cpp:23
Gaudi::StateMachine::State m_state
Internal State.
constexpr int Success
Definition: AppReturnCode.h:16
StatusCode decodeMultiThreadSvcNameList()
void extSvcNameListHandler(Property &theProp)
const std::string & name() const override
std::string m_appVersion
The version of the application.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
virtual void setOutputLevel(int new_level)=0
Set new global output level threshold.
std::string format(bool local, std::string spec="%c") const
Format the time using strftime.
Definition: Time.cpp:279
StatusCode declareMultiSvcType(const std::string &name, const std::string &type)
declare one or more copies of svc type/name as determined by NoOfThreads
void ApplicationMgr::createSvcNameListHandler ( Property )

Definition at line 1019 of file ApplicationMgr.cpp.

1019  {
1020  if ( !(decodeCreateSvcNameList()).isSuccess() ) {
1021  throw GaudiException("Failed to create ext services",
1022  "MinimalEventLoopMgr::createSvcNameListHandler",
1024  }
1025 }
Define general base for Gaudi exception.
StatusCode decodeCreateSvcNameList()
StatusCode ApplicationMgr::declareMultiSvcType ( const std::string &  name,
const std::string &  type 
)
protected

declare one or more copies of svc type/name as determined by NoOfThreads

Definition at line 1135 of file ApplicationMgr.cpp.

1136  {
1139  if (0 == m_noOfEvtThreads) {
1140  result = svcManager()->declareSvcType(name, type);
1141  if( result.isFailure() ) {
1142  log << MSG::ERROR << "declareMultiSvcType: Cannot declare service "
1143  << type << "/" << name << endmsg;
1144  } else {
1145  ON_VERBOSE
1146  log << MSG::VERBOSE << "declareMultiSvcType: declared service "
1147  << type << "/" << name << endmsg;
1148  }
1149  } else {
1150  for(int iCopy=0; iCopy<m_noOfEvtThreads; ++iCopy) {
1151  std::string thrName(name + getGaudiThreadIDfromID(iCopy));
1152  result = svcManager()->declareSvcType(thrName, type);
1153  if( result.isFailure() ) {
1154  log << MSG::ERROR << "declareMultiSvcType: Cannot declare service "
1155  << type << "/" << thrName << endmsg;
1156  } else {
1157  ON_VERBOSE
1158  log << MSG::VERBOSE << "declareMultiSvcType: declared service "
1159  << type << "/" << thrName << endmsg;
1160  }
1161  }
1162  }
1163  return result;
1164 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
int m_noOfEvtThreads
no of multiThreadSvc copies
virtual StatusCode declareSvcType(const std::string &svcname, const std::string &svctype)=0
Declare the type of the service to be used when crating a given service name.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
GAUDI_API std::string getGaudiThreadIDfromID(int iCopy)
helper function to extract Gaudi Thread ID from thread copy number
Definition: ThreadGaudi.cpp:16
std::string m_name
Name.
#define ON_VERBOSE
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
string type
Definition: gaudirun.py:151
StatusCode ApplicationMgr::decodeCreateSvcNameList ( )

Definition at line 1029 of file ApplicationMgr.cpp.

1029  {
1031  const auto& theNames = m_createSvcNameList.value( );
1032  auto it = theNames.begin();
1033  auto et = theNames.end();
1034  while(result.isSuccess() && it != et) {
1036  if( (result = svcManager()->addService(item, ServiceManager::DEFAULT_SVC_PRIORITY) ).isFailure()) {
1038  log << MSG::ERROR << "decodeCreateSvcNameList: Cannot create service "
1039  << item.type() << "/" << item.name() << endmsg;
1040  } else {
1041  ON_DEBUG {
1043  log << MSG::DEBUG << "decodeCreateSvcNameList: Created service "
1044  << item.type() << "/" << item.name() << endmsg;
1045  }
1046  }
1047  }
1048  return result;
1049 }
StringArrayProperty m_createSvcNameList
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcManager > & svcManager()
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
#define ON_DEBUG
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
const TYPE & value() const
explicit conversion
Definition: Property.h:341
tuple item
print s1,s2
Definition: ana.py:146
std::string m_name
Name.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::decodeDllNameList ( )

Definition at line 1216 of file ApplicationMgr.cpp.

1216  {
1217 
1220 
1221  // Clean up multiple entries from DLL list
1222  // -------------------------------------------------------------------------
1223  std::vector<std::string> newList;
1224  std::map<std::string,unsigned int> dllInList, duplicateList;
1225  {for ( const auto it : m_dllNameList.value()) {
1226  if ( 0 == dllInList[it] ) {
1227  newList.push_back(it); // first instance of this module
1228  } else { ++duplicateList[it]; } // module listed multiple times
1229  ++dllInList[it]; // increment count for this module
1230  }}
1231  //m_dllNameList = newList; // update primary list to new, filtered list (do not use the
1232  // property itself otherwise we get called again infinitely)
1233  // List modules that were in there twice..
1234  ON_DEBUG if ( !duplicateList.empty() ) {
1235  log << MSG::DEBUG << "Removed duplicate entries for modules : ";
1236  for ( auto it = duplicateList.begin(); it != duplicateList.end(); ++it ) {
1237  log << it->first << "(" << 1+it->second << ")";
1238  if ( it != --duplicateList.end() ) log << ", ";
1239  }
1240  log << endmsg;
1241  }
1242  // -------------------------------------------------------------------------
1243 
1244  const std::vector<std::string>& theNames = newList;
1245 
1246  // only load the new dlls or previously failed dlls
1247  ON_DEBUG log << MSG::DEBUG << "Loading declared DLL's" << endmsg;
1248 
1249  std::vector<std::string> successNames, failNames;
1250  for (const auto& it : theNames) {
1251  if (std::find (m_okDlls.rbegin(), m_okDlls.rend(), it) == m_okDlls.rend()){
1252  // found a new module name
1253  StatusCode status = m_classManager->loadModule( it );
1254  if( status.isFailure() ) {
1255  failNames.push_back(it);
1256  result = StatusCode::FAILURE;
1257  }
1258  else {
1259  successNames.push_back(it);
1260  }
1261  }
1262  }
1263 
1264  // report back to the user and store the names of the succesfully loaded dlls
1265  if ( !successNames.empty() ) {
1266  log << MSG::INFO << "Successfully loaded modules : ";
1267  for (auto it = successNames.begin(); it != successNames.end(); it++) {
1268  log<< (*it);
1269  if( (it+1) != successNames.end()) log << ", ";
1270  // save name
1271  m_okDlls.push_back( *it );
1272  }
1273  log << endmsg;
1274  }
1275 
1276  if ( result == StatusCode::FAILURE ) {
1277  log << MSG::WARNING << "Failed to load modules: ";
1278  for (auto it = failNames.begin(); it != failNames.end(); it++) {
1279  log<< (*it);
1280  if( (it+1) != failNames.end()) log << ", ";
1281  }
1282  log << endmsg;
1283  }
1284  return result;
1285 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode loadModule(const std::string &module, bool fireIncident=true) override
std::vector< std::string > m_okDlls
names of successfully loaded dlls
StringArrayProperty m_dllNameList
List of DDL's names.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
#define ON_DEBUG
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
const TYPE & value() const
explicit conversion
Definition: Property.h:341
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
std::string m_name
Name.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::decodeExtSvcNameList ( )

Definition at line 1065 of file ApplicationMgr.cpp.

1065  {
1067 
1068  const auto& theNames = m_extSvcNameList.value( );
1069 
1070  auto it = theNames.begin();
1071  auto et = theNames.end();
1072  while(result.isSuccess() && it != et) {
1074  if (m_extSvcCreates) {
1075  if ( (result = svcManager()->addService(item, ServiceManager::DEFAULT_SVC_PRIORITY)).isFailure()) {
1077  log << MSG::ERROR << "decodeExtSvcNameList: Cannot create service "
1078  << item.type() << "/" << item.name() << endmsg;
1079  }
1080  } else {
1081  if( ( result = svcManager()->declareSvcType(item.name(),
1082  item.type()) ).isFailure()) {
1084  log << MSG::ERROR << "decodeExtSvcNameList: Cannot declare service "
1085  << item.type() << "/" << item.name() << endmsg;
1086  }
1087  }
1088  }
1089  return result;
1090 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcManager > & svcManager()
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
BooleanProperty m_extSvcCreates
LHCb or ATLAS defn of "ExtSvc".
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
const TYPE & value() const
explicit conversion
Definition: Property.h:341
StringArrayProperty m_extSvcNameList
List of external services names.
tuple item
print s1,s2
Definition: ana.py:146
std::string m_name
Name.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::decodeMultiThreadSvcNameList ( )

Definition at line 1107 of file ApplicationMgr.cpp.

1107  {
1109  const auto& theNames = m_multiThreadSvcNameList.value( );
1110  for(int iCopy=0; iCopy<m_noOfEvtThreads; ++iCopy) {
1111  for (const auto& it : theNames ) {
1113  result = addMultiSvc(item, ServiceManager::DEFAULT_SVC_PRIORITY);
1114  //FIXME SHOULD CLONE?
1115  if( result.isFailure() ) {
1117  log << MSG::ERROR
1118  << "decodeMultiThreadSvcNameList: Cannot create service "
1119  << item.type() << "/" << item.name() << endmsg;
1120  } else {
1121  ON_VERBOSE {
1123  log << MSG::VERBOSE
1124  << "decodeMultiThreadSvcNameList: created service "
1125  << item.type() << "/" << item.name() << endmsg;
1126  }
1127  }
1128  }
1129  }
1130  return result;
1131 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
int m_noOfEvtThreads
no of multiThreadSvc copies
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
StatusCode addMultiSvc(const Gaudi::Utils::TypeNameString &typeName, int prio)
add one or more copies of svc type/name as determined by NoOfThreads
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
const TYPE & value() const
explicit conversion
Definition: Property.h:341
StringArrayProperty m_multiThreadSvcNameList
List of external services names for which we want a copy per evt thread.
tuple item
print s1,s2
Definition: ana.py:146
std::string m_name
Name.
#define ON_VERBOSE
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
void ApplicationMgr::dllNameListHandler ( Property theProp)

Definition at line 1205 of file ApplicationMgr.cpp.

1205  {
1206  if ( !(decodeDllNameList( )).isSuccess() ) {
1207  throw GaudiException("Failed to load DLLs.",
1208  "MinimalEventLoopMgr::dllNameListHandler",
1210  }
1211 }
Define general base for Gaudi exception.
StatusCode decodeDllNameList()
void ApplicationMgr::evtLoopPropertyHandler ( Property theProp)

Definition at line 1009 of file ApplicationMgr.cpp.

1009  {
1010  if ( m_processingMgr ) {
1011  auto props = m_processingMgr.as<IProperty>();
1012  if ( props ) props->setProperty( p ).ignore();
1013  }
1014 }
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:110
virtual StatusCode setProperty(const Property &p)=0
Set the property by property.
void ignore() const
Definition: StatusCode.h:108
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:21
StatusCode ApplicationMgr::executeEvent ( void *  par)
override

implementation of IEventProcessor::executeEvent(void*)

Definition at line 883 of file ApplicationMgr.cpp.

883  {
886  if ( m_processingMgr ) {
888  }
889  }
890  log << MSG::FATAL << "executeEvent: Invalid state \"" << FSMState() << "\""
891  <<endmsg;
892  return StatusCode::FAILURE;
893 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
virtual StatusCode executeEvent(void *par=0)=0
Process single event.
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::executeRun ( int  evtmax)
override

implementation of IEventProcessor::executeRun(int)

Definition at line 898 of file ApplicationMgr.cpp.

898  {
901  if ( m_processingMgr ) {
902  return m_processingMgr->executeRun(evtmax);
903  }
904  log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
905  return StatusCode::SUCCESS;
906  }
907  log << MSG::FATAL << "executeRun: Invalid state \"" << FSMState() << "\""
908  << endmsg;
909  return StatusCode::FAILURE;
910 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
virtual StatusCode executeRun(int maxevt)=0
Process the maxevt events as a Run (beginRun() and endRun() called)
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
void ApplicationMgr::extSvcNameListHandler ( Property theProp)

Definition at line 1054 of file ApplicationMgr.cpp.

1054  {
1055  if ( !(decodeExtSvcNameList( )).isSuccess() ) {
1056  throw GaudiException("Failed to declare ext services",
1057  "MinimalEventLoopMgr::extSvcNameListHandler",
1059  }
1060 }
Define general base for Gaudi exception.
StatusCode decodeExtSvcNameList()
StatusCode ApplicationMgr::finalize ( )
override

Definition at line 677 of file ApplicationMgr.cpp.

677  {
680  log << MSG::INFO << "Already Finalized" << endmsg;
681  return StatusCode::SUCCESS;
682  }
684  log << MSG::FATAL << "finalize: Invalid state \"" << m_state << "\""
685  << endmsg;
686  return StatusCode::FAILURE;
687  }
689 
690  // disable message suppression in finalize
691  m_svcLocator->service<IProperty>("MessageSvc")->setProperty(BooleanProperty("enableSuppression", false)).ignore();
692 
693  // Finalize independently managed Algorithms
695  if (sc.isFailure()) {
696  log << MSG::WARNING << "Failed to finalize an algorithm." << endmsg;
698  }
699 
700  // Finalize all Services
701  sc = svcManager()->finalize();
702  if (sc.isFailure()) {
703  log << MSG::WARNING << "Failed to finalize a service." << endmsg;
705  }
706 
707  //svcManager()->removeService( (IService*) m_processingMgr.get() );
708  //svcManager()->removeService( (IService*) m_runable.get() );
709 
710  if (m_codeCheck) {
712  }
713 
714  if (sc.isSuccess()) {
715  log << MSG::INFO << "Application Manager Finalized successfully" << endmsg;
716  } else {
717  log << MSG::ERROR << "Application Manager failed to finalize" << endmsg;
718  }
719 
721  return sc;
722 }
Gaudi::StateMachine::State m_targetState
Internal State.
SimpleProperty< bool > BooleanProperty
Definition: Property.h:702
constexpr int FinalizationFailure
Error codes for operation failures.
Definition: AppReturnCode.h:32
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool m_codeCheck
Activate StatusCode checking.
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
IntegerProperty m_returnCode
Property to record the error conditions occurring during the running.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!) ...
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
bool PyHelper() setProperty(IInterface *p, char *name, char *value)
Definition: Bootstrap.cpp:254
virtual StatusCode finalize()=0
Finalize (from INITIALIZED to CONFIGURED).
static GAUDI_API void disableChecking()
Definition: StatusCode.cpp:23
Gaudi::StateMachine::State m_state
Internal State.
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:21
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
Gaudi::StateMachine::State ApplicationMgr::FSMState ( ) const
override

Definition at line 934 of file ApplicationMgr.cpp.

934  {
935  return m_state;
936 }
Gaudi::StateMachine::State m_state
Internal State.
template<class I >
SmartIF<IComponentManager>& ApplicationMgr::getManager ( )
inline

Definition at line 135 of file ApplicationMgr.h.

135  {
136  return m_managers[I::interfaceID().id()];
137  }
ManagersMap m_managers
Map of known component managers.
StatusCode ApplicationMgr::GoToState ( Gaudi::StateMachine::State  state,
bool  ignoreFailures = false 
)
protected

Reach a state from current state (whichever it is) going through the correct transitions.

By default, if a transition fails, the chain is interrupted, but the behavior can be changed with the parameter "gnoreFailures"

Definition at line 786 of file ApplicationMgr.cpp.

786  {
788 
789  switch (state) {
790 
792  switch (m_state) {
794  case Gaudi::StateMachine::CONFIGURED : return terminate(); break;
795  default: // Gaudi::StateMachine::INITIALIZED or Gaudi::StateMachine::RUNNING
797  if (sc.isSuccess()) {
798  return terminate();
799  } break;
800  } break;
801 
803  switch (m_state) {
805  case Gaudi::StateMachine::OFFLINE : return configure(); break;
806  case Gaudi::StateMachine::INITIALIZED : return finalize(); break;
807  default: // Gaudi::StateMachine::RUNNING
809  if (sc.isSuccess()) {
810  return finalize();
811  } break;
812  } break;
813 
815  switch (m_state) {
817  case Gaudi::StateMachine::CONFIGURED : return initialize(); break;
818  case Gaudi::StateMachine::RUNNING : return stop(); break;
819  default: // Gaudi::StateMachine::OFFLINE
821  if (sc.isSuccess()) {
822  return initialize();
823  } break;
824  } break;
825 
827  switch (m_state) {
829  case Gaudi::StateMachine::INITIALIZED : return start(); break;
830  default: // Gaudi::StateMachine::OFFLINE or Gaudi::StateMachine::CONFIGURED
832  if (sc.isSuccess()) {
833  return start();
834  } break;
835  } break;
836 
837  }
838 
839  // If I get here, there has been a problem in the recursion
840 
841  if (ignoreFailures){
842  // force the new state
843  m_state = state;
844  return StatusCode::SUCCESS;
845  }
846 
847  return sc;
848 }
StatusCode initialize() override
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
StatusCode terminate() override
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
StatusCode finalize() override
StatusCode start() override
StatusCode configure() override
StatusCode stop() override
Gaudi::StateMachine::State m_state
Internal State.
StatusCode ApplicationMgr::i_startup ( )
protected

Internal startup routine.

Definition at line 200 of file ApplicationMgr.cpp.

200  {
201 
202  StatusCode sc;
203 
204  // declare factories in current module
206 
207  // Create the Message service
209  if( !msgsvc ) {
210  fatal() << "Error creating MessageSvc of type " << m_messageSvcType << endmsg;
211  return sc;
212  }
213  // Create the Job Options service
214  auto jobsvc = svcManager()->createService(Gaudi::Utils::TypeNameString("JobOptionsSvc", m_jobOptionsSvcType));
215  if( !jobsvc ) {
216  fatal() << "Error creating JobOptionsSvc" << endmsg;
217  return sc;
218  }
219 
220  auto jobOptsIProp = jobsvc.as<IProperty>();
221  if ( !jobOptsIProp ) {
222  fatal() << "Error locating JobOptionsSvc" << endmsg;
223  return sc;
224  }
225  sc = jobOptsIProp->setProperty( StringProperty("TYPE", m_jobOptionsType) );
226  if( !sc.isSuccess() ) {
227  fatal() << "Error setting TYPE option in JobOptionsSvc" << endmsg;
228  return sc;
229  }
230 
231  if ( m_jobOptionsPreAction != "") {
232  sc = jobOptsIProp->setProperty( StringProperty("PYTHONPARAMS", m_jobOptionsPreAction) );
233  if( !sc.isSuccess() ) {
234  fatal() << "Error setting JobOptionsPreAction option in JobOptionsSvc" << endmsg;
235  return sc;
236  }
237  }
238 
239  if ( m_jobOptionsPostAction != "") {
240  sc = jobOptsIProp->setProperty( StringProperty("PYTHONACTION", m_jobOptionsPostAction) );
241  if( !sc.isSuccess() ) {
242  fatal() << "Error setting JobOptionsPostAction option in JobOptionsSvc" << endmsg;
243  return sc;
244  }
245  }
246 
247  if ( !m_jobOptionsPath.empty() ) { // The command line takes precedence
248  sc = jobOptsIProp->setProperty( StringProperty("PATH", m_jobOptionsPath) );
249  if( !sc.isSuccess() ) {
250  fatal() << "Error setting PATH option in JobOptionsSvc" << endmsg;
251  return sc;
252  }
253  }
254  else if ( isEnvSet("JOBOPTPATH") ) {// Otherwise the Environment JOBOPTPATH
255  sc = jobOptsIProp->setProperty (StringProperty("PATH",
256  getEnv("JOBOPTPATH")));
257  if( !sc.isSuccess() ) {
258  fatal()
259  << "Error setting PATH option in JobOptionsSvc from env"
260  << endmsg;
261  return sc;
262  }
263  }
264  else { // Otherwise the default
265  sc = jobOptsIProp->setProperty (StringProperty("PATH",
266  "../options/job.opts"));
267  if( !sc.isSuccess() ) {
268  fatal()
269  << "Error setting PATH option in JobOptionsSvc to default"
270  << endmsg;
271  return sc;
272  }
273  }
274  jobOptsIProp.reset();
275 
276  // Sets my default the Output Level of the Message service to be
277  // the same as this
278  auto msgSvcIProp = msgsvc.as<IProperty>();
279  msgSvcIProp->setProperty( IntegerProperty("OutputLevel", m_outputLevel)).ignore();
280  msgSvcIProp.reset();
281 
282  sc = jobsvc->sysInitialize();
283  if( !sc.isSuccess() ) {
284  fatal() << "Error initializing JobOptionsSvc" << endmsg;
285  return sc;
286  }
287  sc = msgsvc->sysInitialize();
288  if( !sc.isSuccess() ) {
289  fatal() << "Error initializing MessageSvc" << endmsg;
290  return sc;
291  }
292 
293  // Get the useful interface from Message and JobOptions services
294  m_messageSvc = m_svcLocator->service("MessageSvc");
295  if( !m_messageSvc ) {
296  fatal() << "Error retrieving MessageSvc." << endmsg;
297  return sc;
298  }
299  m_jobOptionsSvc = m_svcLocator->service("JobOptionsSvc");
300  if( !m_jobOptionsSvc ) {
301  fatal() << "Error retrieving JobOptionsSvc." << endmsg;
302  return sc;
303  }
304 
305  return sc;
306 }
std::string m_jobOptionsType
Source type (e.g. dbase, file...)
StringProperty m_messageSvcType
MessageSvc type.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode loadModule(const std::string &module, bool fireIncident=true) override
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
std::string m_jobOptionsPreAction
additional command to run on config
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
std::string m_jobOptionsPostAction
additional command to run on config
SmartIF< ISvcManager > & svcManager()
int m_outputLevel
Message output level.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
SimpleProperty< std::string > StringProperty
Definition: Property.h:718
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
std::string m_jobOptionsPath
The "file" to look for properties.
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!) ...
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual SmartIF< IService > & createService(const Gaudi::Utils::TypeNameString &nametype)=0
Creates and instance of a service type that has been declared beforehand and assigns it a name...
SimpleProperty< int > IntegerProperty
Definition: Property.h:708
virtual StatusCode setProperty(const Property &p)=0
Set the property by property.
GAUDI_API bool isEnvSet(const char *var)
Check if an environment variable is set or not.
Definition: System.cpp:637
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:617
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
StringProperty m_jobOptionsSvcType
JobOptionsSvc type.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
void ignore() const
Definition: StatusCode.h:108
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:21
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::initialize ( )
override

Definition at line 532 of file ApplicationMgr.cpp.

532  {
533 
535  StatusCode sc;
536 
537  // I cannot add these services in configure() because they are coming from GaudiUtils
538  // and it messes up genconf when rebuilding it.
539  if (m_stopOnSignal) {
540  // Instantiate the service that schedules a stop when a signal is received
541  std::string svcname("Gaudi::Utils::StopSignalHandler");
542  sc = svcManager()->addService(svcname);
543  if ( sc.isFailure() ) {
544  log << MSG::INFO << "Cannot instantiate " << svcname << "signals will be ignored" << endmsg;
545  }
546  }
547 
549  // Instantiate the service that schedules a stop when a signal is received
550  std::string svcname("StalledEventMonitor");
551  sc = svcManager()->addService(svcname);
552  if ( sc.isFailure() ) {
553  log << MSG::INFO << "Cannot instantiate " << svcname << "signals will be ignored" << endmsg;
554  }
555  }
556 
558  log << MSG::INFO << "Already Initialized!" << endmsg;
559  return StatusCode::SUCCESS;
560  }
562  log << MSG::FATAL
563  << "initialize: Invalid state \"" << m_state << "\"" << endmsg;
564  return StatusCode::FAILURE;
565  }
567 
568  //--------------------------------------------------------------------------
569  // Initialize the list of top Services
570  //--------------------------------------------------------------------------
571  sc = svcManager()->initialize();
572  if( !sc.isSuccess() ) return sc;
573 
574  //--------------------------------------------------------------------------
575  // Final steps: Inform user and change internal state
576  //--------------------------------------------------------------------------
577  log << MSG::INFO << "Application Manager Initialized successfully" << endmsg;
579 
580  return sc;
581 }
Gaudi::StateMachine::State m_targetState
Internal State.
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual StatusCode initialize()=0
Initialization (from CONFIGURED to INITIALIZED).
BooleanProperty m_stalledEventMonitoring
Property to enable/disable the monitoring and reporting of stalled events (enabled by default)...
Gaudi::StateMachine::State m_state
Internal State.
BooleanProperty m_stopOnSignal
Property to enable/disable the "stop on signal" service (enabled by default).
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
void ApplicationMgr::initLoopCheckHndlr ( Property )

Definition at line 1304 of file ApplicationMgr.cpp.

1304  {
1306 }
SmartIF< ISvcManager > & svcManager()
BooleanProperty m_loopCheck
For ServiceMgr initialization loop checking.
virtual void setLoopCheckEnabled(bool en=true)=0
Set the value of the initialization loop check flag.
void ApplicationMgr::multiThreadSvcNameListHandler ( Property theProp)

Definition at line 1095 of file ApplicationMgr.cpp.

1095  {
1096  if ( !(decodeMultiThreadSvcNameList( )).isSuccess() ) {
1097  throw GaudiException("Failed to create copies of mt services",
1098  "MinimalEventLoopMgr::multiThreadSvcNameListHandler",
1100  }
1101 
1102 }
Define general base for Gaudi exception.
StatusCode decodeMultiThreadSvcNameList()
const std::string & ApplicationMgr::name ( ) const
override

Definition at line 929 of file ApplicationMgr.cpp.

929  {
930  return m_name;
931 }
std::string m_name
Name.
StatusCode ApplicationMgr::nextEvent ( int  maxevt)
override

Definition at line 620 of file ApplicationMgr.cpp.

620  {
623  log << MSG::FATAL << "nextEvent: Invalid state \"" << m_state << "\""
624  << endmsg;
625  return StatusCode::FAILURE;
626  }
627  if (!m_processingMgr) {
629  log << MSG::FATAL << "No event processing manager specified. Check option:"
630  << s_eventloop << endmsg;
631  return StatusCode::FAILURE;
632  }
633  return m_processingMgr->nextEvent(maxevt);
634 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
virtual StatusCode nextEvent(int maxevt)=0
Process the next maxevt events.
Gaudi::StateMachine::State m_state
Internal State.
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
void ApplicationMgr::pluginDebugPropertyHandler ( Property theProp)

Definition at line 1290 of file ApplicationMgr.cpp.

1291 {
1292  // Setup debug level for the plugin system
1294  log << MSG::INFO
1295  << "Updating Gaudi::PluginService::SetDebug(level) to level="
1297  << endmsg;
1299 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IntegerProperty m_pluginDebugLevel
Debug level for the plugin system.
GAUDIPS_API void SetDebug(int debugLevel)
Backward compatibility with Reflex.
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::queryInterface ( const InterfaceID iid,
void **  pinterface 
)
override

Definition at line 165 of file ApplicationMgr.cpp.

167 {
168  if ( !ppvi ) { return StatusCode::FAILURE ; }
169 
170  // try to find own/direct interfaces:
171  StatusCode sc = base_class::queryInterface(iid,ppvi);
172  if (sc.isSuccess()) return sc;
173 
174  // find indirect interfaces :
175  if ( ISvcLocator ::interfaceID() . versionMatch ( iid ) )
176  { return serviceLocator()-> queryInterface ( iid , ppvi ) ; }
177  if ( ISvcManager ::interfaceID() . versionMatch ( iid ) )
178  { return svcManager() -> queryInterface ( iid , ppvi ) ; }
179  if ( IAlgManager ::interfaceID() . versionMatch ( iid ) )
180  { return algManager() -> queryInterface ( iid , ppvi ) ; }
181  if ( IClassManager ::interfaceID() . versionMatch ( iid ) )
182  { return m_classManager -> queryInterface ( iid , ppvi ) ; }
183  if ( IProperty ::interfaceID() . versionMatch ( iid ) )
184  { return m_propertyMgr -> queryInterface ( iid , ppvi ) ; }
185  if ( IMessageSvc ::interfaceID() . versionMatch ( iid ) )
186  {
187  *ppvi = reinterpret_cast<void*>(m_messageSvc.get());
189  // Note that 0 can be a valid IMessageSvc pointer value (when used for
190  // MsgStream).
191  return StatusCode::SUCCESS;
192  }
193  *ppvi = nullptr;
194  return StatusCode::FAILURE;
195 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcManager > & svcManager()
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
SmartIF< ISvcLocator > & serviceLocator() const override
Needed to locate the message service.
StatusCode queryInterface(const InterfaceID &iid, void **pinterface) override
SmartIF< PropertyMgr > m_propertyMgr
Reference to Property Manager.
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
SmartIF< IAlgManager > & algManager()
static const InterfaceID & interfaceID()
Return an instance of InterfaceID identifying the interface.
Definition: IInterface.h:243
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::reinitialize ( )
override

Definition at line 946 of file ApplicationMgr.cpp.

946  {
948  StatusCode sc;
950  throw GaudiException("Cannot reinitialize application if not INITIALIZED or RUNNING",
951  "ApplicationMgr::reinitialize", StatusCode::FAILURE);
952  }
955  }
956  sc = svcManager()->reinitialize();
957  if (sc.isFailure()) retval = sc;
958  sc = algManager()->reinitialize();
959  if (sc.isFailure()) retval = sc;
960  return retval;
961 }
Define general base for Gaudi exception.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
virtual StatusCode reinitialize()=0
Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
Gaudi::StateMachine::State m_state
Internal State.
SmartIF< IAlgManager > & algManager()
StatusCode ApplicationMgr::restart ( )
override

Definition at line 966 of file ApplicationMgr.cpp.

966  {
968  StatusCode sc;
970  throw GaudiException("Cannot restart application if not RUNNING",
971  "ApplicationMgr::restart", StatusCode::FAILURE);
972  }
973  sc = svcManager()->restart();
974  if (sc.isFailure()) retval = sc;
975  sc = algManager()->restart();
976  if (sc.isFailure()) retval = sc;
977  return retval;
978 }
Define general base for Gaudi exception.
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
SmartIF< ISvcManager > & svcManager()
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual StatusCode restart()=0
Initialization (from RUNNING to RUNNING, via INITIALIZED).
Gaudi::StateMachine::State m_state
Internal State.
SmartIF< IAlgManager > & algManager()
StatusCode ApplicationMgr::run ( )
override

Definition at line 853 of file ApplicationMgr.cpp.

853  {
855 
857  if ( sc.isSuccess() ) {
859  if ( m_runable != 0 ) { // loop over the events
860  sc = m_runable->run();
861  if ( !sc.isSuccess() ) {
862  log << MSG::FATAL << "Application execution failed. Ending the job."
863  << endmsg;
864  }
865  } else {
866  log << MSG::FATAL << "Application has no runable object. Check option:"
867  << s_runable << endmsg;
868  }
869  }
870  if (sc.isSuccess()) { // try to close cleanly
872  }
873  // either the runable failed of the stut-down
874  if (sc.isFailure()) { // try to close anyway (but keep the StatusCode unchanged)
876  }
877  return sc;
878 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual StatusCode run()=0
Run the class implementation.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IRunable > m_runable
Reference to the runable object.
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
void ignore() const
Definition: StatusCode.h:108
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
SmartIF<ISvcLocator>& ApplicationMgr::serviceLocator ( ) const
inlineoverride

Needed to locate the message service.

Definition at line 156 of file ApplicationMgr.h.

156  {
157  return m_svcLocator;
158  }
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!) ...
void ApplicationMgr::setServiceManager ( ISvcManager )
inlineoverrideprotected

Definition at line 169 of file ApplicationMgr.h.

169 {}
void ApplicationMgr::SIExitHandler ( Property theProp)

Definition at line 999 of file ApplicationMgr.cpp.

999  {
1000  StatusCode status;
1001  status = finalize();
1002  status = terminate();
1003  ::exit( 0 );
1004 }
StatusCode terminate() override
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode finalize() override
void ApplicationMgr::SIGoHandler ( Property theProp)

Definition at line 983 of file ApplicationMgr.cpp.

983  {
984 
986  StatusCode sc;
987 
988  // Re-initialize everything
989  sc = reinitialize();
990  // Execute a number of events
992 
993  return;
994 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
int m_evtMax
Number of events to be processed.
StatusCode executeRun(int evtmax) override
implementation of IEventProcessor::executeRun(int)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode reinitialize() override
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::start ( )
override

Definition at line 586 of file ApplicationMgr.cpp.

586  {
587 
589  StatusCode sc;
590 
592  log << MSG::INFO << "Already Initialized!" << endmsg;
593  return StatusCode::SUCCESS;
594  }
596  log << MSG::FATAL
597  << "start: Invalid state \"" << m_state << "\"" << endmsg;
598  return StatusCode::FAILURE;
599  }
601 
602  //--------------------------------------------------------------------------
603  // Initialize the list of top Services
604  //--------------------------------------------------------------------------
605  sc = svcManager()->start();
606  if( !sc.isSuccess() ) return sc;
607 
608  //--------------------------------------------------------------------------
609  // Final steps: Inform user and change internal state
610  //--------------------------------------------------------------------------
611  log << MSG::INFO << "Application Manager Started successfully" << endmsg;
613 
614  return sc;
615 }
Gaudi::StateMachine::State m_targetState
Internal State.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcManager > & svcManager()
virtual StatusCode start()=0
Start (from INITIALIZED to RUNNING).
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::StateMachine::State m_state
Internal State.
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::stop ( )
override

Definition at line 639 of file ApplicationMgr.cpp.

639  {
640 
642  StatusCode sc;
643 
645  log << MSG::INFO << "Already Initialized!" << endmsg;
646  return StatusCode::SUCCESS;
647  }
649  log << MSG::FATAL
650  << "stop: Invalid state \"" << m_state << "\"" << endmsg;
651  return StatusCode::FAILURE;
652  }
654 
655  // Stop independently managed Algorithms
656  sc = algManager()->stop();
657  if( !sc.isSuccess() ) return sc;
658 
659  //--------------------------------------------------------------------------
660  // Stop the list of top Services
661  //--------------------------------------------------------------------------
662  sc = svcManager()->stop();
663  if( !sc.isSuccess() ) return sc;
664 
665  //--------------------------------------------------------------------------
666  // Final steps: Inform user and change internal state
667  //--------------------------------------------------------------------------
668  log << MSG::INFO << "Application Manager Stopped successfully" << endmsg;
670 
671  return sc;
672 }
Gaudi::StateMachine::State m_targetState
Internal State.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
SmartIF< ISvcManager > & svcManager()
virtual StatusCode stop()=0
Stop (from RUNNING to INITIALIZED).
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Gaudi::StateMachine::State m_state
Internal State.
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
StatusCode ApplicationMgr::stopRun ( )
override

implementation of IEventProcessor::stopRun()

Definition at line 915 of file ApplicationMgr.cpp.

915  {
918  if ( m_processingMgr ) {
919  return m_processingMgr->stopRun();
920  }
921  log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
922  return StatusCode::SUCCESS;
923  }
924  log << MSG::FATAL << "stopRun: Invalid state \"" << FSMState() << "\""
925  << endmsg;
926  return StatusCode::FAILURE;
927 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual StatusCode stopRun()=0
Schedule a stop of the current event processing.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
SmartIF<ISvcManager>& ApplicationMgr::svcManager ( )
inline

Definition at line 139 of file ApplicationMgr.h.

139  {
140  // Cache the casted pointer to ISvcManager
141  if (!m_svcManager) {
142  m_svcManager = getManager<IService>();
143  }
144  return m_svcManager;
145  }
SmartIF< ISvcManager > m_svcManager
Cached pointer to the manager of services.
StatusCode ApplicationMgr::sysFinalize ( )
inlineoverride

Definition at line 108 of file ApplicationMgr.h.

StatusCode ApplicationMgr::sysInitialize ( )
inlineoverride

Definition at line 102 of file ApplicationMgr.h.

StatusCode ApplicationMgr::sysReinitialize ( )
inlineoverride

Definition at line 110 of file ApplicationMgr.h.

StatusCode ApplicationMgr::sysRestart ( )
inlineoverride

Definition at line 112 of file ApplicationMgr.h.

StatusCode ApplicationMgr::sysStart ( )
inlineoverride

Definition at line 104 of file ApplicationMgr.h.

StatusCode ApplicationMgr::sysStop ( )
inlineoverride

Definition at line 106 of file ApplicationMgr.h.

Gaudi::StateMachine::State ApplicationMgr::targetFSMState ( ) const
override

Definition at line 938 of file ApplicationMgr.cpp.

938  {
939  return m_targetState;
940 }
Gaudi::StateMachine::State m_targetState
Internal State.
StatusCode ApplicationMgr::terminate ( )
override

Definition at line 727 of file ApplicationMgr.cpp.

727  {
729 
731  log << MSG::INFO << "Already Offline" << endmsg;
732  return StatusCode::SUCCESS;
733  }
735  log << MSG::FATAL << "terminate: Invalid state \"" << m_state << "\""
736  << endmsg;
737  return StatusCode::FAILURE;
738  }
739  // release all Services
741 
743  log << MSG::INFO << "Application Manager Terminated successfully" << endmsg;
745  log << MSG::INFO << "Application Manager Terminated successfully with a user requested ScheduledStop" << endmsg;
746  } else {
747  log << MSG::ERROR << "Application Manager Terminated with error code " << m_returnCode.value() << endmsg;
748  }
749 
750  { // Force a disable the auditing of finalize for MessageSvc
751  auto prop = m_messageSvc.as<IProperty>();
752  if (prop) {
753  prop->setProperty(BooleanProperty("AuditFinalize", false)).ignore();
754  }
755  }
756  { // Force a disable the auditing of finalize for JobOptionsSvc
757  auto prop = m_jobOptionsSvc.as<IProperty>();
758  if (prop) {
759  prop->setProperty(BooleanProperty("AuditFinalize", false)).ignore();
760  }
761  }
762 
763  // finalize MessageSvc
764  auto svc = m_messageSvc.as<IService>();
765  if ( !svc ) {
766  log << MSG::ERROR << "Could not get the IService interface of the MessageSvc" << endmsg;
767  } else {
768  svc->sysFinalize().ignore();
769  }
770 
771  // finalize JobOptionsSvc
772  svc = m_jobOptionsSvc.as<IService>();
773  if ( !svc ) {
774  log << MSG::ERROR << "Could not get the IService interface of the JobOptionsSvc" << endmsg;
775  } else {
776  svc->sysFinalize().ignore();
777  }
778 
780  return StatusCode::SUCCESS;
781 }
Gaudi::StateMachine::State m_targetState
Internal State.
SimpleProperty< bool > BooleanProperty
Definition: Property.h:702
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
constexpr int ScheduledStop
Definition: AppReturnCode.h:25
IntegerProperty m_returnCode
Property to record the error conditions occurring during the running.
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:110
General service interface definition.
Definition: IService.h:18
virtual StatusCode setProperty(const Property &p)=0
Set the property by property.
const TYPE & value() const
explicit conversion
Definition: Property.h:341
Gaudi::StateMachine::State m_state
Internal State.
void ignore() const
Definition: StatusCode.h:108
constexpr int Success
Definition: AppReturnCode.h:16
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:21
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.

Member Data Documentation

bool ApplicationMgr::m_actHistory
protected

Activate HistorySvc.

Definition at line 247 of file ApplicationMgr.h.

SmartIF<IAlgManager> ApplicationMgr::m_algManager
protected

Cached pointer to the manager of algorithms.

Definition at line 194 of file ApplicationMgr.h.

std::string ApplicationMgr::m_appName
protected

The name of the application.

Definition at line 245 of file ApplicationMgr.h.

std::string ApplicationMgr::m_appVersion
protected

The version of the application.

Definition at line 246 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_auditAlgs
protected

Definition at line 256 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_auditSvcs
protected

Definition at line 255 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_auditTools
protected

Defaults for auditors.

Definition at line 254 of file ApplicationMgr.h.

SmartIF<DLLClassManager> ApplicationMgr::m_classManager
protected

Reference to the class manager.

Definition at line 199 of file ApplicationMgr.h.

bool ApplicationMgr::m_codeCheck
protected

Activate StatusCode checking.

Definition at line 248 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_createSvcNameList
protected

Definition at line 251 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_declaredManagers
protected

Property to declare the list of known managers.

Definition at line 188 of file ApplicationMgr.h.

VectorName ApplicationMgr::m_defServices
protected

Vector default services names.

Definition at line 214 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_dllNameList
protected

List of DDL's names.

Definition at line 235 of file ApplicationMgr.h.

std::map<std::string,std::string> ApplicationMgr::m_environment
protected

Environment variables to set.

Definition at line 258 of file ApplicationMgr.h.

std::string ApplicationMgr::m_eventLoopMgr
protected

Processing manager type.

Definition at line 241 of file ApplicationMgr.h.

int ApplicationMgr::m_evtMax
protected

Number of events to be processed.

Definition at line 227 of file ApplicationMgr.h.

std::string ApplicationMgr::m_evtsel
protected

Event selection.

Definition at line 242 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_extSvcCreates
protected

LHCb or ATLAS defn of "ExtSvc".

Definition at line 229 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_extSvcNameList
protected

List of external services names.

Definition at line 228 of file ApplicationMgr.h.

std::string ApplicationMgr::m_histPersName
protected

CGL: Name of the Hist Pers Svc.

Definition at line 243 of file ApplicationMgr.h.

std::string ApplicationMgr::m_jobOptionsPath
protected

The "file" to look for properties.

Definition at line 237 of file ApplicationMgr.h.

std::string ApplicationMgr::m_jobOptionsPostAction
protected

additional command to run on config

Definition at line 239 of file ApplicationMgr.h.

std::string ApplicationMgr::m_jobOptionsPreAction
protected

additional command to run on config

Definition at line 238 of file ApplicationMgr.h.

SmartIF<IJobOptionsSvc> ApplicationMgr::m_jobOptionsSvc
protected

Reference to JobOption service.

Definition at line 221 of file ApplicationMgr.h.

StringProperty ApplicationMgr::m_jobOptionsSvcType
protected

JobOptionsSvc type.

Definition at line 208 of file ApplicationMgr.h.

std::string ApplicationMgr::m_jobOptionsType
protected

Source type (e.g. dbase, file...)

Definition at line 236 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_loopCheck
protected

For ServiceMgr initialization loop checking.

Definition at line 261 of file ApplicationMgr.h.

ManagersMap ApplicationMgr::m_managers
protected

Map of known component managers.

It contains (at least) the managers for IService and IAlgorithm. IAlgTool and IAuditor are not mandatory (but a missing manager for IAlgTool will probably not allow any job to run).

Definition at line 186 of file ApplicationMgr.h.

SmartIF<IMessageSvc> ApplicationMgr::m_messageSvc
protected

Reference to the message service.

Definition at line 218 of file ApplicationMgr.h.

StringProperty ApplicationMgr::m_messageSvcType
protected

MessageSvc type.

Definition at line 207 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_multiThreadSvcNameList
protected

List of external services names for which we want a copy per evt thread.

Definition at line 232 of file ApplicationMgr.h.

std::string ApplicationMgr::m_name = "ApplicationMgr"
protected

Name.

Definition at line 210 of file ApplicationMgr.h.

int ApplicationMgr::m_noOfEvtThreads
protected

no of multiThreadSvc copies

Definition at line 233 of file ApplicationMgr.h.

std::vector<std::string> ApplicationMgr::m_okDlls
private

names of successfully loaded dlls

Definition at line 281 of file ApplicationMgr.h.

int ApplicationMgr::m_outputLevel
protected

Message output level.

Definition at line 244 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_outStreamNameList
protected

List of output stream names.

Definition at line 205 of file ApplicationMgr.h.

StringProperty ApplicationMgr::m_outStreamType
protected

Output stream type (obsolete?)

Definition at line 206 of file ApplicationMgr.h.

IntegerProperty ApplicationMgr::m_pluginDebugLevel
protected

Debug level for the plugin system.

Definition at line 249 of file ApplicationMgr.h.

SmartIF<IEventProcessor> ApplicationMgr::m_processingMgr
protected

Reference to processing manager object.

Definition at line 220 of file ApplicationMgr.h.

bool ApplicationMgr::m_propertiesPrint
protected

flag to activate the printout of properties

Definition at line 272 of file ApplicationMgr.h.

SmartIF<PropertyMgr> ApplicationMgr::m_propertyMgr
protected

Reference to Property Manager.

Definition at line 200 of file ApplicationMgr.h.

IntegerProperty ApplicationMgr::m_returnCode
protected

Property to record the error conditions occurring during the running.

Definition at line 275 of file ApplicationMgr.h.

SmartIF<IRunable> ApplicationMgr::m_runable
protected

Reference to the runable object.

Definition at line 219 of file ApplicationMgr.h.

std::string ApplicationMgr::m_runableType
protected

Runable type.

Definition at line 240 of file ApplicationMgr.h.

IntegerProperty ApplicationMgr::m_SIExit
protected

For SI's "Exit" command via callback.

Definition at line 203 of file ApplicationMgr.h.

IntegerProperty ApplicationMgr::m_SIGo
protected

For SI's "Go" command via callback.

Definition at line 202 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_stalledEventMonitoring
protected

Property to enable/disable the monitoring and reporting of stalled events (enabled by default).

See also
StalledEventMonitor

Definition at line 269 of file ApplicationMgr.h.

Gaudi::StateMachine::State ApplicationMgr::m_state = Gaudi::StateMachine::OFFLINE
protected

Internal State.

Definition at line 211 of file ApplicationMgr.h.

BooleanProperty ApplicationMgr::m_stopOnSignal
protected

Property to enable/disable the "stop on signal" service (enabled by default).

See also
Gaudi::Utils::StopSignalHandler

Definition at line 265 of file ApplicationMgr.h.

SmartIF<ISvcLocator> ApplicationMgr::m_svcLocator
mutableprotected

Reference to its own service locator (must be instantiated prior to any service!)

Definition at line 198 of file ApplicationMgr.h.

SmartIF<ISvcManager> ApplicationMgr::m_svcManager
protected

Cached pointer to the manager of services.

Definition at line 191 of file ApplicationMgr.h.

VectorName ApplicationMgr::m_svcMapping
protected

Default mapping of services.

Definition at line 215 of file ApplicationMgr.h.

VectorName ApplicationMgr::m_svcOptMapping
protected

Default mapping of services.

Definition at line 216 of file ApplicationMgr.h.

Gaudi::StateMachine::State ApplicationMgr::m_targetState = Gaudi::StateMachine::OFFLINE
protected

Internal State.

Definition at line 212 of file ApplicationMgr.h.

StringArrayProperty ApplicationMgr::m_topAlgNameList
protected

List of top level algorithms names.

Definition at line 204 of file ApplicationMgr.h.

bool ApplicationMgr::m_useHiveAlgorithmManager
protected

Definition at line 278 of file ApplicationMgr.h.


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