mysqlxx::Pool: trying to reconnect only if connection was successful at least once [#CONV-2807].

This commit is contained in:
Alexey Milovidov 2011-09-01 18:15:15 +00:00
parent f306242847
commit f5f4599922

View File

@ -185,7 +185,7 @@ public:
int MaxConn = MYSQLXX_POOL_DEFAULT_MAX_CONNECTIONS, int MaxConn = MYSQLXX_POOL_DEFAULT_MAX_CONNECTIONS,
const std::string & InitConnect_ = "") const std::string & InitConnect_ = "")
: DefaultConnections(DefConn), MaxConnections(MaxConn), InitConnect(InitConnect_), : DefaultConnections(DefConn), MaxConnections(MaxConn), InitConnect(InitConnect_),
Initialized(false), CfgName(ConfigName) Initialized(false), CfgName(ConfigName), was_successful(false)
{ {
} }
@ -267,6 +267,9 @@ private:
/** @brief Имя базы данных. */ /** @brief Имя базы данных. */
std::string DBName; std::string DBName;
/** @brief Хотя бы один раз было успешное соединение. */
bool was_successful;
/** @brief Выполняет инициализацию класса, если мы еще не инициализированы. */ /** @brief Выполняет инициализацию класса, если мы еще не инициализированы. */
inline void Initialize() inline void Initialize()
{ {
@ -303,7 +306,8 @@ private:
} }
catch (mysqlxx::ConnectionFailed & e) catch (mysqlxx::ConnectionFailed & e)
{ {
if (e.errnum() == ER_ACCESS_DENIED_ERROR if (!was_successful
|| e.errnum() == ER_ACCESS_DENIED_ERROR
|| e.errnum() == ER_DBACCESS_DENIED_ERROR || e.errnum() == ER_DBACCESS_DENIED_ERROR
|| e.errnum() == ER_BAD_DB_ERROR) || e.errnum() == ER_BAD_DB_ERROR)
{ {
@ -322,6 +326,7 @@ private:
} }
} }
was_successful = true;
afterConnect(Conn->Conn); afterConnect(Conn->Conn);
Connections.push_back(Conn); Connections.push_back(Conn);
return Conn; return Conn;