CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Session.h
Go to the documentation of this file.
1 #ifndef CondCore_CondDB_Session_h
2 #define CondCore_CondDB_Session_h
3 //
4 // Package: CondDB
5 // Class : Session
6 //
10 //
11 // Author: Giacomo Govi
12 // Created: Apr 2013
13 //
14 
23 //
24 // temporarely
25 #include <boost/shared_ptr.hpp>
26 
27 // TO BE REMOVED AFTER THE TRANSITION
28 namespace coral {
29  class ISessionProxy;
30  class ISchema;
31 }
32 // END TO BE REMOVED
33 
34 namespace cond {
35 
36  namespace persistency {
37 
38  class SessionConfiguration;
39 
40  // transaction class
41  class Transaction {
42  public:
43  explicit Transaction( SessionImpl& session );
44  Transaction( const Transaction& rhs );
45  Transaction& operator=( const Transaction& rhs );
46 
47  void start( bool readOnly=true );
48 
49  void commit();
50 
51  void rollback();
52 
53  bool isActive();
54  private:
56  };
57 
58  // with full value semantics. destruction will close the DB connection.
59  class Session {
60  public:
61  // default constructor
62  Session();
63 
64  // constructor
65  explicit Session( const std::shared_ptr<SessionImpl>& sessionImpl );
66 
67  //
68  Session( const Session& rhs );
69 
70  //
71  virtual ~Session();
72 
73  //
74  Session& operator=( const Session& rhs );
75 
76  //
77  void close();
78 
79  //
81 
82  //
83  bool existsDatabase();
84 
85  //
86  void createDatabase();
87 
88  // read access to the iov sequence.
89  // the iovs are lazy-loaded in groups when required, with repeatable queries ( for FronTier )
90  IOVProxy readIov( const std::string& tag, bool full=false );
91 
92  // read access to the iov sequence.
93  // the iovs are lazy-loaded in groups when required, with repeatable queries ( for FronTier )
94  IOVProxy readIov( const std::string& tag,
95  const boost::posix_time::ptime& snapshottime,
96  bool full=false );
97 
98  //
99  bool existsIov( const std::string& tag );
100 
101  // create a non-existing iov sequence with the specified tag.
102  // the type is required for consistency with the referenced payloads.
103  // fixme: add creation time - required for the migration
104  template <typename T>
105  IOVEditor createIov( const std::string& tag,
106  cond::TimeType timeType,
107  cond::SynchronizationType synchronizationType=cond::OFFLINE );
109  const std::string& tag,
110  cond::TimeType timeType,
111  cond::SynchronizationType synchronizationType=cond::OFFLINE );
112 
113  IOVEditor createIov( const std::string& payloadType,
114  const std::string& tag,
115  cond::TimeType timeType,
116  cond::SynchronizationType synchronizationType,
117  const boost::posix_time::ptime& creationTime );
118 
119  IOVEditor createIovForPayload( const Hash& payloadHash,
120  const std::string& tag, cond::TimeType timeType,
121  cond::SynchronizationType synchronizationType=cond::OFFLINE );
122 
123  void clearIov( const std::string& tag );
124 
125  // update an existing iov sequence with the specified tag.
126  // timeType and payloadType can't be modified.
127  IOVEditor editIov( const std::string& tag );
128 
129  // functions to store a payload in the database. return the identifier of the item in the db.
130  template <typename T> cond::Hash storePayload( const T& payload,
131  const boost::posix_time::ptime& creationTime = boost::posix_time::microsec_clock::universal_time() );
132  template <typename T> boost::shared_ptr<T> fetchPayload( const cond::Hash& payloadHash );
133 
134  // low-level function to access the payload data as a blob. mainly used for the data migration and testing.
135  // the version for ROOT
136  bool fetchPayloadData( const cond::Hash& payloadHash,
137  std::string& payloadType,
138  cond::Binary& payloadData,
139  cond::Binary& streamerInfoData );
140 
141  // internal functions. creates proxies without loading a specific tag.
142  IOVProxy iovProxy();
143 
144  bool existsGlobalTag( const std::string& name );
145 
146  GTEditor createGlobalTag( const std::string& name );
147  GTEditor editGlobalTag( const std::string& name );
148 
149  GTProxy readGlobalTag( const std::string& name );
150  // essentially for the bridge. useless where ORA disappears.
151  GTProxy readGlobalTag( const std::string& name,
152  const std::string& preFix,
153  const std::string& postFix );
154  public:
155 
156  bool checkMigrationLog( const std::string& sourceAccount,
157  const std::string& sourceTag,
158  std::string& destinationTag,
160  void addToMigrationLog( const std::string& sourceAccount,
161  const std::string& sourceTag,
162  const std::string& destinationTag,
163  cond::MigrationStatus status);
164  void updateMigrationLog( const std::string& sourceAccount,
165  const std::string& sourceTag,
166  cond::MigrationStatus status);
167 
168  bool lookupMigratedPayload( const std::string& sourceAccount,
169  const std::string& sourceToken,
170  std::string& payloadId );
171  void addMigratedPayload( const std::string& sourceAccount,
172  const std::string& sourceToken,
173  const std::string& payloadId );
174  void updateMigratedPayload( const std::string& sourceAccount,
175  const std::string& sourceToken,
176  const std::string& payloadId );
177  std::string parsePoolToken( const std::string& poolToken );
178 
180 
181  coral::ISessionProxy& coralSession();
182  // TO BE REMOVED in the long term. The new code will use coralSession().
183  coral::ISchema& nominalSchema();
184 
185  bool isOraSession();
186 
187  private:
188  cond::Hash storePayloadData( const std::string& payloadObjectType,
189  const std::pair<Binary,Binary>& payloadAndStreamerInfoData,
190  const boost::posix_time::ptime& creationTime );
191 
192  private:
193 
194  std::shared_ptr<SessionImpl> m_session;
196  };
197 
198  template <typename T> inline IOVEditor Session::createIov( const std::string& tag, cond::TimeType timeType, cond::SynchronizationType synchronizationType ){
199  return createIov( cond::demangledName( typeid(T) ), tag, timeType, synchronizationType );
200  }
201 
202  template <typename T> inline cond::Hash Session::storePayload( const T& payload, const boost::posix_time::ptime& creationTime ){
203 
204  std::string payloadObjectType = cond::demangledName(typeid(payload));
205  cond::Hash ret;
206  try{
207  ret = storePayloadData( payloadObjectType, serialize( payload, isOraSession() ), creationTime );
208  } catch ( const cond::persistency::Exception& e ){
209  std::string em(e.what());
210  throwException( "Payload of type "+payloadObjectType+" could not be stored. "+em,"Session::storePayload");
211  }
212  return ret;
213  }
214 
215  template <typename T> inline boost::shared_ptr<T> Session::fetchPayload( const cond::Hash& payloadHash ){
216  cond::Binary payloadData;
217  cond::Binary streamerInfoData;
219  if(! fetchPayloadData( payloadHash, payloadType, payloadData, streamerInfoData ) )
220  throwException( "Payload with id "+payloadHash+" has not been found in the database.",
221  "Session::fetchPayload" );
222  boost::shared_ptr<T> ret;
223  try{
224  ret = deserialize<T>( payloadType, payloadData, streamerInfoData, isOraSession() );
225  } catch ( const cond::persistency::Exception& e ){
226  std::string em(e.what());
227  throwException( "Payload of type "+payloadType+" with id "+payloadHash+" could not be loaded. "+em,"Session::fetchPayload");
228  }
229  return ret;
230  }
231 
233  public:
235 
237 
238  void start( bool readOnly=true );
239 
240  void commit();
241 
242  void close();
243  private:
245  bool m_status;
246 
247  };
248 
249 
250  }
251 }
252 #endif
virtual char const * what() const
Definition: Exception.cc:141
void addToMigrationLog(const std::string &sourceAccount, const std::string &sourceTag, const std::string &destinationTag, cond::MigrationStatus status)
Definition: Session.cc:217
GTEditor editGlobalTag(const std::string &name)
Definition: Session.cc:166
Transaction(SessionImpl &session)
Definition: Session.cc:9
bool existsGlobalTag(const std::string &name)
Definition: Session.cc:153
MigrationStatus
Definition: Types.h:26
void updateMigratedPayload(const std::string &sourceAccount, const std::string &sourceToken, const std::string &payloadId)
Definition: Session.cc:253
Base exception class for the object to relational access.
Definition: Exception.h:13
void addMigratedPayload(const std::string &sourceAccount, const std::string &sourceToken, const std::string &payloadId)
Definition: Session.cc:244
void clearIov(const std::string &tag)
Definition: Session.cc:148
boost::shared_ptr< T > fetchPayload(const cond::Hash &payloadHash)
Definition: Session.h:215
void start(bool readOnly=true)
Definition: Session.cc:22
TransactionScope(Transaction &transaction)
Definition: Session.cc:281
Transaction & transaction()
Definition: Session.cc:66
void updateMigrationLog(const std::string &sourceAccount, const std::string &sourceTag, cond::MigrationStatus status)
Definition: Session.cc:227
TimeType
Definition: Time.h:21
std::string demangledName(const std::type_info &typeInfo)
Definition: ClassUtils.cc:156
IOVProxy readIov(const std::string &tag, bool full=false)
Definition: Session.cc:81
Transaction & operator=(const Transaction &rhs)
Definition: Session.cc:17
coral::ISchema & nominalSchema()
Definition: Session.cc:277
Definition: GenABIO.cc:180
void start(bool readOnly=true)
Definition: Session.cc:292
std::string Hash
Definition: Types.h:43
bool fetchPayloadData(const cond::Hash &payloadHash, std::string &payloadType, cond::Binary &payloadData, cond::Binary &streamerInfoData)
Definition: Session.cc:195
std::string connectionString()
Definition: Session.cc:268
cond::Hash storePayloadData(const std::string &payloadObjectType, const std::pair< Binary, Binary > &payloadAndStreamerInfoData, const boost::posix_time::ptime &creationTime)
Definition: Session.cc:187
IOVEditor editIov(const std::string &tag)
Definition: Session.cc:141
std::string parsePoolToken(const std::string &poolToken)
Definition: Session.cc:263
IOVEditor createIovForPayload(const Hash &payloadHash, const std::string &tag, cond::TimeType timeType, cond::SynchronizationType synchronizationType=cond::OFFLINE)
Definition: Session.cc:129
bool existsIov(const std::string &tag)
Definition: Session.cc:97
std::pair< Binary, Binary > serialize(const T &payload, bool packingOnly=false)
Definition: Serialization.h:55
cond::Hash storePayload(const T &payload, const boost::posix_time::ptime &creationTime=boost::posix_time::microsec_clock::universal_time())
Definition: Session.h:202
coral::ISessionProxy & coralSession()
Definition: Session.cc:272
IOVEditor createIov(const std::string &tag, cond::TimeType timeType, cond::SynchronizationType synchronizationType=cond::OFFLINE)
Definition: Session.h:198
bool lookupMigratedPayload(const std::string &sourceAccount, const std::string &sourceToken, std::string &payloadId)
Definition: Session.cc:236
SynchronizationType
Definition: Types.h:31
GTEditor createGlobalTag(const std::string &name)
Definition: Session.cc:158
tuple status
Definition: ntuplemaker.py:245
Session & operator=(const Session &rhs)
Definition: Session.cc:56
GTProxy readGlobalTag(const std::string &name)
Definition: Session.cc:173
long double T
Transaction m_transaction
Definition: Session.h:195
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:11
std::shared_ptr< SessionImpl > m_session
Definition: Session.h:194
bool checkMigrationLog(const std::string &sourceAccount, const std::string &sourceTag, std::string &destinationTag, cond::MigrationStatus &status)
Definition: Session.cc:207