CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ConnectionPool.cc
Go to the documentation of this file.
2 #include "DbConnectionString.h"
3 #include "SessionImpl.h"
4 #include "IOVSchema.h"
5 //
8 // CMSSW includes
10 // coral includes
11 #include "RelationalAccess/ConnectionService.h"
12 #include "RelationalAccess/IWebCacheControl.h"
13 #include "RelationalAccess/ISessionProxy.h"
14 #include "RelationalAccess/IConnectionServiceConfiguration.h"
15 #include "CoralKernel/Context.h"
16 #include "CoralKernel/IProperty.h"
17 #include "CoralKernel/IPropertyManager.h"
18 // externals
19 #include <boost/filesystem/operations.hpp>
20 
21 namespace cond {
22 
23  namespace persistency {
24 
27  configure();
28  }
29 
31  delete m_pluginManager;
32  }
33 
35  m_authPath = p;
36  }
37 
38  void ConnectionPool::setAuthenticationSystem( int authSysCode ){
39  m_authSys = authSysCode;
40  }
41 
44  }
45 
46  void ConnectionPool::setLogging( bool flag ){
47  m_loggingEnabled = flag;
48  }
49 
50  void ConnectionPool::setParameters( const edm::ParameterSet& connectionPset ){
51  //set the connection parameters from a ParameterSet
52  //if a parameter is not defined, keep the values already set in the data members
53  //(i.e. default if no other setters called, or the ones currently available)
54  setAuthenticationPath( connectionPset.getUntrackedParameter<std::string>( "authenticationPath", m_authPath ) );
55  setAuthenticationSystem( connectionPset.getUntrackedParameter<int>( "authenticationSystem", m_authSys ) );
57  int messageLevel = connectionPset.getUntrackedParameter<int>( "messageLevel", 0 ); //0 corresponds to Error level, current default
58  coral::MsgLevel level = m_messageLevel;
59  switch (messageLevel) {
60  case 0:
61  level = coral::Error;
62  break;
63  case 1:
64  level = coral::Warning;
65  break;
66  case 2:
67  level = coral::Info;
68  break;
69  case 3:
70  level = coral::Debug;
71  break;
72  default:
73  level = coral::Error;
74  }
75  setMessageVerbosity( level );
76  setLogging( connectionPset.getUntrackedParameter<bool>( "logging", m_loggingEnabled ) );
77  }
78 
80  return m_loggingEnabled;
81  }
82 
83  void ConnectionPool::configure( coral::IConnectionServiceConfiguration& coralConfig ){
84  coralConfig.disablePoolAutomaticCleanUp();
85  coralConfig.disableConnectionSharing();
86  // message streaming
87  coral::MessageStream::setMsgVerbosity( m_messageLevel );
88  std::string authServiceName( "CORAL/Services/EnvironmentAuthenticationService" );
90  // authentication
91  if( authPath.empty() ){
92  // first try to check the env...
93  const char* authEnv = ::getenv( cond::auth::COND_AUTH_PATH );
94  if(authEnv){
95  authPath += authEnv;
96  }
97  }
98  int authSys = m_authSys;
99  // first attempt, look at the env...
100  const char* authSysEnv = ::getenv( cond::auth::COND_AUTH_SYS );
101  if( authSysEnv ){
102  authSys = ::atoi( authSysEnv );
103  }
104  if( authSys !=CondDbKey && authSys != CoralXMLFile ){
105  // take the default
106  authSys = CondDbKey;
107  }
108  std::string servName( "" );
109  if( authSys == CondDbKey ){
110  if( authPath.empty() ){
111  const char* authEnv = ::getenv( "HOME" );
112  if(authEnv) {
113  authPath += authEnv;
114  }
115  }
116  servName = "COND/Services/RelationalAuthenticationService";
117  } else if( authSys == CoralXMLFile ){
118  if( authPath.empty() ){
119  authPath = ".";
120  }
121  servName = "COND/Services/XMLAuthenticationService";
122  }
123  if( !authPath.empty() ){
124  authServiceName = servName;
125  coral::Context::instance().PropertyManager().property(cond::auth::COND_AUTH_PATH_PROPERTY)->set(authPath);
126  coral::Context::instance().loadComponent( authServiceName, m_pluginManager );
127  }
128 
129  coralConfig.setAuthenticationService( authServiceName );
130  }
131 
133  coral::ConnectionService connServ;
134  configure( connServ.configuration() );
135  }
136 
137  boost::shared_ptr<coral::ISessionProxy> ConnectionPool::createCoralSession( const std::string& connectionString,
138  const std::string& transactionId,
139  bool writeCapable ){
140  coral::ConnectionService connServ;
141  //all sessions opened with this connection service will share the same frontier security option.
142  std::pair<std::string,std::string> fullConnectionPars = getConnectionParams( connectionString, transactionId, m_frontierSecurity );
143  if( !fullConnectionPars.second.empty() ) {
144  //all sessions opened with this connection service will share the same TTL settings for TAG, IOV, and PAYLOAD tables.
145  connServ.webCacheControl().setTableTimeToLive( fullConnectionPars.second, TAG::tname, 1 );
146  connServ.webCacheControl().setTableTimeToLive( fullConnectionPars.second, IOV::tname, 1 );
147  connServ.webCacheControl().setTableTimeToLive( fullConnectionPars.second, PAYLOAD::tname, 3 );
148  }
149 
150  return boost::shared_ptr<coral::ISessionProxy>( connServ.connect( fullConnectionPars.first,
152  writeCapable ? coral::Update : coral::ReadOnly ) );
153  }
154 
156  const std::string& transactionId,
157  bool writeCapable ){
158  boost::shared_ptr<coral::ISessionProxy> coralSession = createCoralSession( connectionString, transactionId, writeCapable );
159  std::shared_ptr<SessionImpl> impl( new SessionImpl( coralSession, connectionString ) );
160  return Session( impl );
161  }
162 
164  return createSession( connectionString, "", writeCapable );
165  }
166 
168  return createSession( connectionString, transactionId );
169  }
170 
171  boost::shared_ptr<coral::ISessionProxy> ConnectionPool::createCoralSession( const std::string& connectionString,
172  bool writeCapable ){
173  return createCoralSession( connectionString, "", writeCapable );
174  }
175 
178  }
179 
180 
181 
182  }
183 }
T getUntrackedParameter(std::string const &, T const &) const
static PFTauRenderPlugin instance
boost::shared_ptr< coral::ISessionProxy > createCoralSession(const std::string &connectionString, bool writeCapable=false)
static constexpr const char *const COND_AUTH_PATH
Definition: Auth.h:10
static constexpr const char *const COND_AUTH_PATH_PROPERTY
Definition: Auth.h:27
void setParameters(const edm::ParameterSet &connectionPset)
static char const * tname
Definition: IOVSchema.h:48
static char const * tname
Definition: IOVSchema.h:13
static constexpr const char *const COND_READER_ROLE
Definition: Auth.h:17
void setAuthenticationSystem(int authSysCode)
Session createSession(const std::string &connectionString, bool writeCapable=false)
void setMessageVerbosity(coral::MsgLevel level)
string connectionString
Definition: autoCondHLT.py:4
std::pair< std::string, std::string > getConnectionParams(const std::string &connectionString, const std::string &transactionId, const std::string &signature)
Session createReadOnlySession(const std::string &connectionString, const std::string &transactionId)
static constexpr const char *const COND_AUTH_SYS
Definition: Auth.h:11
tuple level
Definition: testEve_cfg.py:34
static constexpr const char *const COND_WRITER_ROLE
Definition: Auth.h:16
cond::CoralServiceManager * m_pluginManager
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined signature
Definition: Activities.doc:4
static char const * tname
Definition: IOVSchema.h:79
void setAuthenticationPath(const std::string &p)
const bool Debug
void setFrontierSecurity(const std::string &signature)