Changeset - be3af42a21a7
[Not reviewed]
0 2 0
Vitaly Takmazov - 7 years ago 2018-09-21 22:59:27
vitalyster@gmail.com
MySQLBackend: disable autoreconnect, control CR_SERVER_LOST manually

* correctly recreate prepared statements
* do not close connection while reconnecting
* signed/unsigned comparison fix
2 files changed with 6 insertions and 8 deletions:
0 comments (0 inline, 0 general)
include/transport/MySQLBackend.h
Show inline comments
 
@@ -129,7 +129,7 @@ class MySQLBackend : public StorageBackend
 
				std::vector<MYSQL_BIND> m_params;
 
				std::vector<MYSQL_BIND> m_results;
 
				int m_error;
 
				unsigned m_resultOffset;
 
				int m_resultOffset;
 
				unsigned m_offset;
 
				std::string m_string;
 
		};
libtransport/MySQLBackend.cpp
Show inline comments
 
@@ -30,7 +30,7 @@
 
	int ret = STMT->execute(); \
 
	if (ret == 0) \
 
		exec_ok = true; \
 
	else if (ret == CR_SERVER_LOST) { \
 
	else if (ret == CR_SERVER_LOST || ret == CR_SERVER_GONE_ERROR) { \
 
		LOG4CXX_INFO(logger, "MySQL connection lost. Reconnecting...");\
 
		disconnect(); \
 
		connect(); \
 
@@ -52,7 +52,7 @@ MySQLBackend::Statement::Statement(MYSQL *conn, const std::string &format, const
 
	m_string = statement;
 
	m_stmt = mysql_stmt_init(conn);
 
	if (mysql_stmt_prepare(m_stmt, statement.c_str(), statement.size())) {
 
		LOG4CXX_ERROR(logger, statement << " " << mysql_error(conn));
 
		LOG4CXX_ERROR(logger, statement << " " << mysql_stmt_error(m_stmt));
 
		return;
 
	}
 

	
 
@@ -126,14 +126,14 @@ MySQLBackend::Statement::Statement(MYSQL *conn, const std::string &format, const
 
	}
 

	
 
	if (mysql_stmt_bind_param(m_stmt, &m_params.front())) {
 
		LOG4CXX_ERROR(logger, statement << " " << mysql_error(conn));
 
		LOG4CXX_ERROR(logger, statement << " " << mysql_stmt_error(m_stmt));
 
	}
 

	
 
	if (m_resultOffset < 0)
 
		m_resultOffset = format.size();
 
	else {
 
		if (mysql_stmt_bind_result(m_stmt, &m_results.front())) {
 
			LOG4CXX_ERROR(logger, statement << " " << mysql_error(conn));
 
			LOG4CXX_ERROR(logger, statement << " " << mysql_stmt_error(m_stmt));
 
		}
 
	}
 
	m_resultOffset = 0;
 
@@ -227,12 +227,11 @@ MySQLBackend::MySQLBackend(Config *config) {
 
	m_config = config;
 
	m_prefix = CONFIG_STRING(m_config, "database.prefix");
 
	mysql_init(&m_conn);
 
	my_bool my_true = 1;
 
	mysql_options(&m_conn, MYSQL_OPT_RECONNECT, &my_true);
 
}
 

	
 
MySQLBackend::~MySQLBackend(){
 
	disconnect();
 
	mysql_close(&m_conn);
 
}
 

	
 
void MySQLBackend::disconnect() {
 
@@ -257,7 +256,6 @@ void MySQLBackend::disconnect() {
 
	delete m_setUserOnline;
 
	delete m_getOnlineUsers;
 
	delete m_getUsers;
 
	mysql_close(&m_conn);
 
}
 

	
 
bool MySQLBackend::connect() {
0 comments (0 inline, 0 general)