CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Public Attributes | Private Attributes
cond::persistency::SessionImpl Class Reference

#include <SessionImpl.h>

Public Types

enum  FailureOnOpeningPolicy { THROW, DO_NOT_THROW, CREATE }
 

Public Member Functions

void close ()
 
void commitTransaction ()
 
IGTSchemagtSchema ()
 
IIOVSchemaiovSchema ()
 
bool isActive () const
 
bool isTransactionActive (bool deep=true) const
 
void openDb ()
 
void openGTDb (FailureOnOpeningPolicy policy=THROW)
 
void openIovDb (FailureOnOpeningPolicy policy=THROW)
 
void openRunInfoDb ()
 
void rollbackTransaction ()
 
IRunInfoSchemarunInfoSchema ()
 
 SessionImpl ()
 
 SessionImpl (std::shared_ptr< coral::ISessionProxy > &session, const std::string &connectionString)
 
void startTransaction (bool readOnly=true)
 
 ~SessionImpl ()
 

Public Attributes

std::string connectionString
 
std::shared_ptr< coral::ISessionProxy > coralSession
 
std::unique_ptr< IGTSchemagtSchemaHandle
 
std::unique_ptr< IIOVSchemaiovSchemaHandle
 
std::unique_ptr< IRunInfoSchemarunInfoSchemaHandle
 
std::unique_ptr< ITransactiontransaction
 

Private Attributes

std::unique_lock< std::recursive_mutex > transactionLock
 
std::recursive_mutex transactionMutex
 

Detailed Description

Definition at line 40 of file SessionImpl.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

cond::persistency::SessionImpl::SessionImpl ( )

Definition at line 28 of file SessionImpl.cc.

28 : coralSession() {}
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
cond::persistency::SessionImpl::SessionImpl ( std::shared_ptr< coral::ISessionProxy > &  session,
const std::string &  connectionString 
)

Definition at line 30 of file SessionImpl.cc.

31  : coralSession(session), connectionString(connectionStr) {}
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
cond::persistency::SessionImpl::~SessionImpl ( )

Definition at line 33 of file SessionImpl.cc.

References close().

Member Function Documentation

void cond::persistency::SessionImpl::close ( void  )

Definition at line 35 of file SessionImpl.cc.

References coralSession, and transaction.

Referenced by esMonitoring.AsyncLineReaderMixin::handle_close(), esMonitoring.FDJsonServer::handle_close(), Vispa.Gui.BoxContentDialog.BoxContentDialog::keyPressEvent(), Vispa.Gui.FindDialog.FindDialog::keyPressEvent(), and ~SessionImpl().

35  {
36  if (coralSession.get()) {
37  if (coralSession->transaction().isActive()) {
38  coralSession->transaction().rollback();
39  }
40  coralSession.reset();
41  }
42  transaction.reset();
43  }
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void cond::persistency::SessionImpl::commitTransaction ( )

Definition at line 63 of file SessionImpl.cc.

References gtSchemaHandle, iovSchemaHandle, CommonMethods::lock(), runInfoSchemaHandle, transaction, and transactionLock.

Referenced by cond::persistency::Transaction::commit().

63  {
64  std::unique_lock<std::recursive_mutex> lock;
65  lock.swap(transactionLock);
66  if (transaction) {
67  transaction->clients--;
68  if (!transaction->clients) {
69  transaction->commit();
70  transaction.reset();
71  iovSchemaHandle.reset();
72  gtSchemaHandle.reset();
73  runInfoSchemaHandle.reset();
74  }
75  }
76  }
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
std::unique_lock< std::recursive_mutex > transactionLock
Definition: SessionImpl.h:77
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
IGTSchema & cond::persistency::SessionImpl::gtSchema ( )

Definition at line 169 of file SessionImpl.cc.

References gtSchemaHandle.

169 { return *gtSchemaHandle; }
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
IIOVSchema & cond::persistency::SessionImpl::iovSchema ( )

Definition at line 167 of file SessionImpl.cc.

References iovSchemaHandle.

167 { return *iovSchemaHandle; }
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
bool cond::persistency::SessionImpl::isActive ( ) const

Definition at line 45 of file SessionImpl.cc.

References coralSession.

45 { return coralSession.get(); }
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
bool cond::persistency::SessionImpl::isTransactionActive ( bool  deep = true) const

Definition at line 90 of file SessionImpl.cc.

References transaction.

Referenced by cond::persistency::Transaction::isActive().

90  {
91  if (!transaction)
92  return false;
93  if (!deep)
94  return true;
95  return transaction->isActive();
96  }
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void cond::persistency::SessionImpl::openDb ( )

Definition at line 146 of file SessionImpl.cc.

References gtSchemaHandle, iovSchemaHandle, cond::persistency::throwException(), and transaction.

146  {
147  if (!transaction.get())
148  throwException("The transaction is not active.", "SessionImpl::openIovDb");
149  if (!transaction->iovDbOpen) {
150  transaction->iovDbExists = iovSchemaHandle->exists();
151  transaction->iovDbOpen = true;
152  }
153  if (!transaction->gtDbOpen) {
154  transaction->gtDbExists = gtSchemaHandle->exists();
155  transaction->gtDbOpen = true;
156  }
157  if (!transaction->iovDbExists) {
158  iovSchemaHandle->create();
159  transaction->iovDbExists = true;
160  if (!transaction->gtDbExists) {
161  gtSchemaHandle->create();
162  transaction->gtDbExists = true;
163  }
164  }
165  }
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12
void cond::persistency::SessionImpl::openGTDb ( SessionImpl::FailureOnOpeningPolicy  policy = THROW)

Definition at line 116 of file SessionImpl.cc.

References CREATE, gtSchemaHandle, THROW, cond::persistency::throwException(), and transaction.

116  {
117  if (!transaction.get())
118  throwException("The transaction is not active.", "SessionImpl::openGTDb");
119  if (!transaction->gtDbOpen) {
120  transaction->gtDbExists = gtSchemaHandle->exists();
121  transaction->gtDbOpen = true;
122  }
123  if (!transaction->gtDbExists) {
124  if (policy == CREATE) {
125  gtSchemaHandle->create();
126  transaction->gtDbExists = true;
127  } else {
128  if (policy == THROW)
129  throwException("GT Database does not exist.", "SessionImpl::openGTDb");
130  }
131  }
132  }
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12
void cond::persistency::SessionImpl::openIovDb ( SessionImpl::FailureOnOpeningPolicy  policy = THROW)

Definition at line 98 of file SessionImpl.cc.

References CREATE, iovSchemaHandle, THROW, cond::persistency::throwException(), and transaction.

98  {
99  if (!transaction.get())
100  throwException("The transaction is not active.", "SessionImpl::openIovDb");
101  if (!transaction->iovDbOpen) {
102  transaction->iovDbExists = iovSchemaHandle->exists();
103  transaction->iovDbOpen = true;
104  }
105  if (!transaction->iovDbExists) {
106  if (policy == CREATE) {
107  iovSchemaHandle->create();
108  transaction->iovDbExists = true;
109  } else {
110  if (policy == THROW)
111  throwException("IOV Database does not exist.", "SessionImpl::openIovDb");
112  }
113  }
114  }
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12
void cond::persistency::SessionImpl::openRunInfoDb ( )

Definition at line 134 of file SessionImpl.cc.

References runInfoSchemaHandle, cond::persistency::throwException(), and transaction.

134  {
135  if (!transaction.get())
136  throwException("The transaction is not active.", "SessionImpl::openRunInfoDb");
137  if (!transaction->runInfoDbOpen) {
138  transaction->runInfoDbExists = runInfoSchemaHandle->exists();
139  transaction->runInfoDbOpen = true;
140  }
141  if (!transaction->runInfoDbExists) {
142  throwException("RunInfo Database does not exist.", "SessionImpl::openRunInfoDb");
143  }
144  }
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12
void cond::persistency::SessionImpl::rollbackTransaction ( )

Definition at line 78 of file SessionImpl.cc.

References gtSchemaHandle, iovSchemaHandle, CommonMethods::lock(), runInfoSchemaHandle, transaction, and transactionLock.

Referenced by cond::persistency::Transaction::rollback().

78  {
79  std::unique_lock<std::recursive_mutex> lock;
80  lock.swap(transactionLock);
81  if (transaction) {
82  transaction->rollback();
83  transaction.reset();
84  iovSchemaHandle.reset();
85  gtSchemaHandle.reset();
86  runInfoSchemaHandle.reset();
87  }
88  }
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
std::unique_lock< std::recursive_mutex > transactionLock
Definition: SessionImpl.h:77
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
IRunInfoSchema & cond::persistency::SessionImpl::runInfoSchema ( )

Definition at line 171 of file SessionImpl.cc.

References runInfoSchemaHandle.

171 { return *runInfoSchemaHandle; }
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
void cond::persistency::SessionImpl::startTransaction ( bool  readOnly = true)

Definition at line 47 of file SessionImpl.cc.

References coralSession, gtSchemaHandle, iovSchemaHandle, CommonMethods::lock(), runInfoSchemaHandle, cond::persistency::throwException(), transaction, transactionLock, and transactionMutex.

Referenced by cond::persistency::Transaction::start().

47  {
48  std::unique_lock<std::recursive_mutex> lock(transactionMutex);
49  if (!transaction.get()) {
50  coralSession->transaction().start(readOnly);
51  iovSchemaHandle.reset(new IOVSchema(coralSession->nominalSchema()));
52  gtSchemaHandle.reset(new GTSchema(coralSession->nominalSchema()));
53  runInfoSchemaHandle.reset(new RunInfoSchema(coralSession->nominalSchema()));
54  transaction.reset(new CondDBTransaction(coralSession));
55  } else {
56  if (!readOnly)
57  throwException("An update transaction is already active.", "SessionImpl::startTransaction");
58  }
59  transaction->clients++;
60  transactionLock.swap(lock);
61  }
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
std::recursive_mutex transactionMutex
Definition: SessionImpl.h:76
std::unique_lock< std::recursive_mutex > transactionLock
Definition: SessionImpl.h:77
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12

Member Data Documentation

std::string cond::persistency::SessionImpl::connectionString

Definition at line 69 of file SessionImpl.h.

std::shared_ptr<coral::ISessionProxy> cond::persistency::SessionImpl::coralSession

Definition at line 67 of file SessionImpl.h.

Referenced by close(), isActive(), and startTransaction().

std::unique_ptr<IGTSchema> cond::persistency::SessionImpl::gtSchemaHandle
std::unique_ptr<IIOVSchema> cond::persistency::SessionImpl::iovSchemaHandle
std::unique_ptr<IRunInfoSchema> cond::persistency::SessionImpl::runInfoSchemaHandle
std::unique_ptr<ITransaction> cond::persistency::SessionImpl::transaction
std::unique_lock<std::recursive_mutex> cond::persistency::SessionImpl::transactionLock
private

Definition at line 77 of file SessionImpl.h.

Referenced by commitTransaction(), rollbackTransaction(), and startTransaction().

std::recursive_mutex cond::persistency::SessionImpl::transactionMutex
private

Definition at line 76 of file SessionImpl.h.

Referenced by startTransaction().