ATLAS Offline Software
Loading...
Searching...
No Matches
IOVDbSvc Class Reference

Athena service for Interval Of Validity database. More...

#include <IOVDbSvc.h>

Inheritance diagram for IOVDbSvc:

Public Types

typedef IAddressProvider::tadList tadList
typedef IAddressProvider::tadListIterator tadListIterator

Public Member Functions

virtual StatusCode initialize () override
 Service init.
StatusCode io_reinit () override final
virtual StatusCode finalize () override
 Service finalize.
StatusCode io_finalize () override final
virtual cool::IDatabasePtr getDatabase (bool readOnly) override
 Access to COOL database for a given folder.
Address use
virtual StatusCode preLoadAddresses (StoreID::type storeID, tadList &list) override
 Get all addresses that the provider wants to preload in SG maps.
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.

IOV range access

enum  IOVDbSvc_state { INITIALIZATION = 0 , BEGIN_RUN , EVENT_LOOP , FINALIZE_ALG }
typedef std::map< std::string, std::unique_ptr< IOVDbFolder > > FolderMap
Gaudi::Property< std::string > m_par_defaultConnection {this,"dbConnection","sqlite://;schema=cooldummy.db;dbname=OFLP200","default DB connection string"}
Gaudi::Property< std::string > m_par_globalTag {this,"GlobalTag","","Global database tag"}
Gaudi::Property< std::string > m_par_dbinst {this,"DBInstance","","Database instance (like OFLP200)"}
Gaudi::Property< std::vector< std::string > > m_par_folders {this,"Folders",{},"List of database folders to preload","OrderedSet<std::string>"}
Gaudi::Property< std::vector< std::string > > m_par_overrideTags {this,"overrideTags",{},"List of xml-modifiers for folders like <prefix>/My/Folder</prefix><tag>MyFolderTag</tag>","OrderedSet<std::string>"}
Gaudi::Property< std::vector< std::string > > m_par_foldersToWrite {this,"FoldersToMetaData",{},"list of folders to write to file meta data","OrderedSet<std::string>"}
BooleanProperty m_par_manageConnections {this,"ManageConnections",true,"flag to trigger the connections management"}
BooleanProperty m_par_managePoolConnections {this,"ManagePoolConnections",true,"flag to manage pool connections"}
IntegerProperty m_par_forceRunNumber {this,"forceRunNumber",0,"globally force run-number (default: no force)"}
IntegerProperty m_par_forceLumiblockNumber {this,"forceLumiblockNumber",0,"globally force LB-number (default: no force)"}
IntegerProperty m_par_forceTimestamp {this,"forceTimeStamp",0,"globally force time-stamp (default: no force)"}
IntegerProperty m_par_maxNumPoolFiles {this,"MaxPoolFilesOpen",5,"max number of pool files open allowed (0 means no limit)"}
FloatProperty m_par_timeStampSlop {this,"TimeStampSlop",0.0,"backdata timestamp IOVs by this many seconds"}
IntegerProperty m_par_cacheRun {this,"CacheRun",0,"force larger numbers of runs to be cached"}
IntegerProperty m_par_cacheTime {this,"CacheTime",0,"force larger timeranges to be cached (seconds)"}
UnsignedIntegerProperty m_par_cacheAlign {this,"CacheAlign",0,"cache alignment - divide cache into N slices and align queries on slice"}
BooleanProperty m_par_onlineMode {this,"OnlineMode",false,"online mode flag to ignore missing channels outside cache range"}
BooleanProperty m_par_checklock {this,"CheckLock",false,"check to ensure global/HVS tags are locked (for production)"}
StringProperty m_par_source {this,"Source","COOL_DATABASE","source of data as a string (default COOL_DATABASE)"}
std::map< std::string, std::string > m_cresttagmap
StringProperty m_par_format {this,"Format",{},"Format of data; default is empty string (default for a given source)"}
BooleanProperty m_outputToFile {this,"OutputToFile",false,"output to file for debugging purposes"}
BooleanProperty m_crestCoolToFile {this,"CrestCoolToFile",false,"output to file crest or cool data in the same format for debugging purposes"}
ServiceHandle< IIOVSvcm_h_IOVSvc {this,"IOVSvc","IOVSvc"}
ServiceHandle< StoreGateSvcm_h_sgSvc {this,"StoreGateSvc","StoreGateSvc"}
ServiceHandle< StoreGateSvcm_h_detStore {this,"DetectorStore","DetectorStore"}
ServiceHandle< StoreGateSvcm_h_metaDataStore {this,"MetaDataStore","StoreGateSvc/MetaDataStore"}
ServiceHandle< IAddressCreator > m_h_persSvc {this,"EventPersistencySvc","EventPersistencySvc"}
ServiceHandle< IClassIDSvc > m_h_clidSvc {this,"ClassIDSvc","ClassIDSvc"}
ServiceHandle< IPoolSvcm_h_poolSvc {this,"PoolSvc","PoolSvc"}
PublicToolHandle< IIOVDbMetaDataToolm_h_metaDataTool {this,"IOVDbMetaDataTool","IOVDbMetaDataTool"}
ServiceHandle< ITagInfoMgrm_h_tagInfoMgr {this,"TagInfoMgr","TagInfoMgr"}
bool m_poolPayloadRequested {false}
int m_poolSvcContext {-1}
IOVDbSvc_state m_state {INITIALIZATION}
IOVDbFolder::source_t m_source =IOVDbFolder::source_t::COOLDB
IOVTime m_iovTime {}
std::string m_globalTag {}
cool::ValidityKey m_iovslop {}
std::vector< std::unique_ptr< IOVDbConn > > m_connections
FolderMap m_foldermap
bool m_abort {false}
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.
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.
virtual StatusCode signalBeginRun (const IOVTime &beginRunTime, const EventContext &ctx) override
 Set time for begin run.
virtual void signalEndProxyPreload () override
 Signal that callback has been fired.
virtual void postConditionsLoad () override
 May be called once conditions are loaded to let IOVDbSvc release resources.
virtual void handle (const Incident &incident) override
 Incident service handle for EndEvent.
virtual StatusCode processTagInfo () override
 Process TagInfo.
virtual std::vector< std::string > getKeyList () override
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.
virtual bool dropObject (const std::string &key, const bool resetCache=false) override
StatusCode checkConfigConsistency () const
StatusCode checkEventSel ()
StatusCode setupFolders ()
StatusCode fillTagInfo ()
StatusCode loadCaches (IOVDbConn *conn, const IOVTime *time=nullptr)
int poolSvcContext ()

Detailed Description

Athena service for Interval Of Validity database.

The IOVDbSvc may be in one of three time states which determines from where the IOV time is coming: initialization - IOV time must be set from the EventSelector begin run - IOV time should have been set with signalBeginRun event loop - IOV time is from EventInfo

Definition at line 66 of file IOVDbSvc.h.

Member Typedef Documentation

◆ FolderMap

typedef std::map<std::string, std::unique_ptr<IOVDbFolder> > IOVDbSvc::FolderMap
private

Definition at line 270 of file IOVDbSvc.h.

◆ tadList

Definition at line 91 of file IOVDbSvc.h.

◆ tadListIterator

Member Enumeration Documentation

◆ IOVDbSvc_state

Enumerator
INITIALIZATION 
BEGIN_RUN 
EVENT_LOOP 
FINALIZE_ALG 

Definition at line 246 of file IOVDbSvc.h.

246 {
247 INITIALIZATION = 0,
248 BEGIN_RUN,
251 };
@ FINALIZE_ALG
Definition IOVDbSvc.h:250
@ BEGIN_RUN
Definition IOVDbSvc.h:248
@ INITIALIZATION
Definition IOVDbSvc.h:247
@ EVENT_LOOP
Definition IOVDbSvc.h:249

Member Function Documentation

◆ checkConfigConsistency()

StatusCode IOVDbSvc::checkConfigConsistency ( ) const
private

Definition at line 1169 of file IOVDbSvc.cxx.

1169 {
1170 // check consistency of global tag and database instance, if set
1171 // catch most common user misconfigurations
1172 // this is only done here as need global tag to be set even if read from file
1173 // @TODO should this not be done during initialize
1174
1175 if (!m_par_dbinst.empty() && !m_globalTag.empty() && m_source!=IOVDbFolder::source_t::CRESTDB) {
1176 const std::string_view tagstub = std::string_view(m_globalTag).substr(0,7);
1177 ATH_MSG_DEBUG( "Checking " << m_par_dbinst << " against " <<tagstub );
1178
1179 if ( ((m_par_dbinst=="COMP200" || m_par_dbinst=="CONDBR2") &&
1180 (tagstub!="COMCOND" && tagstub!="CONDBR2")) ||
1181 (m_par_dbinst=="OFLP200" && (tagstub!="OFLCOND" && tagstub!="CMCCOND")) ) {
1182
1183 ATH_MSG_FATAL( "Likely incorrect conditions DB configuration! " <<
1184 "Attached to database instance " << m_par_dbinst <<
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;
1189 }
1190 }
1191 return StatusCode::SUCCESS;
1192}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
IOVDbFolder::source_t m_source
Definition IOVDbSvc.h:254
Gaudi::Property< std::string > m_par_dbinst
Definition IOVDbSvc.h:178
std::string m_globalTag
Definition IOVDbSvc.h:261

◆ checkEventSel()

StatusCode IOVDbSvc::checkEventSel ( )
private

Definition at line 866 of file IOVDbSvc.cxx.

866 {
867 // check if EventSelector is being used to override run numbers
868 // if so, we can set IOV time already to allow conditons retrieval
869 // in the initialise phase, needed for setting up simulation
870
871 ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc",name());
872 ATH_CHECK( joSvc.retrieve() );
873
874 if (!joSvc->has("EventSelector.OverrideRunNumber")) {
875 // do not return FAILURE if the EventSelector cannot be found, or it has
876 // no override property, can e.g. happen in online running
877 ATH_MSG_DEBUG( "No EventSelector.OverrideRunNumber property found" );
878 return StatusCode::SUCCESS;
879 }
880
881 BooleanProperty overrideRunNumber("OverrideRunNumber",false);
882 ATH_CHECK( overrideRunNumber.fromString(joSvc->get("EventSelector.OverrideRunNumber")) );
883 if (overrideRunNumber) {
884 // if flag is set, extract Run,LB and time
885 ATH_MSG_INFO( "Setting run/LB/time from EventSelector override in initialize" );
886 uint32_t run,lumib;
888 bool allGood=true;
890 ATH_MSG_WARNING( "forceRunNumber property also set" );
891 }
892 IntegerProperty iprop1("RunNumber",0);
893 if (iprop1.fromString(joSvc->get("EventSelector.RunNumber","INVALID"))) {
894 run=iprop1;
895 } else {
896 ATH_MSG_ERROR( "Unable to get RunNumber from EventSelector");
897 allGood=false;
898 }
899 IntegerProperty iprop2("FirstLB",0);
900 if (iprop2.fromString(joSvc->get("EventSelector.FirstLB","INVALID"))) {
901 lumib=iprop2;
902 } else {
903 ATH_MSG_ERROR( "Unable to get FirstLB from EventSelector");
904 allGood=false;
905 }
906 IntegerProperty iprop3("InitialTimeStamp",0);
907 if (iprop3.fromString(joSvc->get("EventSelector.InitialTimeStamp","INVALID"))) {
908 time=iprop3;
909 } else {
910 ATH_MSG_ERROR("Unable to get InitialTimeStamp from EventSelector" );
911 allGood=false;
912 }
913 if (allGood) {
914 m_iovTime.setRunEvent(run,lumib);
915 uint64_t nsTime=time*1000000000LL;
916 m_iovTime.setTimestamp(nsTime);
917 ATH_MSG_INFO( "run/LB/time set to [" << run << "," << lumib << " : " << nsTime << "]" );
918 } else {
919 ATH_MSG_ERROR( "run/LB/Time NOT changed" );
920 }
921 }
922
923 return StatusCode::SUCCESS;
924}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
IntegerProperty m_par_forceLumiblockNumber
Definition IOVDbSvc.h:192
IOVTime m_iovTime
Definition IOVDbSvc.h:258
IntegerProperty m_par_forceRunNumber
Definition IOVDbSvc.h:190
time(flags, cells_name, *args, **kw)
bool allGood
Loop over the SDOs & Digits.
setEventNumber uint32_t
int run(int argc, char *argv[])

◆ dropObject()

bool IOVDbSvc::dropObject ( const std::string & key,
const bool resetCache = false )
overridevirtual

Definition at line 838 of file IOVDbSvc.cxx.

838 {
839 // find the folder corresponding to this object
840 const auto itr = m_foldermap.find(key);
841 if (itr!=m_foldermap.end()) {
842 IOVDbFolder* folder=itr->second.get();
843 CLID clid=folder->clid();
844 SG::DataProxy* proxy=m_h_detStore->proxy(clid,key);
845 if (proxy!=nullptr) {
846 m_h_detStore->clearProxyPayload(proxy);
847 ATH_MSG_DEBUG("Dropped payload for key " << key );
848 folder->setDropped(true);
849 if (resetCache) {
850 folder->resetCache();
851 ATH_MSG_DEBUG( "Cache reset done for folder " << folder->folderName() );
852 }
853 return true;
854 } else {
855 return false;
856 }
857 } else {
858 return false;
859 }
860}
uint32_t CLID
The Class ID type.
ServiceHandle< StoreGateSvc > m_h_detStore
Definition IOVDbSvc.h:223
FolderMap m_foldermap
Definition IOVDbSvc.h:271

◆ fillTagInfo()

StatusCode IOVDbSvc::fillTagInfo ( )
private

Definition at line 1092 of file IOVDbSvc.cxx.

1092 {
1093 if (!m_par_globalTag.empty()) {
1094 ATH_MSG_DEBUG( "Adding GlobalTag " << m_par_globalTag << " into TagInfo" );
1095 ATH_CHECK( m_h_tagInfoMgr->addTag("IOVDbGlobalTag",m_par_globalTag) );
1096 }
1097 // add all explicit tags specified in folders
1098 // can be from Folders or tagOverrides properties
1099 for (const auto & [name, folder] : m_foldermap) {
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;
1104 }
1105 // check to see if any input TagInfo folder overrides should be removed
1106 // this anticipates the decisions which will be made in processTagInfo
1107 // Here we do not have access to the TagInfo object, but can put remove
1108 // requests in for all folders if the global tag is set, or if there is
1109 // an explict joboption tag, nooverride spec, or data comes from metadata
1110 if (!m_par_globalTag.empty() || !folder->joTag().empty() || folder->noOverride() ||
1111 folder->readMeta()) {
1112 if (m_h_tagInfoMgr->removeTagFromInput(folder->folderName()).isFailure()) {
1113 ATH_MSG_WARNING( "Could not add TagInfo remove request for "
1114 << folder->folderName() );
1115 } else {
1116 ATH_MSG_INFO( "Added taginfo remove for " << folder->folderName() );
1117 }
1118 }
1119 }
1120 return StatusCode::SUCCESS;
1121}
ServiceHandle< ITagInfoMgr > m_h_tagInfoMgr
Definition IOVDbSvc.h:229
Gaudi::Property< std::string > m_par_globalTag
Definition IOVDbSvc.h:176

◆ finalize()

StatusCode IOVDbSvc::finalize ( )
overridevirtual

Service finalize.

Definition at line 246 of file IOVDbSvc.cxx.

246 {
247 // summarise and delete folders, adding total read from COOL
248 unsigned long long nread = 0;
249 float readtime = 0;
250
251 // accumulate a map of readtime by connection
252 std::map<IOVDbConn*, float> ctmap;
253 for (const auto & [name, folder] : m_foldermap) {
254 folder->summary();
255 nread += folder->bytesRead();
256 readtime += folder->readTime();
257 const auto& [citr, inserted] = ctmap.try_emplace(folder->conn(), 0);
258 citr->second += folder->readTime();
259 }
260 m_foldermap.clear();
261 ATH_MSG_INFO( "Total payload read from IOVDb: " << nread << " bytes in (( " << std::fixed << std::setw(9) << std::setprecision(2) <<
262 readtime << " ))s" );
263
264 // close and delete connections, printing time in each one
265 for (const auto & conn : m_connections) {
266 float fread = 0;
267 const auto citr = ctmap.find(conn.get());
268 if (citr != ctmap.end()) fread = citr->second;
269 conn->setInactive();
270 conn->summary(fread);
271 }
272 m_connections.clear();
273
274 return StatusCode::SUCCESS;
275}
std::vector< std::unique_ptr< IOVDbConn > > m_connections
Definition IOVDbSvc.h:267

◆ getDatabase()

cool::IDatabasePtr IOVDbSvc::getDatabase ( bool readOnly)
overridevirtual

Access to COOL database for a given folder.

Definition at line 278 of file IOVDbSvc.cxx.

278 {
279 // get default database connection
280 cool::IDatabasePtr dbconn;
281 if (m_par_defaultConnection.empty() || m_connections.empty()) {
282 ATH_MSG_INFO( "No default COOL database connection is available");
283 dbconn.reset();
284 } else {
285 Athena::DBLock dblock;
286 if (m_connections[0]->isReadOnly()!=readOnly) {
287 ATH_MSG_INFO("Changing state of default connection to readonly=" << readOnly );
288 m_connections[0]->setReadOnly(readOnly);
289 }
290 dbconn = std::make_shared<LockedDatabase> (m_connections[0]->getCoolDb(),
291 dblock);
292 }
293 return dbconn;
294}
Gaudi::Property< std::string > m_par_defaultConnection
Definition IOVDbSvc.h:174

◆ getKeyInfo()

bool IOVDbSvc::getKeyInfo ( const std::string & key,
IIOVDbSvc::KeyInfo & info )
overridevirtual

Return information about SG key return false if this key is not known to IOVDbSvc.

Definition at line 817 of file IOVDbSvc.cxx.

817 {
818 // return information about given SG key
819 // first attempt to find the folder object for this key
820 const auto itr = m_foldermap.find(key);
821 if (itr!=m_foldermap.end()) {
822 const IOVDbFolder* f = itr->second.get();
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();
830 return true;
831 } else {
832 info.retrieved = false;
833 return false;
834 }
835}

◆ getKeyList()

std::vector< std::string > IOVDbSvc::getKeyList ( )
overridevirtual

Definition at line 810 of file IOVDbSvc.cxx.

810 {
811 // return a list of all the StoreGate keys being managed by IOVDbSvc
812 auto keys = std::views::keys(m_foldermap);
813 return {keys.begin(), keys.end()};
814}

◆ getRange()

StatusCode IOVDbSvc::getRange ( const CLID & clid,
const std::string & dbKey,
const IOVTime & time,
IOVRange & range,
std::string & tag,
std::unique_ptr< IOpaqueAddress > & ioa )
overridevirtual

Get range for a particular data object identified by its clid and key and a requested IOVTime.

Definition at line 549 of file IOVDbSvc.cxx.

554 {
555
556 Athena::DBLock dblock;
557
558 ATH_MSG_DEBUG( "getRange clid: " << clid << " key: \""<< dbKey << "\" t: " << time );
559
560 const auto fitr = m_foldermap.find(dbKey);
561 if (fitr==m_foldermap.end()) {
562 ATH_MSG_VERBOSE("getRange cannot find description for dbKey " << dbKey );
563 return StatusCode::FAILURE;
564 }
565 const auto& folder = fitr->second;
566 if (folder->clid()!=clid) {
567 ATH_MSG_VERBOSE( "supplied CLID for " << dbKey << " is "
568 << clid
569 << " but expecting " << folder->clid() );
570
571 return StatusCode::FAILURE;
572 }
573
574 tag = folder->key();
575
576 // obtain the validity key for this folder (includes overrides)
577 cool::ValidityKey vkey = folder->iovTime(time);
578 if (folder->source() == IOVDbFolder::source_t::CRESTDB) {
579 if (!folder->readMeta() && !folder->cacheValid((vkey))){
580 fitr->second->loadCache(vkey, m_par_cacheAlign,m_globalTag,m_par_onlineMode);
581 }
582 } else {
583 if (!folder->readMeta() && !folder->cacheValid(vkey)) {
584 // mark this folder as not-dropped so cache-read will succeed
585 folder->setDropped(false);
586 // reload cache for this folder (and all others sharing this DB
587 // connection)
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 "
592 "same connection.");
593 return StatusCode::FAILURE;
594 }
595 }
596 }
597 // data should now be in cache
598 address.reset();
599 // setup address and range
600 {
601 Gaudi::Guards::AuditorGuard auditor(std::string("FldrSetup:")+(dbKey.empty() ? "anonymous" : dbKey),
602 auditorSvc(), "preLoadProxy");
603 if (!folder->getAddress(vkey,&(*m_h_persSvc),poolSvcContext(),address,
604 range,m_poolPayloadRequested)) {
605 ATH_MSG_ERROR("getAddress failed for folder " <<folder->folderName() );
606 return StatusCode::FAILURE;
607 }
608 }
609
610 // Special handling for extensible folders:
611 if (folder->extensible()) {
612 // Set the end time to just past the current event or lumiblock.
613 IOVTime extStop = range.stop();
614 if (folder->timeStamp()) {
615 extStop.setTimestamp (time.timestamp() + 1);
616 }
617 else {
618 extStop.setRETime (time.re_time() + 1);
619 }
620 range = IOVRange (range.start(), extStop);
621 }
622
623 // Special handling for IOV override: set the infinite validity range
624 if (folder->iovOverridden()) {
625 if (folder->timeStamp()) {
626 range = IOVRange ( IOVTime(IOVTime::MINTIMESTAMP),
627 IOVTime(IOVTime::MAXTIMESTAMP) );
628 }
629 else {
630 range = IOVRange ( IOVTime(IOVTime::MINRUN,IOVTime::MINEVENT),
632 }
633 }
634
635 return StatusCode::SUCCESS;
636}
#define ATH_MSG_VERBOSE(x)
StatusCode loadCaches(IOVDbConn *conn, const IOVTime *time=nullptr)
ServiceHandle< IAddressCreator > m_h_persSvc
Definition IOVDbSvc.h:225
UnsignedIntegerProperty m_par_cacheAlign
Definition IOVDbSvc.h:205
BooleanProperty m_par_onlineMode
Definition IOVDbSvc.h:207
int poolSvcContext()
Definition IOVDbSvc.cxx:123
bool m_poolPayloadRequested
Definition IOVDbSvc.h:234
static constexpr uint64_t MAXTIMESTAMP
Definition IOVTime.h:58
static constexpr uint32_t MAXRUN
Definition IOVTime.h:48
void setRETime(uint64_t time) noexcept
Definition IOVTime.cxx:84
static constexpr uint32_t MINEVENT
Definition IOVTime.h:50
static constexpr uint64_t MINTIMESTAMP
Definition IOVTime.h:56
void setTimestamp(uint64_t timestamp) noexcept
Definition IOVTime.cxx:72
static constexpr uint32_t MAXEVENT
Definition IOVTime.h:51
static constexpr uint32_t MINRUN
Definition IOVTime.h:44

◆ handle()

void IOVDbSvc::handle ( const Incident & incident)
overridevirtual

Incident service handle for EndEvent.

Definition at line 747 of file IOVDbSvc.cxx.

747 {
748 // Handle incidents:
749 // BeginEvent to set IOVDbSvc state to EVENT_LOOP
750 // StoreCleared/EndProcessing to close any open POOL files
751 ATH_MSG_VERBOSE( "entering handle(), incident type " << inc.type() << " from " << inc.source() );
752 if (inc.type()=="BeginEvent") {
754 } else {
755 Athena::DBLock dblock;
756
757 const StoreClearedIncident* sinc = dynamic_cast<const StoreClearedIncident*>(&inc);
758 if( (inc.type()=="StoreCleared" && sinc!=nullptr && sinc->store()==&*m_h_sgSvc
760 or inc.type()==IncidentType::EndProcessing )
761 {
764 }
765 }
766}
ServiceHandle< StoreGateSvc > m_h_sgSvc
Definition IOVDbSvc.h:222
virtual void postConditionsLoad() override
May be called once conditions are loaded to let IOVDbSvc release resources.
Definition IOVDbSvc.cxx:721
IOVDbSvc_state m_state
Definition IOVDbSvc.h:252
const StoreGateSvc * store() const
Return the store that was cleared.

◆ initialize()

StatusCode IOVDbSvc::initialize ( )
overridevirtual

Service init.

Definition at line 143 of file IOVDbSvc.cxx.

143 {
144 // subscribe to events
145 ServiceHandle<IIncidentSvc> incSvc("IncidentSvc",name());
146 ATH_CHECK( incSvc.retrieve() );
147 const long int pri = 100;
148 incSvc->addListener( this, IncidentType::BeginEvent, pri );
149 incSvc->addListener( this, "StoreCleared", pri ); // for SP Athena
150 incSvc->addListener( this, IncidentType::EndProcessing, pri ); // for MT Athena
151
152 // Register this service for 'I/O' events
153 ServiceHandle<IIoComponentMgr> iomgr("IoComponentMgr", name());
154 ATH_CHECK( iomgr.retrieve() );
155 ATH_CHECK( iomgr->io_register(this) );
156
157 // print warnings/info depending on state of job options
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" );
162 if (m_par_maxNumPoolFiles > 0)
163 ATH_MSG_INFO( "Only " << m_par_maxNumPoolFiles.value() << " POOL conditions files will be open at once" );
165 ATH_MSG_WARNING( "Global run/LB number forced to be [" <<
166 m_par_forceRunNumber.value() << "," << m_par_forceLumiblockNumber.value() << "]" );
167 if (m_par_forceTimestamp > 0)
168 ATH_MSG_WARNING( "Global timestamp forced to be " << m_par_forceTimestamp.value() );
169 if (m_par_cacheRun > 0)
170 ATH_MSG_INFO( "Run-LB data will be cached in groups of " << m_par_cacheRun.value() << " runs" );
171 if (m_par_cacheTime > 0)
172 ATH_MSG_INFO( "Timestamp data will be cached in groups of " << m_par_cacheTime.value() << " seconds" );
173 if (m_par_cacheAlign > 0)
174 ATH_MSG_INFO( "Cache alignment will be done in " << m_par_cacheAlign.value() << " slices" );
175 if (m_par_onlineMode)
176 ATH_MSG_INFO( "Online mode ignoring potential missing channels outside cache" );
177 if (m_par_checklock)
178 ATH_MSG_INFO( "Tags will be required to be locked");
179
180 if (m_par_source == "COOL_DATABASE") {
182 ATH_MSG_INFO("IOVDbSvc configured to use a COOL database");
183 } else if (m_par_source == "CREST") {
185 ATH_MSG_INFO("IOVDbSvc configured to use a CREST database");
186 }
187 else {
188 ATH_MSG_ERROR("Unexpected property value " << m_par_source << ", allowed values are \"COOL_DATABASE\" or \"CREST\"" );
189 return StatusCode::FAILURE;
190 }
191
192 // make sure iovTime is undefined
193 m_iovTime.reset();
194
195 // extract information from EventSelector for run/LB/time overrides
197
198 // initialise default connection
199 if (!m_par_defaultConnection.empty()) {
200 // default connection is readonly if no : in name (i.e. logical conn)
201 bool readonly=(m_par_defaultConnection.find(':')==std::string::npos);
202 m_connections.push_back(std::make_unique<IOVDbConn>(m_par_defaultConnection,readonly,msg()));
203 }
204
205 // set time of timestampslop in nanoseconds
206 m_iovslop=static_cast<cool::ValidityKey>(m_par_timeStampSlop*1.E9);
207
208 // check for global tag in jobopt, which will override anything in input file
209 if (!m_par_globalTag.empty()) {
211 ATH_MSG_INFO( "Global tag: " << m_par_globalTag.value() << " set from joboptions" );
212 }
213
214 // setup folders and process tag overrides
216
217 // Set state to initialize
219 ATH_MSG_INFO( "Initialised with " << m_connections.size() <<
220 " connections and " << m_foldermap.size() << " folders" );
221
222 if (m_outputToFile) ATH_MSG_INFO("Db dump to file activated");
223 if (m_crestCoolToFile) ATH_MSG_INFO("Crest or Cool dump to file activated");
224
225 ATH_MSG_INFO( "Service IOVDbSvc initialised successfully" );
226
228 return StatusCode::SUCCESS;
229}
BooleanProperty m_par_managePoolConnections
Definition IOVDbSvc.h:188
BooleanProperty m_crestCoolToFile
Definition IOVDbSvc.h:218
BooleanProperty m_outputToFile
Definition IOVDbSvc.h:217
BooleanProperty m_par_checklock
Definition IOVDbSvc.h:209
BooleanProperty m_par_manageConnections
Definition IOVDbSvc.h:186
StatusCode checkConfigConsistency() const
IntegerProperty m_par_maxNumPoolFiles
Definition IOVDbSvc.h:196
IntegerProperty m_par_forceTimestamp
Definition IOVDbSvc.h:194
IntegerProperty m_par_cacheRun
Definition IOVDbSvc.h:200
StatusCode checkEventSel()
Definition IOVDbSvc.cxx:866
StatusCode setupFolders()
Definition IOVDbSvc.cxx:927
IntegerProperty m_par_cacheTime
Definition IOVDbSvc.h:202
StringProperty m_par_source
Definition IOVDbSvc.h:211
FloatProperty m_par_timeStampSlop
Definition IOVDbSvc.h:198
cool::ValidityKey m_iovslop
Definition IOVDbSvc.h:264
MsgStream & msg
Definition testRead.cxx:32

◆ io_finalize()

StatusCode IOVDbSvc::io_finalize ( )
finaloverride

Definition at line 240 of file IOVDbSvc.cxx.

240 {
241 ATH_MSG_DEBUG("I/O finalization...");
242 return StatusCode::SUCCESS;
243}

◆ io_reinit()

StatusCode IOVDbSvc::io_reinit ( )
finaloverride

Definition at line 232 of file IOVDbSvc.cxx.

232 {
233 ATH_MSG_DEBUG("I/O reinitialization...");
234 // PoolSvc clears all connections on IO_reinit - forget the stored contextId
235 m_poolSvcContext = -1;
236 return StatusCode::SUCCESS;
237}
int m_poolSvcContext
Definition IOVDbSvc.h:238

◆ loadAddresses()

StatusCode IOVDbSvc::loadAddresses ( StoreID::type storeID,
tadList & list )
overridevirtual

Get all new addresses from Provider for this Event.

Definition at line 422 of file IOVDbSvc.cxx.

422 {
423 // this method does nothing
424 return StatusCode::SUCCESS;
425}

◆ loadCaches()

StatusCode IOVDbSvc::loadCaches ( IOVDbConn * conn,
const IOVTime * time = nullptr )
private

Definition at line 1124 of file IOVDbSvc.cxx.

1124 {
1125 // load the caches for all folders using the given connection
1126 // so connection use is optimised
1127
1128 Gaudi::Guards::AuditorGuard auditor(std::string("loadCachesOverhead:")+conn->name(), auditorSvc(), "preLoadProxy");
1129
1130 ATH_MSG_DEBUG( "loadCaches: Begin for connection " << conn->name());
1131 // if global abort already set, load nothing
1132 if (m_abort) return StatusCode::FAILURE;
1133 bool access=false;
1134 StatusCode sc=StatusCode::SUCCESS;
1135 for (const auto & [name, folder] : m_foldermap) {
1136 if (folder->conn()!=conn) continue;
1137 cool::ValidityKey vkey=folder->iovTime(time==nullptr ? m_iovTime : *time);
1138 // protect against out of range times (timestamp -1 happened in FDR2)
1139 if (vkey>cool::ValidityKeyMax) {
1140 ATH_MSG_WARNING( "Requested validity key " << vkey << " is out of range, reset to 0" );
1141 vkey=0;
1142 }
1143 if (!folder->cacheValid(vkey) && !folder->dropped()) {
1144 access=true;
1145 {
1146 Gaudi::Guards::AuditorGuard auditor(std::string("FldrCache:")+folder->folderName(), auditorSvc(), "preLoadProxy");
1147 if (!folder->loadCache(vkey,m_par_cacheAlign,m_globalTag,m_par_onlineMode)) {
1148 ATH_MSG_ERROR( "Cache load (prefetch) failed for folder " << folder->folderName() );
1149 // remember the failure, but also load other folders on this connection
1150 // while it is open
1151 sc=StatusCode::FAILURE;
1152 }
1153 }
1154 }
1155 }
1156 // disconnect from database if we connected
1157 if (access && m_par_manageConnections) conn->setInactive();
1158 // if connection aborted, set overall abort so we do not waste time trying
1159 // to read data from other schema
1160 if (conn->aborted()) {
1161 m_abort=true;
1162 throw GaudiException("Connection " + conn->name() + " was aborted",
1163 "IOVDbSvc::loadCache()", StatusCode::FAILURE);
1164 }
1165 return sc;
1166}
static Double_t sc
bool m_abort
Definition IOVDbSvc.h:273
::StatusCode StatusCode
StatusCode definition for legacy code.
access(filename, mode)

◆ poolSvcContext()

int IOVDbSvc::poolSvcContext ( )
private

Definition at line 123 of file IOVDbSvc.cxx.

124{
125 if( m_poolSvcContext < 0 ) {
126 // Get context for POOL conditions files, and created an initial connection
128 m_poolSvcContext=m_h_poolSvc->getInputContext("Conditions", m_par_maxNumPoolFiles);
129 } else {
130 m_poolSvcContext=m_h_poolSvc->getInputContext("Conditions");
131 }
132 if( m_h_poolSvc->connect(Io::READ, m_poolSvcContext).isSuccess() ) {
133 ATH_MSG_INFO( "Opened read transaction for POOL PersistencySvc");
134 } else {
135 // We only emit info for failure to connect (for the moment? RDS 01/2008)
136 ATH_MSG_INFO( "Cannot connect to POOL PersistencySvc" );
137 }
138 }
139 return m_poolSvcContext;
140}
ServiceHandle< IPoolSvc > m_h_poolSvc
Definition IOVDbSvc.h:227

◆ postConditionsLoad()

void IOVDbSvc::postConditionsLoad ( )
overridevirtual

May be called once conditions are loaded to let IOVDbSvc release resources.

Definition at line 721 of file IOVDbSvc.cxx.

721 {
722 // Close any open POOL files after loding Conditions
723 ATH_MSG_DEBUG( "postConditionsLoad: m_par_managePoolConnections=" << m_par_managePoolConnections
724 << " m_poolPayloadRequested=" << m_poolPayloadRequested );
725
727 // reset POOL connection to close all open conditions POOL files
730 if( m_poolSvcContext ) {
731 if (m_h_poolSvc->disconnect(m_poolSvcContext).isSuccess()) {
732 ATH_MSG_DEBUG( "Successfully closed input POOL connections");
733 } else {
734 ATH_MSG_WARNING( "Unable to close input POOL connections" );
735 }
736 // reopen transaction
737 if (m_h_poolSvc->connect(Io::READ, m_poolSvcContext).isSuccess()) {
738 ATH_MSG_DEBUG("Reopend read transaction for POOL conditions input files" );
739 } else {
740 ATH_MSG_WARNING("Cannot reopen read transaction for POOL conditions input files");
741 }
742 }
743 }
744}

◆ preLoadAddresses()

StatusCode IOVDbSvc::preLoadAddresses ( StoreID::type storeID,
tadList & list )
overridevirtual

Get all addresses that the provider wants to preload in SG maps.

Definition at line 297 of file IOVDbSvc.cxx.

297 {
298 // Read information for folders and setup TADs
299 if (storeID!=StoreID::DETECTOR_STORE) return StatusCode::SUCCESS;
300 // Preloading of addresses should be done ONLY for detector store
301 ATH_MSG_DEBUG( "preLoadAddress: storeID -> " << storeID );
302
303 Athena::DBLock dblock;
304
305 // check File Level Meta Data of input, see if any requested folders are available there
306 SG::ConstIterator<IOVMetaDataContainer> cont;
307 SG::ConstIterator<IOVMetaDataContainer> contEnd;
308 if (m_h_metaDataStore->retrieve(cont,contEnd).isSuccess()) {
309 unsigned int ncontainers=0;
310 unsigned int nused=0;
311 for (;cont!=contEnd; ++cont) {
312 ++ncontainers;
313 const std::string& fname=cont->folderName();
314 // check if this folder is in list requested by IOVDbSvc
315 for (const auto & [name, folder] : m_foldermap) {
316 // take data from FLMD only if tag override is NOT set
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() );
321 ++nused;
322 break;
323 }
324 }
325 }
326 ATH_MSG_INFO( "Found " << ncontainers << " metadata containers in input file, " << nused << " will be used");
327 } else {
328 ATH_MSG_DEBUG( "Could not retrieve IOVMetaDataContainer objects from MetaDataStore" );
329 }
330
331 // Remove folders which should only be read from file meta data, but
332 // were not found in the MetaDataStore
333
334 // Note: we cannot iterate and perform erase within the iteration
335 // because the iterator becomes invalid. So first collect the keys
336 // to erase in a first pass and then erase them.
337 std::vector<std::string> keysToDelete;
338 for (const auto & [name, folder] : m_foldermap) {
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);
343 }
344 }
345
346 for (auto & thisKey : keysToDelete) {
347 const auto fitr = m_foldermap.find(thisKey);
348 if (fitr != m_foldermap.end()) {
349 fitr->second->conn()->decUsage();
350 m_foldermap.erase(fitr);
351 } else {
352 ATH_MSG_ERROR( "preLoadAddresses: Could not find folder " << thisKey << " for removal" );
353 }
354 }
355
356
357 // loop over all folders, grouped by connection
358 // do metadata folders on first connection (default connection)
359 bool doMeta=true;
360 // do not close COOL connection until next one has been opened, this enables
361 // connection sharing in CORAL, so all COOL connections will use the same
362 // CORAL one (althugh they will each be given a separate session)
363 IOVDbConn* oldconn=nullptr;
364 for (const auto & pThisConnection : m_connections) {
365 if (pThisConnection->nFolders()>0 || doMeta) {
366 // loop over all folders using this connection
367 for (const auto & [name, folder] : m_foldermap) {
368 if (folder->conn()==pThisConnection.get() || (folder->conn()==nullptr && doMeta)) {
369 std::unique_ptr<SG::TransientAddress> tad =
371 if (oldconn!=pThisConnection.get()) {
372 // close old connection if appropriate
373 if (m_par_manageConnections && oldconn!=nullptr) oldconn->setInactive();
374 oldconn=pThisConnection.get();
375 }
376 if (tad==nullptr) {
377 ATH_MSG_ERROR( "preLoadFolder failed for folder " << folder->folderName() );
378 return StatusCode::FAILURE;
379 }
380 // for write-metadata folder, request data preload
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;
385 }
386 } else {
387 // for other folders, just preload TAD (not data)
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;
391 }
392 }
393 // Add TAD to Storegate
394 tlist.push_back(tad.release());
395 // check for IOV override
397 }
398 }
399 }
400 doMeta=false;
401 }
402 // close last connection
403 if (oldconn!=nullptr and m_par_manageConnections) oldconn->setInactive();
404
405 // some folder keys may have changed during preloadFolder due to use of
406 // <key> specification in folder description string
407 // build a new foldermap with the updated keys
408 FolderMap newmap;
409 for (auto & [name, folder] : m_foldermap) {
410 newmap[folder->key()]=std::move(folder);
411 }
412 m_foldermap=std::move(newmap);
413
414 // fill global and explicit folder tags into TagInfo
415 if (fillTagInfo().isFailure())
416 ATH_MSG_ERROR("Could not fill TagInfo object from preLoadAddresses" );
417
418 return StatusCode::SUCCESS;
419}
void setInactive()
ServiceHandle< StoreGateSvc > m_h_metaDataStore
Definition IOVDbSvc.h:224
StatusCode fillTagInfo()
std::map< std::string, std::unique_ptr< IOVDbFolder > > FolderMap
Definition IOVDbSvc.h:270
ServiceHandle< IIOVSvc > m_h_IOVSvc
Definition IOVDbSvc.h:221
@ DETECTOR_STORE
Definition StoreID.h:27

◆ processTagInfo()

StatusCode IOVDbSvc::processTagInfo ( )
overridevirtual

Process TagInfo.

Definition at line 769 of file IOVDbSvc.cxx.

769 {
770 // Processing of taginfo
771 // Set GlobalTag and any folder-specific overrides if given
772
773 // dump out contents of TagInfo
774 ATH_MSG_DEBUG( "Tags from input TagInfo:");
775 if( msg().level()>=MSG::DEBUG ) m_h_tagInfoMgr->printTags(msg());
776
777 // check IOVDbSvc GlobalTag, if not already set
778 if (m_globalTag.empty()) {
779 m_globalTag = m_h_tagInfoMgr->findTag("IOVDbGlobalTag");
780 if (!m_globalTag.empty()) ATH_MSG_INFO( "Global tag: " << m_globalTag<< " set from input file" );
782 }
783
784 // now check for tag overrides for specific folders
785 const ITagInfoMgr::NameTagPairVec& nameTagPairs = m_h_tagInfoMgr->getInputTags();
786 for (const auto & [theTagName, theTag]: nameTagPairs) {
787 // assume tags relating to conditions folders start with /
788 if (not theTagName.starts_with('/')) continue;
789 // check for folder(s) with this name in (key, ptr) pair
790 for (const auto & [name, folder]: m_foldermap) {
791 const std::string& ifname=folder->folderName();
792 if (ifname!=theTagName) continue;
793 // use an override from TagInfo only if there is not an explicit jo tag,
794 // and folder meta-data is not used, and there is no <noover/> spec,
795 // and no global tag set in job options
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);
802 }
803 }
804 }
805 return StatusCode::SUCCESS;
806}
static const Attributes_t empty
std::vector< NameTagPair > NameTagPairVec
Definition ITagInfoMgr.h:66

◆ setRange()

StatusCode IOVDbSvc::setRange ( const CLID & clid,
const std::string & dbKey,
const IOVRange & range,
const std::string & tag )
overridevirtual

Set range for a particular data object.

Definition at line 639 of file IOVDbSvc.cxx.

642 {
643 // this method does nothing
644 return StatusCode::SUCCESS;
645}

◆ setupFolders()

StatusCode IOVDbSvc::setupFolders ( )
private

Definition at line 927 of file IOVDbSvc.cxx.

927 {
928 // read the Folders joboptions and setup the folder list
929 // no wildcards are allowed
930
931 // getting the pairs: folder name - CREST tag name:
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);
936 m_cresttagmap.clear();
938 if (m_cresttagmap.empty()) {
939 ATH_MSG_FATAL("Got empty tag-map. GlobalTag "<< m_par_globalTag.value() << " does not exist.");
940 return StatusCode::FAILURE;
941 }
942 }
943
944 //1. Loop through folders
945 std::list<IOVDbParser> allFolderdata;
946 for (const auto & thisFolder : m_par_folders) {
947 ATH_MSG_DEBUG( "Setup folder " << thisFolder );
948 IOVDbParser folderdata(thisFolder,msg());
949 if (!folderdata.isValid()) {
950 ATH_MSG_FATAL("setupFolders: Folder setup string is invalid: " <<thisFolder);
951 return StatusCode::FAILURE;
952 }
953
954 allFolderdata.push_back(std::move(folderdata));
955 }
956
957 //2. Loop through overwrites:
958 // syntax for entries is <prefix>folderpath</prefix> <tag>value</tag>
959 // folderpath matches from left of folderName
960 // but if partial match, next character must be / so override for /Fred/Ji
961 // matches /Fred/Ji/A and /Fred/Ji but not /Fred/Jim
962
963 for (const auto & thisOverrideTag : m_par_overrideTags) {
964 IOVDbParser keys(thisOverrideTag,msg());
965 if (not keys.isValid()){
966 ATH_MSG_ERROR("An override tag was invalid: " << thisOverrideTag);
967 return StatusCode::FAILURE;
968 }
969 std::string prefix;
970 if (!keys.getKey("prefix","",prefix)) { // || !keys.getKey("tag","",tag)) {
971 ATH_MSG_ERROR( "Problem in overrideTag specification " <<thisOverrideTag );
972 return StatusCode::FAILURE;
973 }
974
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()]=='/')) {
979 //Match!
980 folderdata.applyOverrides(keys,msg());
981 }
982 }
983 }
984
985 //3. Remove any duplicates:
986 std::list<IOVDbParser>::iterator it1=allFolderdata.begin();
987 std::list<IOVDbParser>::iterator it_e=allFolderdata.end();
988 for (;it1!=it_e;++it1) {
989 const IOVDbParser& folder1=*it1;
990 std::list<IOVDbParser>::iterator it2=it1;
991 ++it2;
992 while(it2!=it_e) {
993 const IOVDbParser& folder2=*it2;
994 if (folder1==folder2) {
995 it2=allFolderdata.erase(it2); //FIXME: Smarter distinction/reporting about same folder but different keys.
996 ATH_MSG_DEBUG( "Removing duplicate folder " << folder1.folderName());
997 } else {
998 ++it2;
999 //Catch suspicous cases:
1000 if (folder1.folderName()==folder2.folderName()) {
1001 ATH_MSG_WARNING( "Folder name appears twice: " << folder1.folderName() );
1002 ATH_MSG_WARNING( folder1 << " vs " << folder2 );
1003 }
1004 }
1005 }//end inner loop
1006 }//end outer loop
1007
1008 //4.Set up folder map with cleaned folder list
1009
1010 bool crestError=false;
1011 for (const auto& folderdata : allFolderdata) {
1012 // find the connection specification first
1013 // default is to use the 'default' connection
1014 IOVDbConn* conn=nullptr;
1015 std::string connstr;
1016 if (folderdata.getKey("db","",connstr)) {
1017 // an explicit database name is specified
1018 // check if it is already present in the existing connections
1019 for (const auto & pThisConnection : m_connections) {
1020 if (pThisConnection->name()==connstr) {
1021 // found existing connection - use that
1022 conn=pThisConnection.get();
1023 break;
1024 }
1025 }
1026 if (conn==nullptr) {
1027 // create new read-onlyconnection
1028 conn = m_connections.emplace_back(std::make_unique<IOVDbConn>(connstr,true,msg())).get();
1029 }
1030 } else {
1031 // no connection specified - use default if available
1032 if (!m_par_defaultConnection.empty()) {
1033 conn=m_connections[0].get();
1034 } else {
1035 ATH_MSG_FATAL( "Folder request " << folderdata.folderName() <<
1036 " gives no DB connection information and no default set" );
1037 return StatusCode::FAILURE;
1038 }
1039 }
1040
1041 // create the new folder, but only if a folder for this SG key has not
1042 // already been requested
1043
1044 std::string crestTag;
1046 crestTag = m_cresttagmap[folderdata.folderName()];
1047 if(crestTag.empty() && folderdata.folderName() != "/TagInfo") {
1048 ATH_MSG_FATAL( "GlobalTag "<< m_par_globalTag.value() << " does not contain folder "
1049 << folderdata.folderName());
1050 crestError=true;
1051 continue;
1052 }
1053 }
1054
1055 auto folder=std::make_unique<IOVDbFolder>(conn,folderdata,msg(),&(*m_h_clidSvc), &(*m_h_metaDataTool),
1058 const std::string& key=folder->key();
1059 if (m_foldermap.find(key)==m_foldermap.end()) { //This check is too weak. For POOL-based folders, the SG key is in the folder description (not known at this point).
1060 m_foldermap[key]=std::move(folder);
1061 conn->incUsage();
1062 } else {
1063 ATH_MSG_ERROR( "Duplicate request for folder " <<
1064 folder->folderName() <<
1065 " associated to already requested Storegate key " << key );
1066 // clean up this duplicate request
1067 }
1068 }// end loop over folders
1069
1070 if(crestError)
1071 return StatusCode::FAILURE;
1072
1073 // check for folders to be written to metadata
1074 for (const auto & folderToWrite : m_par_foldersToWrite) {
1075 // match wildcard * at end of string only (i.e. /A/* matches /A/B, /A/C/D)
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);
1080 }
1081 for (const auto & [name, folder] : m_foldermap) {
1082 if (folder->folderName().starts_with(match)) {
1083 folder->setWriteMeta();
1084 ATH_MSG_INFO( "Folder " << folder->folderName() << " will be written to file metadata" );
1085 }
1086 }//end loop over FolderMap
1087 }//end loop over m_par_foldersToWrite
1088 return StatusCode::SUCCESS;
1089}
static std::map< std::string, std::string > getGlobalTagMap(const std::string &crest_path, const std::string &globaltag)
PublicToolHandle< IIOVDbMetaDataTool > m_h_metaDataTool
Definition IOVDbSvc.h:228
Gaudi::Property< std::vector< std::string > > m_par_overrideTags
Definition IOVDbSvc.h:182
Gaudi::Property< std::vector< std::string > > m_par_folders
Definition IOVDbSvc.h:180
std::map< std::string, std::string > m_cresttagmap
Definition IOVDbSvc.h:213
ServiceHandle< IClassIDSvc > m_h_clidSvc
Definition IOVDbSvc.h:226
Gaudi::Property< std::vector< std::string > > m_par_foldersToWrite
Definition IOVDbSvc.h:184
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:359

◆ signalBeginRun()

StatusCode IOVDbSvc::signalBeginRun ( const IOVTime & beginRunTime,
const EventContext & ctx )
overridevirtual

Set time for begin run.

Definition at line 648 of file IOVDbSvc.cxx.

650{
651 Athena::DBLock dblock;
652
653 // Begin run - set state and save time for later use
655 // Is this a different run compared to the previous call?
656 bool newRun = m_iovTime.isValid() && (m_iovTime.run() != beginRunTime.run());
657 m_iovTime=beginRunTime;
658 // For a MC event, the run number we need to use to look up the conditions
659 // may be different from that of the event itself. Override the run
660 // number with the conditions run number from the event context,
661 // if it is defined.
662 EventIDBase::number_type conditionsRun =
664 if (conditionsRun != EventIDBase::UNDEFNUM) {
665 m_iovTime.setRunEvent (conditionsRun, m_iovTime.event());
666 }
667
668 ATH_MSG_DEBUG( "signalBeginRun> begin run time " << m_iovTime);
669 if (!m_par_onlineMode) {
670 return StatusCode::SUCCESS;
671 }
672
673 // ONLINE mode: allow adding of new calibration constants between runs
674 if (!newRun) {
675 ATH_MSG_DEBUG( "Same run as previous signalBeginRun call. Skipping re-loading of folders..." );
676 return StatusCode::SUCCESS;
677 }
678
679 // all other stuff is event based so happens after this.
680 // this is before first event of each run
681 ATH_MSG_DEBUG( "In online mode will recheck ... " );
682 ATH_MSG_DEBUG( "First reload PoolCataloge ... " );
683 m_h_poolSvc->startCatalog();
684 m_h_poolSvc->commitCatalog();
685 static const std::string preLoadProxyStr{"preLoadProxy"};
686 for (const auto & pThisConnection : m_connections){
687 // only access connections which are actually in use - avoids waking up
688 // the default DB connection if it is not being used
689 if (pThisConnection->nFolders()>0) {
690 //request for database activates connection
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;
695 }
696 for (const auto & [name, folder]: m_foldermap) {
697 if (folder->conn()!=pThisConnection.get()) continue;
698 folder->printCache();
699 cool::ValidityKey vkey=folder->iovTime(m_iovTime);
700 {
701 Gaudi::Guards::AuditorGuard auditor(std::string("FldrCache:")+folder->folderName(), auditorSvc(), preLoadProxyStr);
702 if (!folder->loadCacheIfDbChanged(vkey, m_globalTag, dbconn, m_h_IOVSvc)) {
703 ATH_MSG_ERROR( "Problem RELOADING: " << folder->folderName());
704 return StatusCode::FAILURE;
705 }
706 }
707 folder->printCache();
708 }
709 }
710 if (m_par_manageConnections) pThisConnection->setInactive();
711 }
712 return StatusCode::SUCCESS;
713}
EventIDBase::number_type conditionsRun() const
uint32_t run() const noexcept
Definition IOVTime.h:105
const ExtendedEventContext & getExtendedEventContext(const EventContext &ctx)
Retrieve an extended context from a context object.

◆ signalEndProxyPreload()

void IOVDbSvc::signalEndProxyPreload ( )
overridevirtual

Signal that callback has been fired.

Definition at line 716 of file IOVDbSvc.cxx.

716 {
717 // this method does nothing
718}

◆ updateAddress()

StatusCode IOVDbSvc::updateAddress ( StoreID::type storeID,
SG::TransientAddress * tad,
const EventContext & ctx )
overridevirtual

Update a transient Address.

Definition at line 428 of file IOVDbSvc.cxx.

430{
431 // Provide TAD and associated range, actually reading the conditions data
432
433 // Read information for folders and setup TADs
434 if (storeID!=StoreID::DETECTOR_STORE) return StatusCode::FAILURE;
435 Gaudi::Guards::AuditorGuard auditor(std::string("UpdateAddr::")+(tad->name().empty() ? "anonymous" : tad->name()),
436 auditorSvc(), "preLoadProxy");
437
438 IOVTime iovTime{m_iovTime};
439 IOVRange range;
440 std::unique_ptr<IOpaqueAddress> address;
441
442 // first check if this key is managed by IOVDbSvc
443 // return FAILURE if not - this allows other AddressProviders to be
444 // asked for the TAD
445 const std::string& key=tad->name();
446 const auto fitr=m_foldermap.find(key);
447 if (fitr==m_foldermap.end()) {
449 "updateAddress cannot find description for TAD " << key );
450 return StatusCode::FAILURE;
451 }
452 const auto& folder=fitr->second;
453 if (folder->clid()!=tad->clID()) {
454 ATH_MSG_VERBOSE( "CLID for TAD " << key << " is " << tad->clID()
455 << " but expecting " << folder->clid() );
456
457 return StatusCode::FAILURE;
458 }
459
460 // IOVDbSvc will satisfy the request, using already found folder
461 // now determine the current IOVTime
462 if (m_state==IOVDbSvc::INITIALIZATION && !m_iovTime.isValid()) {
463 ATH_MSG_DEBUG( "updateAddress: in initialisation phase and no iovTime defined" );
464 return::StatusCode::SUCCESS;
465 }
467 // determine iovTime from eventID in the event context
468 const EventIDBase* evid = EventIDFromStore( m_h_sgSvc );
469 if( evid ) {
470 iovTime.setRunEvent( evid->run_number(), evid->lumi_block()) ;
471 // save both seconds and ns offset for timestamp
472 uint64_t nsTime = evid->time_stamp() *1000000000LL;
473 nsTime += evid->time_stamp_ns_offset();
474 iovTime.setTimestamp(nsTime);
475 m_iovTime = iovTime;
476 ATH_MSG_DEBUG( "updateAddress - using iovTime from EventInfo: " << iovTime);
477 } else {
478 // failed to get event info - just return success
479 ATH_MSG_DEBUG( "Could not get event - initialise phase");
480 return StatusCode::SUCCESS;
481 }
482 } else {
483 ATH_MSG_DEBUG("updateAddress: using iovTime from init/beginRun: " << iovTime);
484 }
485
486
487
488 // obtain the validity key for this folder (includes overrides)
489 cool::ValidityKey vkey=folder->iovTime(iovTime);
490 {
491 // The dblock is currently abused to also protect the cache in the IOVDbFolders.
492 // This global lock may give rise to deadlocks between the dblock and the internal lock
493 // of the SGImplSvc. The deadlock may arise if the order of the initial call to IOVDbSvc
494 // and SGImplSvc are different, because the two services call each other.
495 // A problem was observed when SG::DataProxy::isValidAddress first called IOVDbSvc::updateAddress
496 // which called IOVSvc::setRange then SGImplSvc::proxy, and at the same time
497 // StoreGateSvc::contains called first SGImplSvc::proxy which then called IOVDbSvc::updateAddress.
498 // This problem is mitigated by limiting the scope of the dblock here.
499 Athena::DBLock dblock;
500 ATH_MSG_DEBUG("Validity key "<<vkey);
501 if (folder->source() == IOVDbFolder::source_t::CRESTDB) {
502 if (!folder->readMeta() && !folder->cacheValid((vkey))){
503 fitr->second->loadCache(vkey, m_par_cacheAlign,m_globalTag,m_par_onlineMode);
504 }
505 } else { //COOL reading
506 if (!folder->readMeta() && !folder->cacheValid(vkey)) {
507 // mark this folder as not-dropped so cache-read will succeed
508 folder->setDropped(false);
509 // reload cache for this folder (and all others sharing this DB connection)
510 ATH_MSG_DEBUG( "Triggering cache load for folder " << folder->folderName());
511 if (loadCaches(folder->conn()).isFailure()) {
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;
515 }
516 }
517 }//end cool part
518 // data should now be in cache
519 // setup address and range
520 {
521 Gaudi::Guards::AuditorGuard auditor(std::string("FldrSetup:")+(tad->name().empty() ? "anonymous" : tad->name()),
522 auditorSvc(), "preLoadProxy");
523 if (!folder->getAddress(vkey,&(*m_h_persSvc),poolSvcContext(),address,
524 range,m_poolPayloadRequested)) {
525 ATH_MSG_ERROR( "getAddress failed for folder " << folder->folderName() );
526 return StatusCode::FAILURE;
527 }
528 }
529 // reduce minimum IOV of timestamp folders to avoid 'thrashing'
530 // due to events slightly out of order in HLT
531 if (folder->timeStamp()) {
532 cool::ValidityKey start=range.start().timestamp();
533 if (start>m_iovslop) start-=m_iovslop;
534 range=IOVRange(IOVTime(start),range.stop());
535 }
536 }
537
538 // Pass range onto IOVSvc
539 if (m_h_IOVSvc->setRange(tad->clID(),tad->name(),
540 range,folder->eventStore()).isFailure()) {
541 ATH_MSG_ERROR( "setRange failed for folder " << folder->folderName() );
542 return StatusCode::FAILURE;
543 }
544 tad->setAddress(address.release());
545 return StatusCode::SUCCESS;
546}
const EventIDBase * EventIDFromStore(IProxyDict *store)
Retrieve the EventID from EventContext saved in store STORE.
void setRunEvent(uint32_t run, uint32_t event) noexcept
Definition IOVTime.cxx:96
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.

Member Data Documentation

◆ m_abort

bool IOVDbSvc::m_abort {false}
private

Definition at line 273 of file IOVDbSvc.h.

273{false};

◆ m_connections

std::vector<std::unique_ptr<IOVDbConn> > IOVDbSvc::m_connections
private

Definition at line 267 of file IOVDbSvc.h.

◆ m_crestCoolToFile

BooleanProperty IOVDbSvc::m_crestCoolToFile {this,"CrestCoolToFile",false,"output to file crest or cool data in the same format for debugging purposes"}
private

Definition at line 218 of file IOVDbSvc.h.

218{this,"CrestCoolToFile",false,"output to file crest or cool data in the same format for debugging purposes"};

◆ m_cresttagmap

std::map<std::string, std::string> IOVDbSvc::m_cresttagmap
private

Definition at line 213 of file IOVDbSvc.h.

◆ m_foldermap

FolderMap IOVDbSvc::m_foldermap
private

Definition at line 271 of file IOVDbSvc.h.

◆ m_globalTag

std::string IOVDbSvc::m_globalTag {}
private

Definition at line 261 of file IOVDbSvc.h.

261{};

◆ m_h_clidSvc

ServiceHandle<IClassIDSvc> IOVDbSvc::m_h_clidSvc {this,"ClassIDSvc","ClassIDSvc"}
private

Definition at line 226 of file IOVDbSvc.h.

226{this,"ClassIDSvc","ClassIDSvc"};

◆ m_h_detStore

ServiceHandle<StoreGateSvc> IOVDbSvc::m_h_detStore {this,"DetectorStore","DetectorStore"}
private

Definition at line 223 of file IOVDbSvc.h.

223{this,"DetectorStore","DetectorStore"};

◆ m_h_IOVSvc

ServiceHandle<IIOVSvc> IOVDbSvc::m_h_IOVSvc {this,"IOVSvc","IOVSvc"}
private

Definition at line 221 of file IOVDbSvc.h.

221{this,"IOVSvc","IOVSvc"};

◆ m_h_metaDataStore

ServiceHandle<StoreGateSvc> IOVDbSvc::m_h_metaDataStore {this,"MetaDataStore","StoreGateSvc/MetaDataStore"}
private

Definition at line 224 of file IOVDbSvc.h.

224{this,"MetaDataStore","StoreGateSvc/MetaDataStore"};

◆ m_h_metaDataTool

PublicToolHandle<IIOVDbMetaDataTool> IOVDbSvc::m_h_metaDataTool {this,"IOVDbMetaDataTool","IOVDbMetaDataTool"}
private

Definition at line 228 of file IOVDbSvc.h.

228{this,"IOVDbMetaDataTool","IOVDbMetaDataTool"};

◆ m_h_persSvc

ServiceHandle<IAddressCreator> IOVDbSvc::m_h_persSvc {this,"EventPersistencySvc","EventPersistencySvc"}
private

Definition at line 225 of file IOVDbSvc.h.

225{this,"EventPersistencySvc","EventPersistencySvc"};

◆ m_h_poolSvc

ServiceHandle<IPoolSvc> IOVDbSvc::m_h_poolSvc {this,"PoolSvc","PoolSvc"}
private

Definition at line 227 of file IOVDbSvc.h.

227{this,"PoolSvc","PoolSvc"};

◆ m_h_sgSvc

ServiceHandle<StoreGateSvc> IOVDbSvc::m_h_sgSvc {this,"StoreGateSvc","StoreGateSvc"}
private

Definition at line 222 of file IOVDbSvc.h.

222{this,"StoreGateSvc","StoreGateSvc"};

◆ m_h_tagInfoMgr

ServiceHandle<ITagInfoMgr> IOVDbSvc::m_h_tagInfoMgr {this,"TagInfoMgr","TagInfoMgr"}
private

Definition at line 229 of file IOVDbSvc.h.

229{this,"TagInfoMgr","TagInfoMgr"};

◆ m_iovslop

cool::ValidityKey IOVDbSvc::m_iovslop {}
private

Definition at line 264 of file IOVDbSvc.h.

264{};

◆ m_iovTime

IOVTime IOVDbSvc::m_iovTime {}
private

Definition at line 258 of file IOVDbSvc.h.

258{};

◆ m_outputToFile

BooleanProperty IOVDbSvc::m_outputToFile {this,"OutputToFile",false,"output to file for debugging purposes"}
private

Definition at line 217 of file IOVDbSvc.h.

217{this,"OutputToFile",false,"output to file for debugging purposes"};

◆ m_par_cacheAlign

UnsignedIntegerProperty IOVDbSvc::m_par_cacheAlign {this,"CacheAlign",0,"cache alignment - divide cache into N slices and align queries on slice"}
private

Definition at line 205 of file IOVDbSvc.h.

205{this,"CacheAlign",0,"cache alignment - divide cache into N slices and align queries on slice"};

◆ m_par_cacheRun

IntegerProperty IOVDbSvc::m_par_cacheRun {this,"CacheRun",0,"force larger numbers of runs to be cached"}
private

Definition at line 200 of file IOVDbSvc.h.

200{this,"CacheRun",0,"force larger numbers of runs to be cached"};

◆ m_par_cacheTime

IntegerProperty IOVDbSvc::m_par_cacheTime {this,"CacheTime",0,"force larger timeranges to be cached (seconds)"}
private

Definition at line 202 of file IOVDbSvc.h.

202{this,"CacheTime",0,"force larger timeranges to be cached (seconds)"};

◆ m_par_checklock

BooleanProperty IOVDbSvc::m_par_checklock {this,"CheckLock",false,"check to ensure global/HVS tags are locked (for production)"}
private

Definition at line 209 of file IOVDbSvc.h.

209{this,"CheckLock",false,"check to ensure global/HVS tags are locked (for production)"};

◆ m_par_dbinst

Gaudi::Property<std::string> IOVDbSvc::m_par_dbinst {this,"DBInstance","","Database instance (like OFLP200)"}
private

Definition at line 178 of file IOVDbSvc.h.

178{this,"DBInstance","","Database instance (like OFLP200)"};

◆ m_par_defaultConnection

Gaudi::Property<std::string> IOVDbSvc::m_par_defaultConnection {this,"dbConnection","sqlite://;schema=cooldummy.db;dbname=OFLP200","default DB connection string"}
private

Definition at line 174 of file IOVDbSvc.h.

174{this,"dbConnection","sqlite://;schema=cooldummy.db;dbname=OFLP200","default DB connection string"};

◆ m_par_folders

Gaudi::Property<std::vector<std::string> > IOVDbSvc::m_par_folders {this,"Folders",{},"List of database folders to preload","OrderedSet<std::string>"}
private

Definition at line 180 of file IOVDbSvc.h.

180{this,"Folders",{},"List of database folders to preload","OrderedSet<std::string>"};

◆ m_par_foldersToWrite

Gaudi::Property<std::vector<std::string> > IOVDbSvc::m_par_foldersToWrite {this,"FoldersToMetaData",{},"list of folders to write to file meta data","OrderedSet<std::string>"}
private

Definition at line 184 of file IOVDbSvc.h.

184{this,"FoldersToMetaData",{},"list of folders to write to file meta data","OrderedSet<std::string>"};

◆ m_par_forceLumiblockNumber

IntegerProperty IOVDbSvc::m_par_forceLumiblockNumber {this,"forceLumiblockNumber",0,"globally force LB-number (default: no force)"}
private

Definition at line 192 of file IOVDbSvc.h.

192{this,"forceLumiblockNumber",0,"globally force LB-number (default: no force)"};

◆ m_par_forceRunNumber

IntegerProperty IOVDbSvc::m_par_forceRunNumber {this,"forceRunNumber",0,"globally force run-number (default: no force)"}
private

Definition at line 190 of file IOVDbSvc.h.

190{this,"forceRunNumber",0,"globally force run-number (default: no force)"};

◆ m_par_forceTimestamp

IntegerProperty IOVDbSvc::m_par_forceTimestamp {this,"forceTimeStamp",0,"globally force time-stamp (default: no force)"}
private

Definition at line 194 of file IOVDbSvc.h.

194{this,"forceTimeStamp",0,"globally force time-stamp (default: no force)"};

◆ m_par_format

StringProperty IOVDbSvc::m_par_format {this,"Format",{},"Format of data; default is empty string (default for a given source)"}
private

Definition at line 215 of file IOVDbSvc.h.

215{this,"Format",{},"Format of data; default is empty string (default for a given source)"};

◆ m_par_globalTag

Gaudi::Property<std::string> IOVDbSvc::m_par_globalTag {this,"GlobalTag","","Global database tag"}
private

Definition at line 176 of file IOVDbSvc.h.

176{this,"GlobalTag","","Global database tag"};

◆ m_par_manageConnections

BooleanProperty IOVDbSvc::m_par_manageConnections {this,"ManageConnections",true,"flag to trigger the connections management"}
private

Definition at line 186 of file IOVDbSvc.h.

186{this,"ManageConnections",true,"flag to trigger the connections management"};

◆ m_par_managePoolConnections

BooleanProperty IOVDbSvc::m_par_managePoolConnections {this,"ManagePoolConnections",true,"flag to manage pool connections"}
private

Definition at line 188 of file IOVDbSvc.h.

188{this,"ManagePoolConnections",true,"flag to manage pool connections"};

◆ m_par_maxNumPoolFiles

IntegerProperty IOVDbSvc::m_par_maxNumPoolFiles {this,"MaxPoolFilesOpen",5,"max number of pool files open allowed (0 means no limit)"}
private

Definition at line 196 of file IOVDbSvc.h.

196{this,"MaxPoolFilesOpen",5,"max number of pool files open allowed (0 means no limit)"};

◆ m_par_onlineMode

BooleanProperty IOVDbSvc::m_par_onlineMode {this,"OnlineMode",false,"online mode flag to ignore missing channels outside cache range"}
private

Definition at line 207 of file IOVDbSvc.h.

207{this,"OnlineMode",false,"online mode flag to ignore missing channels outside cache range"};

◆ m_par_overrideTags

Gaudi::Property<std::vector<std::string> > IOVDbSvc::m_par_overrideTags {this,"overrideTags",{},"List of xml-modifiers for folders like <prefix>/My/Folder</prefix><tag>MyFolderTag</tag>","OrderedSet<std::string>"}
private

Definition at line 182 of file IOVDbSvc.h.

182{this,"overrideTags",{},"List of xml-modifiers for folders like <prefix>/My/Folder</prefix><tag>MyFolderTag</tag>","OrderedSet<std::string>"};

◆ m_par_source

StringProperty IOVDbSvc::m_par_source {this,"Source","COOL_DATABASE","source of data as a string (default COOL_DATABASE)"}
private

Definition at line 211 of file IOVDbSvc.h.

211{this,"Source","COOL_DATABASE","source of data as a string (default COOL_DATABASE)"};

◆ m_par_timeStampSlop

FloatProperty IOVDbSvc::m_par_timeStampSlop {this,"TimeStampSlop",0.0,"backdata timestamp IOVs by this many seconds"}
private

Definition at line 198 of file IOVDbSvc.h.

198{this,"TimeStampSlop",0.0,"backdata timestamp IOVs by this many seconds"};

◆ m_poolPayloadRequested

bool IOVDbSvc::m_poolPayloadRequested {false}
private

Definition at line 234 of file IOVDbSvc.h.

234{false};

◆ m_poolSvcContext

int IOVDbSvc::m_poolSvcContext {-1}
private

Definition at line 238 of file IOVDbSvc.h.

238{-1};

◆ m_source

Definition at line 254 of file IOVDbSvc.h.

◆ m_state

IOVDbSvc_state IOVDbSvc::m_state {INITIALIZATION}
private

Definition at line 252 of file IOVDbSvc.h.


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