diff --git a/lib/MySQL_HostGroups_Manager.cpp b/lib/MySQL_HostGroups_Manager.cpp index 346a295f1..1c8aab150 100644 --- a/lib/MySQL_HostGroups_Manager.cpp +++ b/lib/MySQL_HostGroups_Manager.cpp @@ -99,7 +99,6 @@ void MySrvConnList::drop_all_connections() { while (conns->len) { MySQL_Connection *conn=(MySQL_Connection *)conns->remove_index_fast(0); delete conn; - __sync_fetch_and_sub(&MyHGM->status.server_connections_connected,1); } } @@ -325,6 +324,7 @@ bool MySQL_HostGroups_Manager::commit() { proxy_warning("Removed server at address %lld, hostgroup %s, address %s port %s. Setting status OFFLINE HARD and immediately dropping all free connections. Used connections will be dropped when trying to use them\n", ptr, r->fields[1], r->fields[2], r->fields[3]); MySrvC *mysrvc=(MySrvC *)ptr; mysrvc->status=MYSQL_SERVER_STATUS_OFFLINE_HARD; + __sync_fetch_and_sub(&status.server_connections_created, mysrvc->ConnectionsFree->conns->len); mysrvc->ConnectionsFree->drop_all_connections(); } } @@ -415,7 +415,6 @@ void MySQL_HostGroups_Manager::purge_mysql_servers_table() { // no more connections for OFFLINE_HARD server, removing it mysrvc=(MySrvC *)myhgc->mysrvs->servers->remove_index_fast(j); delete mysrvc; - __sync_fetch_and_sub(&status.server_connections_created, 1); } } } @@ -557,7 +556,6 @@ void MySQL_HostGroups_Manager::push_MyConn_to_pool(MySQL_Connection *c) { mysrvc=(MySrvC *)c->parent; proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 7, "Returning MySQL_Connection %p, server %s:%d with status %d\n", c, mysrvc->address, mysrvc->port, mysrvc->status); mysrvc->ConnectionsUsed->remove(c); - __sync_fetch_and_sub(&status.server_connections_created, 1); if (c->largest_query_length > (unsigned int)mysql_thread___threshold_query_length) { proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 7, "Destroying MySQL_Connection %p, server %s:%d with status %d . largest_query_length = %lu\n", c, mysrvc->address, mysrvc->port, mysrvc->status, c->largest_query_length); delete c; @@ -566,7 +564,6 @@ void MySQL_HostGroups_Manager::push_MyConn_to_pool(MySQL_Connection *c) { if (mysrvc->status==MYSQL_SERVER_STATUS_ONLINE) { if (c->async_state_machine==ASYNC_IDLE) { mysrvc->ConnectionsFree->add(c); - status.server_connections_created++; } else { proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 7, "Destroying MySQL_Connection %p, server %s:%d with status %d\n", c, mysrvc->address, mysrvc->port, mysrvc->status); delete c; @@ -658,7 +655,6 @@ MySQL_Connection * MySrvConnList::get_random_MyConn() { i=rand()%l; conn=(MySQL_Connection *)conns->remove_index_fast(i); proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 7, "Returning MySQL Connection %p, server %s:%d\n", conn, conn->parent->address, conn->parent->port); - __sync_fetch_and_sub(&MyHGM->status.server_connections_created, 1); return conn; } else { conn = new MySQL_Connection(); @@ -669,6 +665,7 @@ MySQL_Connection * MySrvConnList::get_random_MyConn() { conn->options.server_capabilities|=CLIENT_COMPRESS; conn->options.compression_min_length=mysrvc->compression; } + __sync_fetch_and_add(&MyHGM->status.server_connections_created, 1); proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 7, "Returning MySQL Connection %p, server %s:%d\n", conn, conn->parent->address, conn->parent->port); return conn; } @@ -687,7 +684,6 @@ MySQL_Connection * MySQL_HostGroups_Manager::get_MyConn_from_pool(unsigned int _ conn=mysrvc->ConnectionsFree->get_random_MyConn(); mysrvc->ConnectionsUsed->add(conn); status.myconnpoll_get_ok++; - status.server_connections_connected++; } // conn->parent=mysrvc; wrunlock(); @@ -760,6 +756,7 @@ int MySQL_HostGroups_Manager::get_multiple_idle_connections(int _hid, unsigned l MySrvC *mysrvc=(MySrvC *)myhgc->mysrvs->servers->index(j); if (mysrvc->status!=MYSQL_SERVER_STATUS_ONLINE) { proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 5, "Server %s:%d is not online\n", mysrvc->address, mysrvc->port); + __sync_fetch_and_sub(&status.server_connections_created, mysrvc->ConnectionsFree->conns->len); mysrvc->ConnectionsFree->drop_all_connections(); } @@ -827,6 +824,7 @@ SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool() { MySrvC *mysrvc=(MySrvC *)myhgc->mysrvs->servers->index(j); if (mysrvc->status!=MYSQL_SERVER_STATUS_ONLINE) { proxy_debug(PROXY_DEBUG_MYSQL_CONNPOOL, 5, "Server %s:%d is not online\n", mysrvc->address, mysrvc->port); + __sync_fetch_and_sub(&status.server_connections_created, mysrvc->ConnectionsFree->conns->len); mysrvc->ConnectionsFree->drop_all_connections(); } // drop idle connections if beyond max_connection