14#include "Gaudi/Interfaces/IOptionsSvc.h"
15#include "GaudiKernel/GaudiException.h"
16#include "GaudiKernel/Guards.h"
17#include "GaudiKernel/IIncidentSvc.h"
18#include "GaudiKernel/IIoComponentMgr.h"
19#include "GaudiKernel/IOpaqueAddress.h"
20#include "GaudiKernel/IProperty.h"
34#include "CrestApi/CrestLogger.h"
40 :
public cool::IDatabase
43 LockedDatabase (cool::IDatabasePtr dbptr,
44 const Athena::DBLock& dblock)
45 : m_dbptr (std::move(dbptr)), m_dblock (dblock) {}
47 virtual ~LockedDatabase() =
default;
49 virtual const cool::DatabaseId& databaseId()
const override
50 {
return m_dbptr->databaseId(); }
52 virtual const cool::IRecord& databaseAttributes()
const override
53 {
return m_dbptr->databaseAttributes(); }
55 virtual cool::IFolderSetPtr createFolderSet
56 (
const std::string& fullPath,
58 bool createParents =
false )
override
59 {
return m_dbptr->createFolderSet (fullPath,
description, createParents); }
61 virtual bool existsFolderSet(
const std::string& folderSetName )
override
62 {
return m_dbptr->existsFolderSet (folderSetName); }
64 virtual cool::IFolderSetPtr getFolderSet(
const std::string& fullPath )
override
65 {
return m_dbptr->getFolderSet (fullPath); }
68 (
const std::string& fullPath,
69 const cool::IFolderSpecification& folderSpec,
71 bool createParents =
false )
override
72 {
return m_dbptr->createFolder (fullPath, folderSpec,
description, createParents); }
74 virtual bool existsFolder(
const std::string& fullPath )
override
75 {
return m_dbptr->existsFolder (fullPath); }
77 virtual cool::IFolderPtr getFolder(
const std::string& fullPath )
override
78 {
return m_dbptr->getFolder (fullPath); }
80 virtual const std::vector<std::string> listAllNodes(
bool ascending =
true )
override
81 {
return m_dbptr->listAllNodes (ascending); }
83 virtual bool dropNode(
const std::string& fullPath )
override
84 {
return m_dbptr->dropNode (fullPath); }
86 virtual bool existsTag(
const std::string& tagName )
const override
87 {
return m_dbptr->existsTag (tagName); }
89 virtual cool::IHvsNode::Type tagNameScope(
const std::string& tagName )
const override
90 {
return m_dbptr->tagNameScope (tagName); }
92 virtual const std::vector<std::string>
93 taggedNodes(
const std::string& tagName )
const override
94 {
return m_dbptr->taggedNodes (tagName); }
96 virtual bool isOpen()
const override
97 {
return m_dbptr->isOpen(); }
100 {
return m_dbptr->openDatabase(); }
102 virtual void closeDatabase()
override
103 {
return m_dbptr->closeDatabase(); }
105 virtual const std::string& databaseName()
const override
106 {
return m_dbptr->databaseName(); }
110 virtual ITransactionPtr startTransaction()
override
111 {
return m_dbptr->startTransaction(); }
116 cool::IDatabasePtr m_dbptr;
117 Athena::DBLock m_dblock;
133 ATH_MSG_INFO(
"Opened read transaction for POOL PersistencySvc");
136 ATH_MSG_INFO(
"Cannot connect to POOL PersistencySvc" );
147 const long int pri = 100;
148 incSvc->addListener(
this, IncidentType::BeginEvent, pri );
149 incSvc->addListener(
this,
"StoreCleared", pri );
150 incSvc->addListener(
this, IncidentType::EndProcessing, pri );
159 ATH_MSG_INFO(
"COOL connection management disabled - connections kept open throughout job" );
161 ATH_MSG_INFO(
"POOL file connection management disabled - files kept open throught job" );
176 ATH_MSG_INFO(
"Online mode ignoring potential missing channels outside cache" );
182 ATH_MSG_INFO(
"IOVDbSvc configured to use a COOL database");
185 ATH_MSG_INFO(
"IOVDbSvc configured to use a CREST database");
189 return StatusCode::FAILURE;
220 " connections and " <<
m_foldermap.size() <<
" folders" );
225 ATH_MSG_INFO(
"Service IOVDbSvc initialised successfully" );
228 return StatusCode::SUCCESS;
236 return StatusCode::SUCCESS;
242 return StatusCode::SUCCESS;
248 unsigned long long nread = 0;
252 std::map<IOVDbConn*, float> ctmap;
255 nread += folder->bytesRead();
256 readtime += folder->readTime();
257 const auto& [citr, inserted] = ctmap.try_emplace(folder->conn(), 0);
258 citr->second += folder->readTime();
261 ATH_MSG_INFO(
"Total payload read from IOVDb: " << nread <<
" bytes in (( " << std::fixed << std::setw(9) << std::setprecision(2) <<
262 readtime <<
" ))s" );
267 const auto citr = ctmap.find(conn.get());
268 if (citr != ctmap.end()) fread = citr->second;
270 conn->summary(fread);
274 return StatusCode::SUCCESS;
280 cool::IDatabasePtr dbconn;
282 ATH_MSG_INFO(
"No default COOL database connection is available");
287 ATH_MSG_INFO(
"Changing state of default connection to readonly=" << readOnly );
290 dbconn = std::make_shared<LockedDatabase> (
m_connections[0]->getCoolDb(),
309 unsigned int ncontainers=0;
310 unsigned int nused=0;
311 for (;cont!=contEnd; ++cont) {
313 const std::string& fname=cont->folderName();
317 if (folder->folderName()==fname && !(folder->tagOverride())) {
318 ATH_MSG_INFO(
"Folder " << fname <<
" will be taken from file metadata" );
319 folder->useFileMetaData();
320 folder->setFolderDescription( cont->folderDescription() );
326 ATH_MSG_INFO(
"Found " << ncontainers <<
" metadata containers in input file, " << nused <<
" will be used");
328 ATH_MSG_DEBUG(
"Could not retrieve IOVMetaDataContainer objects from MetaDataStore" );
337 std::vector<std::string> keysToDelete;
339 if (folder->fromMetaDataOnly() && !folder->readMeta()) {
340 ATH_MSG_INFO(
"preLoadAddresses: Removing folder " << folder->folderName() <<
341 ". It should only be in the file meta data and was not found." );
342 keysToDelete.push_back(name);
346 for (
auto & thisKey : keysToDelete) {
349 fitr->second->conn()->decUsage();
352 ATH_MSG_ERROR(
"preLoadAddresses: Could not find folder " << thisKey <<
" for removal" );
365 if (pThisConnection->nFolders()>0 || doMeta) {
368 if (folder->conn()==pThisConnection.get() || (folder->conn()==
nullptr && doMeta)) {
369 std::unique_ptr<SG::TransientAddress> tad =
371 if (oldconn!=pThisConnection.get()) {
374 oldconn=pThisConnection.get();
377 ATH_MSG_ERROR(
"preLoadFolder failed for folder " << folder->folderName() );
378 return StatusCode::FAILURE;
381 if (folder->writeMeta()) {
382 if (
m_h_IOVSvc->preLoadDataTAD(tad.get(),folder->eventStore()).isFailure()) {
383 ATH_MSG_ERROR(
"Could not request IOVSvc to preload metadata for " << folder->folderName() );
384 return StatusCode::FAILURE;
388 if (
m_h_IOVSvc->preLoadTAD(tad.get(), folder->eventStore()).isFailure()) {
389 ATH_MSG_ERROR(
"Could not request IOVSvc to preload metadata for " << folder->folderName() );
390 return StatusCode::FAILURE;
394 tlist.push_back(tad.release());
410 newmap[folder->key()]=std::move(folder);
416 ATH_MSG_ERROR(
"Could not fill TagInfo object from preLoadAddresses" );
418 return StatusCode::SUCCESS;
424 return StatusCode::SUCCESS;
429 const EventContext& )
435 Gaudi::Guards::AuditorGuard auditor(std::string(
"UpdateAddr::")+(tad->
name().empty() ?
"anonymous" : tad->
name()),
436 auditorSvc(),
"preLoadProxy");
440 std::unique_ptr<IOpaqueAddress> address;
445 const std::string& key=tad->
name();
449 "updateAddress cannot find description for TAD " << key );
450 return StatusCode::FAILURE;
452 const auto& folder=fitr->second;
453 if (folder->clid()!=tad->
clID()) {
455 <<
" but expecting " << folder->clid() );
457 return StatusCode::FAILURE;
463 ATH_MSG_DEBUG(
"updateAddress: in initialisation phase and no iovTime defined" );
464 return::StatusCode::SUCCESS;
470 iovTime.
setRunEvent( evid->run_number(), evid->lumi_block()) ;
472 uint64_t nsTime = evid->time_stamp() *1000000000LL;
473 nsTime += evid->time_stamp_ns_offset();
476 ATH_MSG_DEBUG(
"updateAddress - using iovTime from EventInfo: " << iovTime);
480 return StatusCode::SUCCESS;
483 ATH_MSG_DEBUG(
"updateAddress: using iovTime from init/beginRun: " << iovTime);
489 cool::ValidityKey vkey=folder->iovTime(iovTime);
502 if (!folder->readMeta() && !folder->cacheValid((vkey))){
506 if (!folder->readMeta() && !folder->cacheValid(vkey)) {
508 folder->setDropped(
false);
510 ATH_MSG_DEBUG(
"Triggering cache load for folder " << folder->folderName());
512 ATH_MSG_ERROR(
"Cache load failed for at least one folder from " << folder->conn()->name()
513 <<
". You may see errors from other folders sharing the same connection." );
514 return StatusCode::FAILURE;
521 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrSetup:")+(tad->
name().empty() ?
"anonymous" : tad->
name()),
522 auditorSvc(),
"preLoadProxy");
525 ATH_MSG_ERROR(
"getAddress failed for folder " << folder->folderName() );
526 return StatusCode::FAILURE;
531 if (folder->timeStamp()) {
532 cool::ValidityKey start=range.start().timestamp();
540 range,folder->eventStore()).isFailure()) {
541 ATH_MSG_ERROR(
"setRange failed for folder " << folder->folderName() );
542 return StatusCode::FAILURE;
545 return StatusCode::SUCCESS;
550 const std::string& dbKey,
554 std::unique_ptr<IOpaqueAddress>& address) {
558 ATH_MSG_DEBUG(
"getRange clid: " << clid <<
" key: \""<< dbKey <<
"\" t: " << time );
562 ATH_MSG_VERBOSE(
"getRange cannot find description for dbKey " << dbKey );
563 return StatusCode::FAILURE;
565 const auto& folder = fitr->second;
566 if (folder->clid()!=clid) {
569 <<
" but expecting " << folder->clid() );
571 return StatusCode::FAILURE;
577 cool::ValidityKey vkey = folder->iovTime(time);
579 if (!folder->readMeta() && !folder->cacheValid((vkey))){
583 if (!folder->readMeta() && !folder->cacheValid(vkey)) {
585 folder->setDropped(
false);
588 ATH_MSG_DEBUG(
"Triggering cache load for folder " << folder->folderName());
589 if (
loadCaches(folder->conn(), &time).isFailure()) {
590 ATH_MSG_ERROR(
"Cache load failed for at least one folder from " << folder->conn()->name()
591 <<
". You may see errors from other folders sharing the "
593 return StatusCode::FAILURE;
601 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrSetup:")+(dbKey.empty() ?
"anonymous" : dbKey),
602 auditorSvc(),
"preLoadProxy");
605 ATH_MSG_ERROR(
"getAddress failed for folder " <<folder->folderName() );
606 return StatusCode::FAILURE;
611 if (folder->extensible()) {
613 IOVTime extStop = range.stop();
614 if (folder->timeStamp()) {
620 range =
IOVRange (range.start(), extStop);
624 if (folder->iovOverridden()) {
625 if (folder->timeStamp()) {
635 return StatusCode::SUCCESS;
642 const std::string& ) {
644 return StatusCode::SUCCESS;
649 const EventContext& ctx)
662 EventIDBase::number_type conditionsRun =
664 if (conditionsRun != EventIDBase::UNDEFNUM) {
670 return StatusCode::SUCCESS;
675 ATH_MSG_DEBUG(
"Same run as previous signalBeginRun call. Skipping re-loading of folders..." );
676 return StatusCode::SUCCESS;
685 static const std::string preLoadProxyStr{
"preLoadProxy"};
689 if (pThisConnection->nFolders()>0) {
691 cool::IDatabasePtr dbconn=pThisConnection->getCoolDb();
692 if (dbconn.get()==
nullptr) {
693 ATH_MSG_FATAL(
"Conditions database connection " << pThisConnection->name() <<
" cannot be opened - STOP" );
694 return StatusCode::FAILURE;
697 if (folder->conn()!=pThisConnection.get())
continue;
698 folder->printCache();
699 cool::ValidityKey vkey=folder->iovTime(
m_iovTime);
701 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrCache:")+folder->folderName(), auditorSvc(), preLoadProxyStr);
703 ATH_MSG_ERROR(
"Problem RELOADING: " << folder->folderName());
704 return StatusCode::FAILURE;
707 folder->printCache();
712 return StatusCode::SUCCESS;
732 ATH_MSG_DEBUG(
"Successfully closed input POOL connections");
738 ATH_MSG_DEBUG(
"Reopend read transaction for POOL conditions input files" );
740 ATH_MSG_WARNING(
"Cannot reopen read transaction for POOL conditions input files");
751 ATH_MSG_VERBOSE(
"entering handle(), incident type " << inc.type() <<
" from " << inc.source() );
752 if (inc.type()==
"BeginEvent") {
758 if( (inc.type()==
"StoreCleared" && sinc!=
nullptr && sinc->
store()==&*
m_h_sgSvc
760 or inc.type()==IncidentType::EndProcessing )
786 for (
const auto & [theTagName, theTag]: nameTagPairs) {
788 if (not theTagName.starts_with(
'/'))
continue;
791 const std::string& ifname=folder->folderName();
792 if (ifname!=theTagName)
continue;
796 if (folder->joTag().empty() && !folder->readMeta() && !folder->noOverride() &&
m_par_globalTag.empty()) {
797 folder->setTagOverride(theTag,
false);
798 ATH_MSG_INFO(
"TagInfo override for tag " << theTag <<
" in folder " << ifname );
799 }
else if (folder->joTag()!=theTag) {
800 const std::string_view tagTypeString=(folder->joTag().
empty()) ?
"hierarchical" :
"jobOption";
801 ATH_MSG_INFO(
"Ignoring inputfile TagInfo request for tag " << theTag <<
" in folder " << ifname<<
" in favour of "<<tagTypeString);
805 return StatusCode::SUCCESS;
809std::vector<std::string>
813 return {keys.begin(), keys.end()};
823 info.folderName = f->folderName();
824 info.tag = f->resolvedTag();
825 info.range = f->currentRange();
826 info.retrieved = f->retrieved();
827 info.bytesRead = f->bytesRead();
828 info.readTime = f->readTime();
829 info.extensible = f->extensible();
832 info.retrieved =
false;
843 CLID clid=folder->clid();
845 if (proxy!=
nullptr) {
848 folder->setDropped(
true);
850 folder->resetCache();
851 ATH_MSG_DEBUG(
"Cache reset done for folder " << folder->folderName() );
874 if (!joSvc->has(
"EventSelector.OverrideRunNumber")) {
877 ATH_MSG_DEBUG(
"No EventSelector.OverrideRunNumber property found" );
878 return StatusCode::SUCCESS;
881 BooleanProperty overrideRunNumber(
"OverrideRunNumber",
false);
882 ATH_CHECK( overrideRunNumber.fromString(joSvc->get(
"EventSelector.OverrideRunNumber")) );
883 if (overrideRunNumber) {
885 ATH_MSG_INFO(
"Setting run/LB/time from EventSelector override in initialize" );
892 IntegerProperty iprop1(
"RunNumber",0);
893 if (iprop1.fromString(joSvc->get(
"EventSelector.RunNumber",
"INVALID"))) {
896 ATH_MSG_ERROR(
"Unable to get RunNumber from EventSelector");
899 IntegerProperty iprop2(
"FirstLB",0);
900 if (iprop2.fromString(joSvc->get(
"EventSelector.FirstLB",
"INVALID"))) {
906 IntegerProperty iprop3(
"InitialTimeStamp",0);
907 if (iprop3.fromString(joSvc->get(
"EventSelector.InitialTimeStamp",
"INVALID"))) {
910 ATH_MSG_ERROR(
"Unable to get InitialTimeStamp from EventSelector" );
915 uint64_t nsTime=time*1000000000LL;
917 ATH_MSG_INFO(
"run/LB/time set to [" <<
run <<
"," << lumib <<
" : " << nsTime <<
"]" );
923 return StatusCode::SUCCESS;
933 auto mLevel =
static_cast<std::underlying_type_t<MSG::Level>
>(
msg().level());
934 Crest::LogLevel cLevel =
static_cast<Crest::LogLevel
>(mLevel);
935 Crest::Logger::setLogLevel(cLevel);
940 return StatusCode::FAILURE;
945 std::list<IOVDbParser> allFolderdata;
950 ATH_MSG_FATAL(
"setupFolders: Folder setup string is invalid: " <<thisFolder);
951 return StatusCode::FAILURE;
954 allFolderdata.push_back(std::move(folderdata));
965 if (not keys.isValid()){
966 ATH_MSG_ERROR(
"An override tag was invalid: " << thisOverrideTag);
967 return StatusCode::FAILURE;
970 if (!keys.getKey(
"prefix",
"",prefix)) {
971 ATH_MSG_ERROR(
"Problem in overrideTag specification " <<thisOverrideTag );
972 return StatusCode::FAILURE;
975 for (
auto& folderdata : allFolderdata) {
976 const std::string& ifname=folderdata.folderName();
977 if (ifname.starts_with(prefix) &&
978 (ifname.size()==prefix.size() || ifname[prefix.size()]==
'/')) {
980 folderdata.applyOverrides(keys,
msg());
986 std::list<IOVDbParser>::iterator it1=allFolderdata.begin();
987 std::list<IOVDbParser>::iterator it_e=allFolderdata.end();
988 for (;it1!=it_e;++it1) {
990 std::list<IOVDbParser>::iterator it2=it1;
994 if (folder1==folder2) {
995 it2=allFolderdata.erase(it2);
996 ATH_MSG_DEBUG(
"Removing duplicate folder " << folder1.folderName());
1000 if (folder1.folderName()==folder2.folderName()) {
1001 ATH_MSG_WARNING(
"Folder name appears twice: " << folder1.folderName() );
1010 bool crestError=
false;
1011 for (
const auto& folderdata : allFolderdata) {
1015 std::string connstr;
1016 if (folderdata.getKey(
"db",
"",connstr)) {
1020 if (pThisConnection->name()==connstr) {
1022 conn=pThisConnection.get();
1026 if (conn==
nullptr) {
1028 conn =
m_connections.emplace_back(std::make_unique<IOVDbConn>(connstr,
true,
msg())).get();
1035 ATH_MSG_FATAL(
"Folder request " << folderdata.folderName() <<
1036 " gives no DB connection information and no default set" );
1037 return StatusCode::FAILURE;
1044 std::string crestTag;
1047 if(crestTag.empty() && folderdata.folderName() !=
"/TagInfo") {
1049 << folderdata.folderName());
1058 const std::string& key=folder->key();
1064 folder->folderName() <<
1065 " associated to already requested Storegate key " << key );
1071 return StatusCode::FAILURE;
1076 std::string_view
match=folderToWrite;
1077 std::string::size_type idx=folderToWrite.find(
'*');
1078 if (idx!=std::string::npos) {
1079 match=std::string_view(folderToWrite).substr(0,idx);
1082 if (folder->folderName().starts_with(
match)) {
1083 folder->setWriteMeta();
1084 ATH_MSG_INFO(
"Folder " << folder->folderName() <<
" will be written to file metadata" );
1088 return StatusCode::SUCCESS;
1100 if (!folder->joTag().empty()) {
1101 ATH_MSG_DEBUG(
"Adding folder " << folder->folderName() <<
" tag " << folder->joTag() <<
" into TagInfo" );
1102 if (
m_h_tagInfoMgr->addTag(folder->folderName(),folder->joTag()).isFailure())
1103 return StatusCode::FAILURE;
1110 if (!
m_par_globalTag.empty() || !folder->joTag().empty() || folder->noOverride() ||
1111 folder->readMeta()) {
1112 if (
m_h_tagInfoMgr->removeTagFromInput(folder->folderName()).isFailure()) {
1114 << folder->folderName() );
1116 ATH_MSG_INFO(
"Added taginfo remove for " << folder->folderName() );
1120 return StatusCode::SUCCESS;
1128 Gaudi::Guards::AuditorGuard auditor(std::string(
"loadCachesOverhead:")+conn->name(), auditorSvc(),
"preLoadProxy");
1130 ATH_MSG_DEBUG(
"loadCaches: Begin for connection " << conn->name());
1132 if (
m_abort)
return StatusCode::FAILURE;
1134 StatusCode
sc=StatusCode::SUCCESS;
1136 if (folder->conn()!=conn)
continue;
1137 cool::ValidityKey vkey=folder->iovTime(time==
nullptr ?
m_iovTime : *time);
1139 if (vkey>cool::ValidityKeyMax) {
1140 ATH_MSG_WARNING(
"Requested validity key " << vkey <<
" is out of range, reset to 0" );
1143 if (!folder->cacheValid(vkey) && !folder->dropped()) {
1146 Gaudi::Guards::AuditorGuard auditor(std::string(
"FldrCache:")+folder->folderName(), auditorSvc(),
"preLoadProxy");
1148 ATH_MSG_ERROR(
"Cache load (prefetch) failed for folder " << folder->folderName() );
1151 sc=StatusCode::FAILURE;
1160 if (conn->aborted()) {
1162 throw GaudiException(
"Connection " + conn->name() +
" was aborted",
1163 "IOVDbSvc::loadCache()", StatusCode::FAILURE);
1176 const std::string_view tagstub = std::string_view(
m_globalTag).substr(0,7);
1180 (tagstub!=
"COMCOND" && tagstub!=
"CONDBR2")) ||
1181 (
m_par_dbinst==
"OFLP200" && (tagstub!=
"OFLCOND" && tagstub!=
"CMCCOND")) ) {
1183 ATH_MSG_FATAL(
"Likely incorrect conditions DB configuration! " <<
1185 " but global tag begins " << tagstub );
1187 " or set IOVDbSvc.DBInstance=\"\" to disable check" );
1188 return StatusCode::FAILURE;
1191 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_ERROR(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
#define ATH_MSG_INFO(x,...)
#define ATH_MSG_FATAL(x,...)
Header for CoralCrestManager class.
const EventIDBase * EventIDFromStore(IProxyDict *store)
Retrieve the EventID from EventContext saved in store STORE.
uint32_t CLID
The Class ID type.
Athena service for Interval Of Validity database.
Incident sent after a store is cleared.
static const Attributes_t empty
Define macros for attributes used to control the static checker.
EventIDBase::number_type conditionsRun() const
static std::map< std::string, std::string > getGlobalTagMap(const std::string &crest_path, const std::string &globaltag)
virtual StatusCode finalize() override
Service finalize.
BooleanProperty m_par_managePoolConnections
StatusCode loadCaches(IOVDbConn *conn, const IOVTime *time=nullptr)
PublicToolHandle< IIOVDbMetaDataTool > m_h_metaDataTool
ServiceHandle< StoreGateSvc > m_h_sgSvc
Gaudi::Property< std::vector< std::string > > m_par_overrideTags
virtual void handle(const Incident &incident) override
Incident service handle for EndEvent.
Gaudi::Property< std::vector< std::string > > m_par_folders
virtual cool::IDatabasePtr getDatabase(bool readOnly) override
Access to COOL database for a given folder.
BooleanProperty m_crestCoolToFile
virtual bool dropObject(const std::string &key, const bool resetCache=false) override
IAddressProvider::tadList tadList
BooleanProperty m_outputToFile
BooleanProperty m_par_checklock
IntegerProperty m_par_forceLumiblockNumber
BooleanProperty m_par_manageConnections
virtual StatusCode preLoadAddresses(StoreID::type storeID, tadList &list) override
Get all addresses that the provider wants to preload in SG maps.
StatusCode io_finalize() override final
ServiceHandle< IAddressCreator > m_h_persSvc
std::map< std::string, std::string > m_cresttagmap
IOVDbFolder::source_t m_source
StatusCode checkConfigConsistency() const
IntegerProperty m_par_maxNumPoolFiles
UnsignedIntegerProperty m_par_cacheAlign
StatusCode io_reinit() override final
IntegerProperty m_par_forceTimestamp
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_cacheRun
virtual StatusCode initialize() override
Service init.
StatusCode checkEventSel()
virtual void postConditionsLoad() override
May be called once conditions are loaded to let IOVDbSvc release resources.
BooleanProperty m_par_onlineMode
ServiceHandle< StoreGateSvc > m_h_metaDataStore
ServiceHandle< IClassIDSvc > m_h_clidSvc
ServiceHandle< ITagInfoMgr > m_h_tagInfoMgr
Gaudi::Property< std::string > m_par_dbinst
virtual StatusCode signalBeginRun(const IOVTime &beginRunTime, const EventContext &ctx) override
Set time for begin run.
ServiceHandle< IPoolSvc > m_h_poolSvc
bool m_poolPayloadRequested
StatusCode setupFolders()
ServiceHandle< StoreGateSvc > m_h_detStore
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.
Gaudi::Property< std::string > m_par_defaultConnection
virtual StatusCode loadAddresses(StoreID::type storeID, tadList &list) override
Get all new addresses from Provider for this Event.
virtual StatusCode updateAddress(StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
Update a transient Address.
virtual std::vector< std::string > getKeyList() override
virtual void signalEndProxyPreload() override
Signal that callback has been fired.
IntegerProperty m_par_cacheTime
Gaudi::Property< std::vector< std::string > > m_par_foldersToWrite
Gaudi::Property< std::string > m_par_globalTag
IntegerProperty m_par_forceRunNumber
virtual StatusCode processTagInfo() override
Process TagInfo.
StringProperty m_par_source
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.
FloatProperty m_par_timeStampSlop
cool::ValidityKey m_iovslop
std::vector< std::unique_ptr< IOVDbConn > > m_connections
std::map< std::string, std::unique_ptr< IOVDbFolder > > FolderMap
ServiceHandle< IIOVSvc > m_h_IOVSvc
Basic time unit for IOVSvc.
static constexpr uint64_t MAXTIMESTAMP
static constexpr uint32_t MAXRUN
void setRETime(uint64_t time) noexcept
void setRunEvent(uint32_t run, uint32_t event) noexcept
static constexpr uint32_t MINEVENT
static constexpr uint64_t MINTIMESTAMP
void setTimestamp(uint64_t timestamp) noexcept
uint32_t run() const noexcept
static constexpr uint32_t MAXEVENT
static constexpr uint32_t MINRUN
std::vector< NameTagPair > NameTagPairVec
a const_iterator facade to DataHandle.
CLID clID() const
Retrieve string key:
const std::string & name() const
Get the primary (hashed) SG key.
void setAddress(CxxUtils::RefCountedPtr< IOpaqueAddress > pAddress)
Retrieve primary clid.
Incident sent after a store is cleared.
const StoreGateSvc * store() const
Return the store that was cleared.
std::string description
glabal timer - how long have I taken so far?
bool match(std::string s1, std::string s2)
match the individual directories of two strings
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.
Filled by IIOVDbSvc::getKeyInfo.
int run(int argc, char *argv[])