From c2ba2ed8e1b085a16bc1a313e7e3e32c79dc2867 Mon Sep 17 00:00:00 2001
From: Marco De Marco <demarco@oats.inaf.it>
Date: Mon, 25 Nov 2013 15:04:53 +0100
Subject: [PATCH] Database manager modified, minor fix

---
 src/DBManager.cpp       | 27 ++++++++++++---------------
 src/PlainSession.cpp    |  2 +-
 src/PlainSession.h      |  2 +-
 src/ProtocolManager.cpp | 32 ++++++++++++++++----------------
 src/SSLSession.cpp      |  2 +-
 src/SSLSession.h        |  5 ++++-
 6 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/src/DBManager.cpp b/src/DBManager.cpp
index 5068f4c..c5bfee7 100644
--- a/src/DBManager.cpp
+++ b/src/DBManager.cpp
@@ -16,10 +16,6 @@ DBManager::DBManager(Tango::DeviceImpl* deviceImpl_p,
     m_configuration_sp(configuration_sp)
 {
     DEBUG_STREAM << "DBManager::DBManager()" << endl;
-
-    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();
-
-    m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber));
 }
 
 //==============================================================================
@@ -51,6 +47,10 @@ void DBManager::connect() throw(soci::soci_error)
 
     boost::mutex::scoped_lock lock(m_connectionPoolMutex);
 
+    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();
+
+    m_connectionPool_sp.reset(new soci::connection_pool(connectionNumber));
+
     std::stringstream connection;
     connection << " host=" << m_configuration_sp->getDatabaseHost();
     connection << " port=" << m_configuration_sp->getDatabasePort();
@@ -61,12 +61,8 @@ void DBManager::connect() throw(soci::soci_error)
         INFO_STREAM << "DBManager::connect(): " << connection.str() << endl;
     #endif
 
-    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();
-
     for(unsigned int i=0; i<connectionNumber; ++i)
-    {
         m_connectionPool_sp->at(i).open(soci::mysql, connection.str());
-    }
 }
 
 //==============================================================================
@@ -78,12 +74,7 @@ void DBManager::disconnect()
 
     boost::mutex::scoped_lock lock(m_connectionPoolMutex);
 
-    unsigned int connectionNumber = m_configuration_sp->getDatabaseConnectionNumber();
-
-    for(unsigned int i=0; i<connectionNumber; ++i)
-    {
-        m_connectionPool_sp->at(i).close();
-    }
+    m_connectionPool_sp.reset();
 }
 
 //==============================================================================
@@ -94,6 +85,9 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema,
 {
     DEBUG_STREAM << "DBManager::retrieveInformation()" << endl;
 
+    if(!m_connectionPool_sp)
+        throw soci::soci_error("Connection pool not initialized");
+
     soci::session session(*m_connectionPool_sp);
 
     if(session.get_backend() == NULL)
@@ -119,12 +113,15 @@ DBManager::RowsetSP DBManager::retrieveNewTuples(std::string schema,
 {
     DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl;
 
+    if(!m_connectionPool_sp)
+        throw soci::soci_error("Connection pool not initialized");
+
     soci::session session(*m_connectionPool_sp);
 
     if(session.get_backend() == NULL)
         session.reconnect();
 
-    //@workaround: this does not work: timestamp parameter not passed
+//    @workaround: this does not work: timestamp parameter not passed
 //    RowsetSP rows(new soci::rowset<soci::row>((session.prepare << "select * from "
 //        << schema << "." << table << " where update_time > :timestamp "
 //        << "order by update_time asc", soci::use(update_time,"timestamp"))));
diff --git a/src/PlainSession.cpp b/src/PlainSession.cpp
index 44755d5..497768b 100644
--- a/src/PlainSession.cpp
+++ b/src/PlainSession.cpp
@@ -145,7 +145,7 @@ void PlainSession::startWriteResponse()
             m_strand.wrap(boost::bind(&PlainSession::handleWriteResponse,
                 shared_from_this(), boost::asio::placeholders::error)));
     }
-    catch(std::runtime_error& ec)
+    catch(std::exception& ec)
     {
         ERROR_STREAM << "SSLSession::startWriteResponse() "
             << ec.what() << " from " << m_remoteEndpoint << endl;
diff --git a/src/PlainSession.h b/src/PlainSession.h
index 16dcbcd..88f4431 100644
--- a/src/PlainSession.h
+++ b/src/PlainSession.h
@@ -46,7 +46,7 @@ public:
 
 protected:
 //------------------------------------------------------------------------------
-//  [Protected] Utilities methods
+//  [Protected] Request response methods
 //------------------------------------------------------------------------------
     virtual void startReadRequestHeader();
 
diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp
index 5d0cbbd..693379a 100644
--- a/src/ProtocolManager.cpp
+++ b/src/ProtocolManager.cpp
@@ -100,13 +100,13 @@ ResponseSP ProtocolManager::prepareAuthroisation(RequestSP request_sp)
 
     response_sp->set_type(Response::AUTHORIZATION);
 
-    Response::Authorization* auth_resp = response_sp->mutable_authorization();
+    Response::Authorization* authResp = response_sp->mutable_authorization();
 
     if(!m_isAuthorised)
     {
-        const Request::Authorization& auth_req = request_sp->authorization();
-        std::string username =  auth_req.username();
-        std::string password = auth_req.password();
+        const Request::Authorization& authReq = request_sp->authorization();
+        std::string username =  authReq.username();
+        std::string password = authReq.password();
 
         if(m_configuration_sp->isUserAuthorized(username, password))
         {
@@ -115,8 +115,8 @@ ResponseSP ProtocolManager::prepareAuthroisation(RequestSP request_sp)
 
             m_isAuthorised = true;
 
-            auth_resp->set_state(Response::Authorization::ACCEPTED);
-            auth_resp->set_status("Authorization accepted");
+            authResp->set_state(Response::Authorization::ACCEPTED);
+            authResp->set_status("Authorization accepted");
         }
         else
         {
@@ -125,8 +125,8 @@ ResponseSP ProtocolManager::prepareAuthroisation(RequestSP request_sp)
 
             m_isAuthorised = false;
 
-            auth_resp->set_state(Response::Authorization::REJECTED);
-            auth_resp->set_status("Invalid username or password");
+            authResp->set_state(Response::Authorization::REJECTED);
+            authResp->set_status("Invalid username or password");
         }
     }
     else
@@ -134,8 +134,8 @@ ResponseSP ProtocolManager::prepareAuthroisation(RequestSP request_sp)
         WARN_STREAM << "ProtocolManager::prepareAuthroisation() "
             << "Already authorized from " << m_remoteEndpoint << endl;
 
-        auth_resp->set_state(Response::Authorization::REJECTED);
-        auth_resp->set_status("Already authorized");
+        authResp->set_state(Response::Authorization::REJECTED);
+        authResp->set_status("Already authorized");
     }
 
     return response_sp;
@@ -173,7 +173,7 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp)
                     std::stringstream errorStream;
                     errorStream << "Table " << m_validatedSchema << "."
                         << m_validatedTable << " not exists";
-                    throw soci::soci_error(errorStream.str());
+                    throw std::runtime_error(errorStream.str());
                 }
 
                 if(validationReq.columns_size() != (int)informationList.size())
@@ -181,7 +181,7 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp)
                     std::stringstream errorStream;
                     errorStream << "Table " << m_validatedSchema << "."
                         << m_validatedTable << " has different columns size";
-                    throw soci::soci_error(errorStream.str());
+                    throw std::runtime_error(errorStream.str());
                 }
 
                 for(int i=0; i<validationReq.columns_size(); ++i)
@@ -357,10 +357,10 @@ void ProtocolManager::validateColumn(const Request::Validation::Column& column,
             }
 
             #ifdef VERBOSE_DEBUG
-                INFO_STREAM << "ProtocolManager::validateColumn(): " << columnName
-                    << " " << columnType << " " << isNullable << endl;
-                INFO_STREAM << "ProtocolManager::validateColumn(): " << column.name()
-                    << " " << column.type() << " " << column.nullable() << endl;
+                INFO_STREAM << "ProtocolManager::validateColumn() "
+                    << column.name() << "<->" << columnName << " "
+                    << column.type() << "<->" << columnType << " "
+                    << column.nullable() << "<->" << isNullable << endl;
             #endif
         }
     }
diff --git a/src/SSLSession.cpp b/src/SSLSession.cpp
index d361d8e..d1de097 100644
--- a/src/SSLSession.cpp
+++ b/src/SSLSession.cpp
@@ -181,7 +181,7 @@ void SSLSession::startWriteResponse()
             m_strand.wrap(boost::bind(&SSLSession::handleWriteResponse,
             shared_from_this(), boost::asio::placeholders::error)));
     }
-    catch(std::runtime_error& ec)
+    catch(std::exception& ec)
     {
         ERROR_STREAM << "SSLSession::startWriteResponse() "
             << ec.what() << " from " << m_remoteEndpoint << endl;
diff --git a/src/SSLSession.h b/src/SSLSession.h
index 6020f15..decc6cb 100644
--- a/src/SSLSession.h
+++ b/src/SSLSession.h
@@ -51,12 +51,15 @@ public:
 
 protected:
 //------------------------------------------------------------------------------
-//  [Protected] Utilities methods
+//  [Protected] SSL handshake initialization methods
 //------------------------------------------------------------------------------
     virtual void startHandShake();
 
     virtual void handleHandShake(const boost::system::error_code&);
 
+//------------------------------------------------------------------------------
+//  [Protected] Request response methods
+//------------------------------------------------------------------------------
     virtual void startReadRequestHeader();
 
     virtual void startReadRequestBody(boost::uint32_t);
-- 
GitLab