Go to the documentation of this file.00001 #ifndef CondCore_IOVService_PayloadProxy_h
00002 #define CondCore_IOVService_PayloadProxy_h
00003
00004 #include "CondCore/IOVService/interface/IOVProxy.h"
00005 #include "CondCore/DBCommon/interface/PayloadRef.h"
00006
00007 namespace cond {
00008
00009
00010
00011
00012 class CondGetter {
00013 public:
00014 virtual ~CondGetter(){}
00015 virtual IOVProxy get(std::string name) const=0;
00016
00017 };
00018
00019
00020
00021
00022
00023 class BasePayloadProxy {
00024 public:
00025
00026 struct ObjId {
00027 cond::Time_t since;
00028 unsigned int oid1;
00029 unsigned int oid2;
00030 };
00031 typedef std::vector<ObjId> ObjIds;
00032 struct Stats {
00033 int nProxy;
00034 int nRefresh;
00035 int nArefresh;
00036 int nReconnect;
00037 int nAreconnect;
00038 int nMake;
00039 int nLoad;
00040 ObjIds ids;
00041 };
00042
00043
00044 static Stats gstats;
00045
00046 Stats stats;
00047
00048
00049 BasePayloadProxy(cond::DbSession& session,
00050 bool errorPolicy);
00051
00052
00053 BasePayloadProxy(cond::DbSession& session,
00054 const std::string & token,
00055 bool errorPolicy);
00056
00057 void loadIov( const std::string iovToken );
00058 void loadTag( const std::string tag );
00059
00060 virtual ~BasePayloadProxy();
00061
00062 virtual void invalidateCache()=0;
00063
00064
00065 std::string const & token() const { return m_token;}
00066
00067
00068 cond::ValidityInterval loadFor(cond::Time_t time);
00069
00070
00071 cond::ValidityInterval loadFor(size_t n);
00072
00073
00074 cond::ValidityInterval setIntervalFor(cond::Time_t time);
00075
00076
00077 void make();
00078
00079 bool isValid() const;
00080
00081 TimeType timetype() const { return m_iov.timetype();}
00082
00083 IOVProxy const & iov() const { return m_iov;}
00084
00085 virtual void loadMore(CondGetter const &){}
00086
00087
00088 bool refresh();
00089 bool refresh( cond::DbSession& newSession );
00090
00091
00092 private:
00093 virtual bool load(cond::DbSession& session, std::string const & token) =0;
00094
00095
00096 protected:
00097 bool m_doThrow;
00098 IOVProxy m_iov;
00099 IOVElementProxy m_element;
00100 mutable DbSession m_session;
00101
00102 protected:
00103
00104 std::string m_token;
00105
00106 };
00107
00108
00109
00110
00111
00112 template<typename DataT>
00113 class PayloadProxy : public BasePayloadProxy {
00114 public:
00115
00116 PayloadProxy(cond::DbSession& session,
00117 bool errorPolicy,
00118 const char * source=0) :
00119 BasePayloadProxy(session, errorPolicy) {}
00120
00121 PayloadProxy(cond::DbSession& session,
00122 const std::string & token,
00123 bool errorPolicy,
00124 const char * source=0) :
00125 BasePayloadProxy(session, token, errorPolicy) {}
00126
00127 virtual ~PayloadProxy(){}
00128
00129
00130 const DataT & operator()() const {
00131 return (*m_data);
00132 }
00133
00134 virtual void invalidateCache() {
00135 m_data.clear();
00136 m_token.clear();
00137 }
00138
00139
00140 protected:
00141 virtual bool load(cond::DbSession& session, std::string const & itoken) {
00142 return m_data.load(session,itoken);
00143 }
00144
00145 private:
00146 cond::PayloadRef<DataT> m_data;
00147 };
00148
00149 }
00150 #endif // CondCore_IOVService_PayloadProxy_h