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

◆ FailureOnOpeningPolicy

Enumerator
THROW 
DO_NOT_THROW 
CREATE 

Definition at line 42 of file SessionImpl.h.

Constructor & Destructor Documentation

◆ SessionImpl() [1/2]

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

Definition at line 28 of file SessionImpl.cc.

28 : coralSession() {}

◆ SessionImpl() [2/2]

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) {}

◆ ~SessionImpl()

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

Definition at line 33 of file SessionImpl.cc.

33 { close(); }

References close().

Member Function Documentation

◆ close()

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

Definition at line 35 of file SessionImpl.cc.

35  {
36  if (coralSession.get()) {
37  if (coralSession->transaction().isActive()) {
38  coralSession->transaction().rollback();
39  }
40  coralSession.reset();
41  }
42  transaction.reset();
43  }

References coralSession, and transaction.

Referenced by esMonitoring.AsyncLineReaderMixin::handle_close(), esMonitoring.FDJsonServer::handle_close(), and ~SessionImpl().

◆ commitTransaction()

void cond::persistency::SessionImpl::commitTransaction ( )

Definition at line 63 of file SessionImpl.cc.

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  }

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

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

◆ gtSchema()

IGTSchema & cond::persistency::SessionImpl::gtSchema ( )

Definition at line 169 of file SessionImpl.cc.

169 { return *gtSchemaHandle; }

References gtSchemaHandle.

◆ iovSchema()

IIOVSchema & cond::persistency::SessionImpl::iovSchema ( )

Definition at line 167 of file SessionImpl.cc.

167 { return *iovSchemaHandle; }

References iovSchemaHandle.

◆ isActive()

bool cond::persistency::SessionImpl::isActive ( ) const

Definition at line 45 of file SessionImpl.cc.

45 { return coralSession.get(); }

References coralSession.

◆ isTransactionActive()

bool cond::persistency::SessionImpl::isTransactionActive ( bool  deep = true) const

Definition at line 90 of file SessionImpl.cc.

90  {
91  if (!transaction)
92  return false;
93  if (!deep)
94  return true;
95  return transaction->isActive();
96  }

References transaction.

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

◆ openDb()

void cond::persistency::SessionImpl::openDb ( )

Definition at line 146 of file SessionImpl.cc.

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  }

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

◆ openGTDb()

void cond::persistency::SessionImpl::openGTDb ( SessionImpl::FailureOnOpeningPolicy  policy = THROW)

Definition at line 116 of file SessionImpl.cc.

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  }

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

◆ openIovDb()

void cond::persistency::SessionImpl::openIovDb ( SessionImpl::FailureOnOpeningPolicy  policy = THROW)

Definition at line 98 of file SessionImpl.cc.

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  }

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

◆ openRunInfoDb()

void cond::persistency::SessionImpl::openRunInfoDb ( )

Definition at line 134 of file SessionImpl.cc.

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  }

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

◆ rollbackTransaction()

void cond::persistency::SessionImpl::rollbackTransaction ( )

Definition at line 78 of file SessionImpl.cc.

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  }

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

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

◆ runInfoSchema()

IRunInfoSchema & cond::persistency::SessionImpl::runInfoSchema ( )

Definition at line 171 of file SessionImpl.cc.

171 { return *runInfoSchemaHandle; }

References runInfoSchemaHandle.

◆ startTransaction()

void cond::persistency::SessionImpl::startTransaction ( bool  readOnly = true)

Definition at line 47 of file SessionImpl.cc.

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  }

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

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

Member Data Documentation

◆ connectionString

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

Definition at line 69 of file SessionImpl.h.

◆ coralSession

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

Definition at line 67 of file SessionImpl.h.

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

◆ gtSchemaHandle

std::unique_ptr<IGTSchema> cond::persistency::SessionImpl::gtSchemaHandle

◆ iovSchemaHandle

std::unique_ptr<IIOVSchema> cond::persistency::SessionImpl::iovSchemaHandle

◆ runInfoSchemaHandle

std::unique_ptr<IRunInfoSchema> cond::persistency::SessionImpl::runInfoSchemaHandle

◆ transaction

std::unique_ptr<ITransaction> cond::persistency::SessionImpl::transaction

◆ transactionLock

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().

◆ transactionMutex

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

Definition at line 76 of file SessionImpl.h.

Referenced by startTransaction().

cond::persistency::SessionImpl::connectionString
std::string connectionString
Definition: SessionImpl.h:69
cond::persistency::SessionImpl::transactionLock
std::unique_lock< std::recursive_mutex > transactionLock
Definition: SessionImpl.h:77
cond::persistency::SessionImpl::close
void close()
Definition: SessionImpl.cc:35
cond::persistency::SessionImpl::DO_NOT_THROW
Definition: SessionImpl.h:42
CommonMethods.lock
def lock()
Definition: CommonMethods.py:82
cond::persistency::SessionImpl::iovSchemaHandle
std::unique_ptr< IIOVSchema > iovSchemaHandle
Definition: SessionImpl.h:71
cond::persistency::SessionImpl::runInfoSchemaHandle
std::unique_ptr< IRunInfoSchema > runInfoSchemaHandle
Definition: SessionImpl.h:73
cond::persistency::SessionImpl::transactionMutex
std::recursive_mutex transactionMutex
Definition: SessionImpl.h:76
cond::persistency::SessionImpl::coralSession
std::shared_ptr< coral::ISessionProxy > coralSession
Definition: SessionImpl.h:67
cond::persistency::SessionImpl::gtSchemaHandle
std::unique_ptr< IGTSchema > gtSchemaHandle
Definition: SessionImpl.h:72
cond::persistency::throwException
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:12
cond::persistency::SessionImpl::CREATE
Definition: SessionImpl.h:42
cond::persistency::SessionImpl::THROW
Definition: SessionImpl.h:42
cond::persistency::SessionImpl::FailureOnOpeningPolicy
FailureOnOpeningPolicy
Definition: SessionImpl.h:42
cond::persistency::SessionImpl::transaction
std::unique_ptr< ITransaction > transaction
Definition: SessionImpl.h:70