From 12e4d68abfa4d5cb2f5e5c5d4af4ac68ee191deb Mon Sep 17 00:00:00 2001 From: Dario Date: Fri, 17 Jul 2020 13:35:14 +0200 Subject: [PATCH] change auto-reconnect --- .../SingletonManager/ConnectionManager.cpp | 20 ++++++++++++++++++- src/cpp/SingletonManager/ConnectionManager.h | 16 ++++----------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/cpp/SingletonManager/ConnectionManager.cpp b/src/cpp/SingletonManager/ConnectionManager.cpp index e45013404..c8752ee6e 100644 --- a/src/cpp/SingletonManager/ConnectionManager.cpp +++ b/src/cpp/SingletonManager/ConnectionManager.cpp @@ -56,10 +56,28 @@ bool ConnectionManager::setConnectionsFromConfig(const Poco::Util::LayeredConfig dbConfig << "db=" << dbName << ";"; dbConfig << "user=" << config.getString(firstKeyPart + ".db.user", "root") << ";"; dbConfig << "password=" << config.getString(firstKeyPart + ".db.password", "") << ";"; - dbConfig << "auto-reconnect=true"; + dbConfig << "auto-reconnect=false"; setConnection(dbConfig.str(), type); return true; +} + +Poco::Data::Session ConnectionManager::getConnection(ConnectionType type) +{ + Poco::ScopedLock _lock(mWorkingMutex); + + if (CONNECTION_MYSQL_LOGIN_SERVER != type && CONNECTION_MYSQL_PHP_SERVER != type) { + addError(new ParamError("[ConnectionManager::getConnection]", "Connection Type unknown", std::to_string(type))); + throw Poco::NotFoundException("Connection Type unknown", std::to_string(type)); + } + auto session = mSessionPools.getPool(mSessionPoolNames[type]).get(); + if (!session.isConnected()) { + printf("reconnect called\n"); + session.reconnect(); + } + //std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S"); + //printf("[getConnection] %s impl: %p\n", dateTimeString.data(), session.impl()); + return session; } \ No newline at end of file diff --git a/src/cpp/SingletonManager/ConnectionManager.h b/src/cpp/SingletonManager/ConnectionManager.h index d7eb65ec3..c56695187 100644 --- a/src/cpp/SingletonManager/ConnectionManager.h +++ b/src/cpp/SingletonManager/ConnectionManager.h @@ -35,18 +35,10 @@ public: } } - inline Poco::Data::Session getConnection(ConnectionType type) { - Poco::ScopedLock _lock(mWorkingMutex); - - if (CONNECTION_MYSQL_LOGIN_SERVER != type && CONNECTION_MYSQL_PHP_SERVER != type) { - addError(new ParamError("[ConnectionManager::getConnection]", "Connection Type unknown", std::to_string(type))); - throw Poco::NotFoundException("Connection Type unknown", std::to_string(type)); - } - auto session = mSessionPools.getPool(mSessionPoolNames[type]).get(); - //std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S"); - //printf("[getConnection] %s impl: %p\n", dateTimeString.data(), session.impl()); - return session; - } + //! \brief return connection from pool, check if connected in if not, call reconnect on it + //! + //! In the past I used auto-reconnect but it didn't work everytime as expectet + Poco::Data::Session getConnection(ConnectionType type); protected: ConnectionManager();