diff --git a/lib/MySQL_HostGroups_Manager.cpp b/lib/MySQL_HostGroups_Manager.cpp index bf14fce71..50115fa49 100644 --- a/lib/MySQL_HostGroups_Manager.cpp +++ b/lib/MySQL_HostGroups_Manager.cpp @@ -3598,6 +3598,7 @@ void MySQL_HostGroups_Manager::p_update_connection_pool_update_gauge(std::string } void MySQL_HostGroups_Manager::p_update_connection_pool() { + std::vector cur_servers_ids {}; wrlock(); for (int i = 0; i < static_cast(MyHostGroups->len); i++) { MyHGC *myhgc = static_cast(MyHostGroups->index(i)); @@ -3611,6 +3612,7 @@ void MySQL_HostGroups_Manager::p_update_connection_pool() { {"endpoint", endpoint_addr + ":" + endpoint_port}, {"hostgroup", hostgroup_id } }; + cur_servers_ids.push_back(endpoint_id); // proxysql_connection_pool_bytes_data_recv metric std::map recv_pool_bytes_labels = common_labels; @@ -3661,6 +3663,39 @@ void MySQL_HostGroups_Manager::p_update_connection_pool() { status.p_connection_pool_status_map, mysrvc->status + 1, p_hg_dyn_gauge::connection_pool_status); } } + + // Remove the non-present servers for the gauge metrics + vector keys {}; + vector f_keys {}; + + for (const auto& key : status.p_connection_pool_status_map) { + keys.push_back(key.first); + } + + for (const auto& key : keys) { + if (std::find(cur_servers_ids.begin(), cur_servers_ids.end(), key) == cur_servers_ids.end()) { + f_keys.push_back(key); + } + } + + for (const auto& key : f_keys) { + auto gauge = status.p_connection_pool_status_map[key]; + status.p_dyn_gauge_array[p_hg_dyn_gauge::connection_pool_status]->Remove(gauge); + status.p_connection_pool_status_map.erase(key); + + gauge = status.p_connection_pool_conn_used_map[key]; + status.p_dyn_gauge_array[p_hg_dyn_gauge::connection_pool_conn_free]->Remove(gauge); + status.p_connection_pool_conn_used_map.erase(key); + + gauge = status.p_connection_pool_conn_free_map[key]; + status.p_dyn_gauge_array[p_hg_dyn_gauge::connection_pool_conn_used]->Remove(gauge); + status.p_connection_pool_conn_free_map.erase(key); + + gauge = status.p_connection_pool_latency_us_map[key]; + status.p_dyn_gauge_array[p_hg_dyn_gauge::connection_pool_latency_us]->Remove(gauge); + status.p_connection_pool_latency_us_map.erase(key); + } + wrunlock(); }