diff --git a/include/PgSQL_Monitor.hpp b/include/PgSQL_Monitor.hpp index 2f0156a3d..77f03b214 100644 --- a/include/PgSQL_Monitor.hpp +++ b/include/PgSQL_Monitor.hpp @@ -50,10 +50,12 @@ struct PgSQL_Monitor { uint64_t repl_lag_check_OK { 0 }; uint64_t ssl_connections_OK { 0 }; uint64_t non_ssl_connections_OK { 0 }; - // DNS cache counters (independent of MySQL_Monitor's counters) - unsigned long long dns_cache_queried { 0 }; - unsigned long long dns_cache_lookup_success { 0 }; - unsigned long long dns_cache_record_updated { 0 }; + // DNS cache counters (independent of MySQL_Monitor's counters). Atomic + // because the resolver workers increment them while readers (stats, + // p_update_metrics) load them from other threads. + std::atomic dns_cache_queried { 0 }; + std::atomic dns_cache_lookup_success { 0 }; + std::atomic dns_cache_record_updated { 0 }; /////////////////////////////////////////////////////////////////////////// // PgSQL-side DNS cache, independent of MySQL_Monitor's cache. Lifetime is diff --git a/lib/MySQL_Monitor.cpp b/lib/MySQL_Monitor.cpp index c1046b0e7..1ea507717 100644 --- a/lib/MySQL_Monitor.cpp +++ b/lib/MySQL_Monitor.cpp @@ -1204,9 +1204,9 @@ void MySQL_Monitor::p_update_metrics() { p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_read_only_check_err], GloMyMon->read_only_check_ERR); p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_replication_lag_check_ok], GloMyMon->replication_lag_check_OK); p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_replication_lag_check_err], GloMyMon->replication_lag_check_ERR); - p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_queried], GloMyMon->dns_cache_queried); - p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_lookup_success], GloMyMon->dns_cache_lookup_success); - p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_record_updated], GloMyMon->dns_cache_record_updated); + p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_queried], GloMyMon->dns_cache_queried.load()); + p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_lookup_success], GloMyMon->dns_cache_lookup_success.load()); + p_update_counter(this->metrics.p_counter_array[p_mon_counter::mysql_monitor_dns_cache_record_updated], GloMyMon->dns_cache_record_updated.load()); } } diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index 1e4847663..dac2df051 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -5336,19 +5336,19 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_GlobalStatus(bool _memory) { } { pta[0] = (char*)"MySQL_Monitor_dns_cache_queried"; - sprintf(buf, "%llu", GloMyMon->dns_cache_queried); + sprintf(buf, "%llu", GloMyMon->dns_cache_queried.load()); pta[1] = buf; result->add_row(pta); } { pta[0] = (char*)"MySQL_Monitor_dns_cache_lookup_success"; - sprintf(buf, "%llu", GloMyMon->dns_cache_lookup_success); + sprintf(buf, "%llu", GloMyMon->dns_cache_lookup_success.load()); pta[1] = buf; result->add_row(pta); } { pta[0] = (char*)"MySQL_Monitor_dns_cache_record_updated"; - sprintf(buf, "%llu", GloMyMon->dns_cache_record_updated); + sprintf(buf, "%llu", GloMyMon->dns_cache_record_updated.load()); pta[1] = buf; result->add_row(pta); } diff --git a/lib/PgSQL_Thread.cpp b/lib/PgSQL_Thread.cpp index 963c88740..51a373015 100644 --- a/lib/PgSQL_Thread.cpp +++ b/lib/PgSQL_Thread.cpp @@ -4760,19 +4760,19 @@ SQLite3_result* PgSQL_Threads_Handler::SQL3_GlobalStatus(bool _memory) { } { pta[0] = (char*)"PgSQL_Monitor_dns_cache_queried"; - sprintf(buf, "%llu", GloPgMon->dns_cache_queried); + sprintf(buf, "%llu", GloPgMon->dns_cache_queried.load()); pta[1] = buf; result->add_row(pta); } { pta[0] = (char*)"PgSQL_Monitor_dns_cache_lookup_success"; - sprintf(buf, "%llu", GloPgMon->dns_cache_lookup_success); + sprintf(buf, "%llu", GloPgMon->dns_cache_lookup_success.load()); pta[1] = buf; result->add_row(pta); } { pta[0] = (char*)"PgSQL_Monitor_dns_cache_record_updated"; - sprintf(buf, "%llu", GloPgMon->dns_cache_record_updated); + sprintf(buf, "%llu", GloPgMon->dns_cache_record_updated.load()); pta[1] = buf; result->add_row(pta); }