CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DbConnectionString.cc
Go to the documentation of this file.
3 #include "DbConnectionString.h"
4 //
7 
8 namespace cond {
9 
10  namespace persistency {
11 
12  unsigned int
14  unsigned int count=0;
15  std::string::size_type slashpos( 0 );
16  while( slashpos!=std::string::npos){
17  slashpos = input.find('/', slashpos );
18  if ( slashpos != std::string::npos ){
19  ++count;
20  // start next search after this word
21  slashpos += 1;
22  }
23  }
24  return count;
25  }
26 
27  std::pair<std::string,std::string> makeFrontierConnectionString( const std::string& initialConnection,
28  const std::string& transactionId ){
29  std::string realConn = initialConnection;
30  std::string proto("frontier://");
31  std::string::size_type fpos=initialConnection.find(proto);
32  unsigned int nslash=countslash(initialConnection.substr(proto.size(),initialConnection.size()-fpos));
33  if(nslash==1){
34  edm::Service<edm::SiteLocalConfig> localconfservice;
35  if( !localconfservice.isAvailable() ){
36  throwException("SiteLocalConfigService is not available","cond::makeRealConnectString");
37  }
38  realConn=localconfservice->lookupCalibConnect(initialConnection);
39  }
40  if (!transactionId.empty()) {
41  size_t l = realConn.rfind('/');
42  realConn.insert(l,"(freshkey="+transactionId+')');
43  }
44 
45  std::string refreshConnect;
46  std::string::size_type startRefresh = realConn.find("://");
47  if (startRefresh != std::string::npos){
48  startRefresh += 3;
49  }
50  std::string::size_type endRefresh=realConn.rfind("/", std::string::npos);
51  if (endRefresh == std::string::npos){
52  refreshConnect = realConn;
53  }else{
54  refreshConnect = realConn.substr(startRefresh, endRefresh-startRefresh);
55  if(refreshConnect.substr(0,1) != "("){
56  //if the connect string is not a complicated parenthesized string,
57  // an http:// needs to be at the beginning of it
58  refreshConnect.insert(0, "http://");
59  }
60  }
61  return std::make_pair(realConn,refreshConnect);
62  }
63 
64  std::pair<std::string,std::string> getRealConnectionString( const std::string& initialConnection ){
65  return getRealConnectionString( initialConnection, "" );
66  }
67 
68  std::pair<std::string,std::string> getRealConnectionString( const std::string& initialConnection,
69  const std::string& transId ){
70  auto connData = parseConnectionString( initialConnection );
71  if( std::get<0>(connData) == "frontier" ) return makeFrontierConnectionString( initialConnection, transId );
72  return std::make_pair(initialConnection,"");
73  }
74 
75  }
76 }
std::pair< std::string, std::string > makeFrontierConnectionString(const std::string &initialConnection, const std::string &transactionId)
std::pair< std::string, std::string > getRealConnectionString(const std::string &initialConnection)
virtual std::string const lookupCalibConnect(std::string const &input) const =0
uint16_t size_type
static std::string const input
Definition: EdmProvDump.cc:44
bool isAvailable() const
Definition: Service.h:46
void throwException(const std::string &message, const std::string &methodName)
Definition: Exception.cc:11
unsigned int countslash(const std::string &input)