Go to the documentation of this file.00001 #ifndef CondCore_ESSources_CondDBESSource_h
00002 #define CondCore_ESSources_CondDBESSource_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <string>
00015 #include <map>
00016 #include <set>
00017
00018 #include "CondCore/DBCommon/interface/DbConnection.h"
00019
00020 #include "FWCore/Framework/interface/DataProxyProvider.h"
00021 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
00022 #include "CondCore/DBCommon/interface/TagMetadata.h"
00023 #include "CondCore/DBCommon/interface/Time.h"
00024 #include "CondCore/TagCollection/interface/TagCollectionRetriever.h"
00025
00026 namespace edm{
00027 class ParameterSet;
00028 }
00029 namespace cond{
00030 class DbSession;
00031 class BasePayloadProxy;
00032 class DataProxyWrapperBase;
00033 }
00034
00035 class CondDBESSource : public edm::eventsetup::DataProxyProvider,
00036 public edm::EventSetupRecordIntervalFinder{
00037 public:
00038 typedef boost::shared_ptr<cond::DataProxyWrapperBase > ProxyP;
00039 typedef std::multimap< std::string, ProxyP> ProxyMap;
00040
00041 typedef enum { NOREFRESH, REFRESH_ALWAYS, REFRESH_OPEN_IOVS, REFRESH_EACH_RUN, RECONNECT_EACH_RUN } RefreshPolicy;
00042
00043
00044 explicit CondDBESSource( const edm::ParameterSet& );
00045 ~CondDBESSource();
00046
00047 protected:
00048 virtual void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&,
00049 const edm::IOVSyncValue& ,
00050 edm::ValidityInterval&) ;
00051
00052 virtual void registerProxies(const edm::eventsetup::EventSetupRecordKey& iRecordKey, KeyedProxies& aProxyList) ;
00053
00054 virtual void newInterval(const edm::eventsetup::EventSetupRecordKey& iRecordType, const edm::ValidityInterval& iInterval) ;
00055
00056 private:
00057
00058
00059
00060 cond::DbConnection m_connection;
00061
00062
00063 ProxyMap m_proxies;
00064
00065
00066 typedef std::map< std::string, cond::TagMetadata > TagCollection;
00067
00068 TagCollection m_tagCollection;
00069 std::map<std::string,std::pair<cond::DbSession,std::string> > m_sessionPool;
00070 std::map<std::string,unsigned int> m_lastRecordRuns;
00071
00072 struct Stats {
00073 int nData;
00074 int nSet;
00075 int nRun;
00076 int nLumi;
00077 int nRefresh;
00078 int nActualRefresh;
00079 int nReconnect;
00080 int nActualReconnect;
00081 };
00082
00083 Stats m_stats;
00084
00085 unsigned int m_lastRun;
00086 unsigned int m_lastLumi;
00087 RefreshPolicy m_policy;
00088
00089 bool m_doDump;
00090
00091 private:
00092
00093 void fillList(const std::string & pfn, std::vector<std::string> & pfnList, const unsigned int listSize, const std::string & type);
00094
00095 void fillTagCollectionFromGT(const std::string & coraldb,
00096 const std::string & prefix,
00097 const std::string & postfix,
00098 const std::string & roottag,
00099 std::set< cond::TagMetadata > & tagcoll);
00100
00101 void fillTagCollectionFromDB( const std::vector<std::string> & coraldbList,
00102 const std::vector<std::string> & prefix,
00103 const std::vector<std::string> & postfix,
00104 const std::vector<std::string> & roottagList,
00105 std::map<std::string,cond::TagMetadata>& replacement);
00106 };
00107 #endif