Loading [MathJax]/extensions/tex2jax.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
12 #include "Gaudi/Interfaces/IOptionsSvc.h"
13 #include "GaudiKernel/IIncidentSvc.h"
14 #include "GaudiKernel/Guards.h"
15 #include "GaudiKernel/IOpaqueAddress.h"
16 #include "GaudiKernel/IProperty.h"
17 #include "GaudiKernel/IIoComponentMgr.h"
39 return thisPair.first.front() ==
'/';
45 :
public cool::IDatabase
48 LockedDatabase (cool::IDatabasePtr dbptr,
50 virtual ~LockedDatabase();
52 virtual const cool::DatabaseId& databaseId()
const override
53 {
return m_dbptr->databaseId(); }
55 virtual const cool::IRecord& databaseAttributes()
const override
56 {
return m_dbptr->databaseAttributes(); }
58 virtual cool::IFolderSetPtr createFolderSet
61 bool createParents =
false )
override
64 virtual bool existsFolderSet(
const std::string& folderSetName )
override
65 {
return m_dbptr->existsFolderSet (folderSetName); }
67 virtual cool::IFolderSetPtr getFolderSet(
const std::string&
fullPath )
override
68 {
return m_dbptr->getFolderSet (
fullPath); }
74 bool createParents =
false )
override
77 virtual bool existsFolder(
const std::string&
fullPath )
override
78 {
return m_dbptr->existsFolder (
fullPath); }
80 virtual cool::IFolderPtr getFolder(
const std::string&
fullPath )
override
81 {
return m_dbptr->getFolder (
fullPath); }
83 virtual const std::vector<std::string> listAllNodes(
bool ascending =
true )
override
84 {
return m_dbptr->listAllNodes (
ascending); }
86 virtual bool dropNode(
const std::string&
fullPath )
override
87 {
return m_dbptr->dropNode (
fullPath); }
89 virtual bool existsTag(
const std::string& tagName )
const override
90 {
return m_dbptr->existsTag (tagName); }
93 {
return m_dbptr->tagNameScope (tagName); }
95 virtual const std::vector<std::string>
96 taggedNodes(
const std::string& tagName )
const override
97 {
return m_dbptr->taggedNodes (tagName); }
99 virtual bool isOpen()
const override
100 {
return m_dbptr->isOpen(); }
103 {
return m_dbptr->openDatabase(); }
105 virtual void closeDatabase()
override
106 {
return m_dbptr->closeDatabase(); }
108 virtual const std::string& databaseName()
const override
109 {
return m_dbptr->databaseName(); }
112 virtual ITransactionPtr startTransaction()
override
114 {
return m_dbptr->startTransaction(); }
119 cool::IDatabasePtr m_dbptr;
124 LockedDatabase::LockedDatabase (cool::IDatabasePtr dbptr,
126 : m_dbptr (std::move(dbptr)),
132 LockedDatabase::~LockedDatabase()
151 ATH_MSG_INFO(
"Opened read transaction for POOL PersistencySvc");
154 ATH_MSG_INFO(
"Cannot connect to POOL PersistencySvc" );
164 if (StatusCode::SUCCESS!=incSvc.retrieve()) {
166 return StatusCode::FAILURE;
169 incSvc->addListener(
this,
"BeginEvent", pri );
170 incSvc->addListener(
this,
"StoreCleared", pri );
171 incSvc->addListener(
this, IncidentType::EndProcessing, pri );
175 if (!iomgr.retrieve().isSuccess()) {
177 return(StatusCode::FAILURE);
179 if (!iomgr->io_register(
this).isSuccess()) {
180 ATH_MSG_FATAL(
"Could not register myself with the IoComponentMgr !");
181 return(StatusCode::FAILURE);
185 ATH_MSG_INFO(
"COOL connection management disabled - connections kept open throughout job" );
187 ATH_MSG_INFO(
"POOL file connection management disabled - files kept open throught job" );
197 ATH_MSG_INFO(
"Run-LB data will be cached in groups of " <<
204 ATH_MSG_INFO(
"Online mode ignoring potential missing channels outside cache" );
212 if (StatusCode::SUCCESS!=
checkEventSel())
return StatusCode::FAILURE;
231 if (StatusCode::SUCCESS!=
setupFolders())
return StatusCode::FAILURE;
236 " connections and " <<
m_foldermap.size() <<
" folders" );
240 ATH_MSG_INFO(
"Service IOVDbSvc initialised successfully" );
243 return StatusCode::SUCCESS;
251 return(StatusCode::SUCCESS);
256 return(StatusCode::SUCCESS);
263 typedef std::map<IOVDbConn*,float> CTMap;
268 const float& fread=
folder->readTime();
272 if (citr!=ctmap.end()) {
273 (citr->second)+=fread;
275 ctmap.insert(CTMap::value_type(cptr,fread));
279 ATH_MSG_INFO(
" bytes in (( " << std::fixed << std::setw(9) << std::setprecision(2) <<
280 readtime <<
" ))s" );
286 if (citr!=ctmap.end()) fread=citr->second;
287 pThisConnection->setInactive();
288 pThisConnection->summary(fread);
289 delete pThisConnection;
298 cool::IDatabasePtr
dbconn;
300 ATH_MSG_INFO(
"No default COOL database connection is available");
305 ATH_MSG_INFO(
"Changing state of default connection to readonly=" << readOnly );
326 unsigned int ncontainers=0;
327 unsigned int nused=0;
328 for (;cont!=contEnd; ++cont) {
330 const std::string&
fname=cont->folderName();
334 if (thisNamePtrPair.second->folderName()==
fname && !(thisNamePtrPair.second->tagOverride())) {
336 thisNamePtrPair.second->useFileMetaData();
337 thisNamePtrPair.second->setFolderDescription( cont->folderDescription() );
343 ATH_MSG_INFO(
"Found " << ncontainers <<
" metadata containers in input file, " << nused <<
" will be used");
345 ATH_MSG_DEBUG(
"Could not retrieve IOVMetaDataContainer objects from MetaDataStore" );
354 std::vector<std::string> keysToDelete;
356 if (thisNamePtrPair.second->fromMetaDataOnly() && !thisNamePtrPair.second->readMeta()) {
357 ATH_MSG_INFO(
"preLoadAddresses: Removing folder " << thisNamePtrPair.second->folderName() <<
358 ". It should only be in the file meta data and was not found." );
359 keysToDelete.push_back(thisNamePtrPair.first);
363 for (
auto & thisKey : keysToDelete) {
366 fitr->second->conn()->decUsage();
367 delete (fitr->second);
370 ATH_MSG_ERROR(
"preLoadAddresses: Could not find folder " << thisKey <<
" for removal" );
383 if (pThisConnection->nFolders()>0 || doMeta) {
387 if (
folder->conn()==pThisConnection || (
folder->conn()==
nullptr && doMeta)) {
388 std::unique_ptr<SG::TransientAddress> tad =
391 if (oldconn!=pThisConnection) {
394 oldconn=pThisConnection;
398 return StatusCode::FAILURE;
401 if (
folder->writeMeta()) {
402 if (StatusCode::SUCCESS!=
m_h_IOVSvc->preLoadDataTAD(tad.get(),
folder->eventStore())) {
403 ATH_MSG_ERROR(
"Could not request IOVSvc to preload metadata for " <<
folder->folderName() );
404 return StatusCode::FAILURE;
408 if (StatusCode::SUCCESS!=
m_h_IOVSvc->preLoadTAD(tad.get(),
folder->eventStore())) {
409 ATH_MSG_ERROR(
"Could not request IOVSvc to preload metadata for " <<
folder->folderName() );
410 return StatusCode::FAILURE;
414 tlist.push_back(tad.release());
431 newmap[thisNamePtrPair.second->key()]=thisNamePtrPair.second;
436 ATH_MSG_ERROR(
"Could not fill TagInfo object from preLoadAddresses" );
437 return StatusCode::SUCCESS;
442 return StatusCode::SUCCESS;
447 const EventContext& )
453 Gaudi::Guards::AuditorGuard auditor(std::string(
"UpdateAddr::")+(tad->
name().empty() ?
"anonymous" : tad->
name()),
454 auditorSvc(),
"preLoadProxy");
458 std::unique_ptr<IOpaqueAddress>
address;
463 const std::string&
key=tad->
name();
467 "updateAddress cannot find description for TAD " <<
key );
468 return StatusCode::FAILURE;
473 <<
" but expecting " <<
folder->clid() );
475 return StatusCode::FAILURE;
481 ATH_MSG_DEBUG(
"updateAddress: in initialisation phase and no iovTime defined" );
482 return::StatusCode::SUCCESS;
488 iovTime.setRunEvent( evid->run_number(), evid->lumi_block()) ;
490 uint64_t nsTime = evid->time_stamp() *1000000000LL;
491 nsTime += evid->time_stamp_ns_offset();
492 iovTime.setTimestamp(nsTime);
494 ATH_MSG_DEBUG(
"updateAddress - using iovTime from EventInfo: " << iovTime);
498 return StatusCode::SUCCESS;
501 ATH_MSG_DEBUG(
"updateAddress: using iovTime from init/beginRun: " << iovTime);
507 cool::ValidityKey vkey=
folder->iovTime(iovTime);
521 folder->setDropped(
false);
526 <<
". You may see errors from other folders sharing the same connection." );
527 return StatusCode::FAILURE;
534 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrSetup:")+(tad->
name().empty() ?
"anonymous" : tad->
name()),
535 auditorSvc(),
"preLoadProxy");
539 return StatusCode::FAILURE;
544 if (
folder->timeStamp()) {
545 cool::ValidityKey
start=
range.start().timestamp();
555 return StatusCode::FAILURE;
558 return StatusCode::SUCCESS;
564 const std::string& dbKey,
568 std::unique_ptr<IOpaqueAddress>&
address) {
572 ATH_MSG_DEBUG(
"getRange clid: " << clid <<
" key: \""<< dbKey <<
"\" t: " <<
time );
573 const std::string&
key=dbKey;
577 return StatusCode::FAILURE;
580 if (
folder->clid()!=clid) {
583 <<
" but expecting " <<
folder->clid() );
585 return StatusCode::FAILURE;
594 folder->setDropped(
false);
599 <<
". You may see errors from other folders sharing the same connection." );
600 return StatusCode::FAILURE;
608 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrSetup:")+(
key.empty() ?
"anonymous" :
key),
609 auditorSvc(),
"preLoadProxy");
613 return StatusCode::FAILURE;
618 if (
folder->extensible()) {
621 if (
folder->timeStamp()) {
631 if (
folder->iovOverridden()) {
632 if (
folder->timeStamp()) {
642 return StatusCode::SUCCESS;
650 const std::string& ) {
652 return StatusCode::SUCCESS;
656 const EventContext& ctx)
671 if (conditionsRun != EventIDBase::UNDEFNUM) {
677 return StatusCode::SUCCESS;
682 ATH_MSG_DEBUG(
"Same run as previous signalBeginRun call. Skipping re-loading of folders..." );
683 return StatusCode::SUCCESS;
699 if (pThisConnection->nFolders()>0) {
701 cool::IDatabasePtr
dbconn=pThisConnection->getCoolDb();
702 if (
dbconn.get()==
nullptr) {
703 ATH_MSG_FATAL(
"Conditions database connection " << pThisConnection->name() <<
" cannot be opened - STOP" );
704 return StatusCode::FAILURE;
708 if (
folder->conn()!=pThisConnection)
continue;
712 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrCache:")+
folder->folderName(), auditorSvc(),
"preLoadProxy");
715 return StatusCode::FAILURE;
723 return StatusCode::SUCCESS;
741 ATH_MSG_DEBUG(
"Successfully closed input POOL connections");
747 ATH_MSG_DEBUG(
"Reopend read transaction for POOL conditions input files" );
749 ATH_MSG_WARNING(
"Cannot reopen read transaction for POOL conditions input files");
759 ATH_MSG_VERBOSE(
"entering handle(), incident type " << inc.type() <<
" from " << inc.source() );
760 if (inc.type()==
"BeginEvent") {
766 if( (inc.type()==
"StoreCleared" && sinc!=
nullptr && sinc->
store()==&*
m_h_sgSvc)
767 or inc.type()==IncidentType::EndProcessing )
792 for (
const auto & thisNameTagPair: nameTagPairs) {
794 if (not refersToConditionsFolder(thisNameTagPair))
continue;
798 const std::string& ifname=
folder->folderName();
799 if (ifname!=thisNameTagPair.first)
continue;
803 const auto &
theTag{thisNameTagPair.second};
808 const std::string_view tagTypeString=(
folder->joTag().empty()) ?
"hierarchical" :
"jobOption";
809 ATH_MSG_INFO(
"Ignoring inputfile TagInfo request for tag " <<
theTag <<
" in folder " << ifname<<
" in favour of "<<tagTypeString);
813 return StatusCode::SUCCESS;
816 std::vector<std::string>
819 std::vector<std::string>
keys;
831 info.folderName =
f->folderName();
832 info.tag =
f->resolvedTag();
833 info.range =
f->currentRange();
834 info.retrieved =
f->retrieved();
835 info.bytesRead =
f->bytesRead();
836 info.readTime =
f->readTime();
837 info.extensible =
f->extensible();
840 info.retrieved =
false;
852 if (
proxy!=
nullptr) {
881 if (!joSvc->has(
"EventSelector.OverrideRunNumber")) {
884 ATH_MSG_DEBUG(
"No EventSelector.OverrideRunNumber property found" );
885 return StatusCode::SUCCESS;
888 BooleanProperty bprop(
"OverrideRunNumber",
false);
889 ATH_CHECK( bprop.fromString(joSvc->get(
"EventSelector.OverrideRunNumber")) );
892 ATH_MSG_INFO(
"Setting run/LB/time from EventSelector override in initialize" );
899 IntegerProperty iprop1(
"RunNumber",0);
900 if (iprop1.fromString(joSvc->get(
"EventSelector.RunNumber",
"INVALID"))) {
903 ATH_MSG_ERROR(
"Unable to get RunNumber from EventSelector");
906 IntegerProperty iprop2(
"FirstLB",0);
907 if (iprop2.fromString(joSvc->get(
"EventSelector.FirstLB",
"INVALID"))) {
908 lumib=iprop2.value();
913 IntegerProperty iprop3(
"InitialTimeStamp",0);
914 if (iprop3.fromString(joSvc->get(
"EventSelector.InitialTimeStamp",
"INVALID"))) {
917 ATH_MSG_ERROR(
"Unable to get InitialTimeStamp from EventSelector" );
924 ATH_MSG_INFO(
"run/LB/time set to [" <<
run <<
"," << lumib <<
" : " << nsTime <<
"]" );
930 return StatusCode::SUCCESS;
944 std::list<IOVDbParser> allFolderdata;
949 ATH_MSG_FATAL(
"setupFolders: Folder setup string is invalid: " <<thisFolder);
950 return StatusCode::FAILURE;
953 allFolderdata.push_back(folderdata);
964 if (not
keys.isValid()){
965 ATH_MSG_ERROR(
"An override tag was invalid: " << thisOverrideTag);
966 return StatusCode::FAILURE;
970 ATH_MSG_ERROR(
"Problem in overrideTag specification " <<thisOverrideTag );
971 return StatusCode::FAILURE;
974 for (
auto& folderdata : allFolderdata) {
975 const std::string& ifname=folderdata.folderName();
977 (ifname.size()==
prefix.size() || ifname[
prefix.size()]==
'/')) {
979 folderdata.applyOverrides(
keys,
msg());
994 it2=allFolderdata.erase(it2);
1009 bool hasError=
false;
1010 for (
const auto& folderdata : allFolderdata) {
1015 if (folderdata.getKey(
"db",
"",
connstr) ||
1016 folderdata.getKey(
"dbConnection",
"",
connstr)) {
1020 if (pThisConnection->name()==
connstr) {
1022 conn=pThisConnection;
1026 if (
conn==
nullptr) {
1036 ATH_MSG_FATAL(
"Folder request " << folderdata.folderName() <<
1037 " gives no DB connection information and no default set" );
1038 return StatusCode::FAILURE;
1045 std::string crestTag =
"";
1048 if(crestTag.size()==0 && folderdata.folderName().compare(
"/TagInfo")!=0){
1050 " in Global Tag Map." );
1065 " associated to already requested Storegate key " <<
key );
1072 return StatusCode::FAILURE;
1075 std::string_view
match=folderToWrite;
1076 std::string::size_type
idx=folderToWrite.find(
'*');
1077 if (
idx!=std::string::npos) {
1078 match=std::string_view(folderToWrite).substr(0,
idx);
1083 fptr->setWriteMeta();
1084 ATH_MSG_INFO(
"Folder " <<
fptr->folderName() <<
" will be written to file metadata" );
1088 return StatusCode::SUCCESS;
1095 return StatusCode::FAILURE;
1101 if (!
folder->joTag().empty()) {
1104 return StatusCode::FAILURE;
1113 if (StatusCode::SUCCESS!=
1116 <<
folder->folderName() );
1123 return StatusCode::SUCCESS;
1130 Gaudi::Guards::AuditorGuard auditor(std::string(
"loadCachesOverhead:")+
conn->name(), auditorSvc(),
"preLoadProxy");
1134 if (
m_abort)
return StatusCode::FAILURE;
1137 for (
const auto & thisNamePtrPair :
m_foldermap) {
1142 if (vkey>cool::ValidityKeyMax) {
1143 ATH_MSG_WARNING(
"Requested validity key " << vkey <<
" is out of range, reset to 0" );
1149 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrCache:")+
folder->folderName(), auditorSvc(),
"preLoadProxy");
1154 sc=StatusCode::FAILURE;
1163 if (
conn->aborted()) {
1164 ATH_MSG_FATAL(
"Connection " <<
conn->name() <<
" was aborted, set global abort" );
1178 const std::string_view tagstub=std::string_view(
m_globalTag).substr(0,7);
1181 (tagstub!=
"COMCOND" && tagstub!=
"CONDBR2")) ||
1182 (
m_par_dbinst==
"OFLP200" && (tagstub!=
"OFLCOND" && tagstub!=
"CMCCOND"))) {
1183 ATH_MSG_FATAL(
"Likely incorrect conditions DB configuration! "
1185 " but global tag begins " << tagstub );
1186 ATH_MSG_FATAL(
"See Atlas/CoolTroubles wiki for details," <<
1187 " or set IOVDbSvc.DBInstance=\"\" to disable check" );
1188 return StatusCode::FAILURE;
1191 return StatusCode::SUCCESS;
virtual void postConditionsLoad() override
May be called once conditions are loaded to let IOVDbSvc release resources.
JetConstituentVector::iterator iterator
virtual StatusCode initialize() override
Service init.
virtual StatusCode preLoadAddresses(StoreID::type storeID, tadList &list) override
Get all addresses that the provider wants to preload in SG maps.
virtual bool getKeyInfo(const std::string &key, IIOVDbSvc::KeyInfo &info) override
Return information about SG key return false if this key is not known to IOVDbSvc.
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Validity Range object. Holds two IOVTimes (start and stop)
static constexpr uint32_t MAXRUN
BooleanProperty m_crestCoolToFile
Validity Range object. Holds two IOVTime instances (start and stop)
uint32_t event() const noexcept
EventIDBase::number_type conditionsRun() const
virtual cool::IDatabasePtr getDatabase(bool readOnly) override
Access to COOL database for a given folder.
IntegerProperty m_par_maxNumPoolFiles
int run(int argc, char *argv[])
virtual void signalEndProxyPreload() override
Signal that callback has been fired.
ServiceHandle< IPoolSvc > m_h_poolSvc
void commit()
Save catalog to file.
FloatProperty m_par_timeStampSlop
virtual bool dropObject(const std::string &key, const bool resetCache=false) override
StatusCode io_reinit() override final
IAddressProvider::tadList tadList
BooleanProperty m_par_manageConnections
#define ATH_MSG_VERBOSE(x)
bool isValid() const noexcept
BooleanProperty m_crestToFile
ServiceHandle< StoreGateSvc > m_h_metaDataStore
static std::map< std::string, std::string > getGlobalTagMap(const std::string &crest_path, const std::string &globaltag)
ServiceHandle< IClassIDSvc > m_h_clidSvc
static constexpr uint32_t MINRUN
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
const std::string & name() const
Get the primary (hashed) SG key.
IntegerProperty m_par_forceRunNumber
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
Athena service for Interval Of Validity database.
virtual StatusCode setRange(const CLID &clid, const std::string &dbKey, const IOVRange &range, const std::string &tag) override
Set range for a particular data object.
IntegerProperty m_par_forceLumiblockNumber
virtual StatusCode processTagInfo() override
Process TagInfo.
std::vector< NameTagPair > NameTagPairVec
std::vector< HWIdentifier >::iterator it1
::StatusCode StatusCode
StatusCode definition for legacy code.
virtual StatusCode updateAddress(StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
Update a transient Address.
UnsignedIntegerProperty m_par_cacheAlign
StringProperty m_par_crestServer
CLID clID() const
Retrieve string key:
StatusCode checkEventSel()
std::pair< std::string, std::string > NameTagPair
static constexpr uint64_t MAXTIMESTAMP
std::map< std::string, std::string > m_cresttagmap
BooleanProperty m_par_managePoolConnections
Gaudi::Property< std::string > m_par_defaultConnection
void setRETime(uint64_t time) noexcept
virtual std::vector< std::string > getKeyList() override
def openDatabase(dbstring)
std::vector< TFile * > fptr
void setTimestamp(uint64_t timestamp) noexcept
ServiceHandle< ITagInfoMgr > m_h_tagInfoMgr
uint32_t CLID
The Class ID type.
def access(filename, mode)
bool allGood
Loop over the SDOs & Digits.
BooleanProperty m_par_onlineMode
static constexpr uint32_t MAXEVENT
std::map< std::string, IOVDbFolder * > FolderMap
BooleanProperty m_par_checklock
virtual void handle(const Incident &incident) override
Incident service handle for EndEvent.
StatusCode io_finalize() override final
uint32_t run() const noexcept
const StoreGateSvc * store() const
Return the store that was cleared.
Gaudi::Property< std::vector< std::string > > m_par_overrideTags
BooleanProperty m_outputToFile
Incident sent after a store is cleared.
ServiceHandle< IAddressCreator > m_h_persSvc
static constexpr uint32_t MINEVENT
IntegerProperty m_par_cacheRun
void setAddress(IOpaqueAddress *pAddress)
Retrieve primary clid.
def createFolder(db, name)
Gaudi::Property< std::string > m_par_globalTag
Gaudi::Property< std::string > m_par_dbinst
Header for CoralCrestManager class.
bool m_poolPayloadRequested
virtual StatusCode getRange(const CLID &clid, const std::string &dbKey, const IOVTime &time, IOVRange &range, std::string &tag, std::unique_ptr< IOpaqueAddress > &ioa) override
Get range for a particular data object identified by its clid and key and a requested IOVTime.
def time(flags, cells_name, *args, **kw)
#define ATH_MSG_WARNING(x)
Gaudi::Property< std::vector< std::string > > m_par_folders
virtual StatusCode finalize() override
Service finalize.
void setRunEvent(uint32_t run, uint32_t event) noexcept
const EventIDBase * EventIDFromStore(IProxyDict *store)
Retrieve the EventID from EventContext saved in store STORE.
Filled by IIOVDbSvc::getKeyInfo.
static constexpr uint64_t MINTIMESTAMP
#define ATLAS_THREAD_SAFE
ServiceHandle< StoreGateSvc > m_h_detStore
cool::ValidityKey m_iovslop
StatusCode loadCaches(IOVDbConn *conn, const IOVTime *time=nullptr)
Define macros for attributes used to control the static checker.
StatusCode setupFolders()
ServiceHandle< IIOVSvc > m_h_IOVSvc
virtual StatusCode signalBeginRun(const IOVTime &beginRunTime, const EventContext &ctx) override
Set time for begin run.
StringProperty m_par_source
ServiceHandle< StoreGateSvc > m_h_sgSvc
Gaudi::Property< std::vector< std::string > > m_par_foldersToWrite
virtual StatusCode loadAddresses(StoreID::type storeID, tadList &list) override
Get all new addresses from Provider for this Event.
bool match(std::string s1, std::string s2)
match the individual directories of two strings
PublicToolHandle< IIOVDbMetaDataTool > m_h_metaDataTool
IntegerProperty m_par_forceTimestamp
StatusCode checkConfigConsistency() const
std::string description
glabal timer - how long have I taken so far?
IntegerProperty m_par_cacheTime
Incident sent after a store is cleared.