Fixed crashing bug in Admin module when ProxySQL is started with --no-start
When a client connection is terminated, the backend connection is returned to connection pool on if not in a transaction
pull/190/head
René Cannaò 11 years ago
parent 4b8ac564ac
commit ca1704ba40

@ -347,6 +347,9 @@ int MySQL_Session::handler() {
handler___client_DSS_QUERY_SENT___server_DSS_NOT_INITIALIZED__get_connection();
// FIXME : handle missing connection from connection pool
// FIXME : perhaps is a goto __exit_DSS__STATE_NOT_INITIALIZED after setting time wait
thread->mypolls.add(POLLIN|POLLOUT, server_fd, server_myds, curtime);
if (server_myds->DSS!=STATE_READY) {
@ -518,7 +521,7 @@ void MySQL_Session::handler___status_WAITING_SERVER_DATA___STATE_EOF1(PtrSize_t
if (c==0xfe) {
myprot_server.process_pkt_EOF((unsigned char *)pkt->ptr,pkt->size);
//fprintf(stderr,"hid=%d status=%d\n", mybe->hostgroup_id, myprot_server.prot_status);
if ((myprot_server.prot_status & SERVER_STATUS_IN_TRANS)==0) {
if ((mybe->myconn->reusable==true) && ((myprot_server.prot_status & SERVER_STATUS_IN_TRANS)==0)) {
MyHGM->push_MyConn_to_pool(mybe->myconn);
mybe->myconn=NULL;
server_myds->unplug_backend();
@ -752,6 +755,7 @@ void MySQL_Session::handler___client_DSS_QUERY_SENT___server_DSS_NOT_INITIALIZED
// Get a MySQL Connection
mybe->myconn=MyHGM->get_MyConn_from_pool(mybe->hostgroup_id);
mybe->myconn->myds=server_myds;
if (mybe->myconn->fd==-1) {
// we didn't get a valid connection, we need to create one

@ -1925,6 +1925,7 @@ bool Standard_ProxySQL_Admin::set_variable(char *name, char *value) { // this i
void Standard_ProxySQL_Admin::stats___mysql_commands_counters() {
if (!GloQPro) return;
SQLite3_result * resultset=GloQPro->get_stats_commands_counters();
if (resultset==NULL) return;
// fprintf(stderr,"Number of columns: %d, rows: %d\n", result->columns, result->rows_count);
@ -1946,7 +1947,9 @@ void Standard_ProxySQL_Admin::stats___mysql_commands_counters() {
statsdb->execute("COMMIT");
delete resultset;
}
void Standard_ProxySQL_Admin::stats___mysql_query_rules() {
if (!GloQPro) return;
SQLite3_result * resultset=GloQPro->get_stats_query_rules();
if (resultset==NULL) return;
// fprintf(stderr,"Number of columns: %d, rows: %d\n", result->columns, result->rows_count);

@ -160,7 +160,7 @@ void MySQL_Backend::reset() {
server_myds=NULL;
}
if (myconn) {
if (myconn->reusable==true) {
if (myconn->reusable==true && ((myconn->myds->sess->myprot_server.prot_status & SERVER_STATUS_IN_TRANS)==0)) {
//server_myds->myconn=NULL;
//delete myconn;
MyHGM->push_MyConn_to_pool(myconn);
@ -168,6 +168,7 @@ void MySQL_Backend::reset() {
myconn=NULL;
} else {
// MyConnArray *MCA=MyConnPool->MyConnArray_lookup(myconn->mshge->MSptr->address, myconn->myconn.user, myconn->mshge->MSptr->password, myconn->mshge->MSptr->db, myconn->mshge->MSptr->port);
MyHGM->destroy_MyConn_from_pool(myconn);
delete myconn;
}
};

Loading…
Cancel
Save