From 4838d75cd3e8450029e69964c01c4fbe85f13a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Thu, 21 Oct 2021 10:35:47 +0200 Subject: [PATCH] Added new mysql variable 'mysql-unshun_algorithm' #3649 --- include/MySQL_Thread.h | 1 + include/proxysql_structs.h | 2 ++ lib/MySQL_HostGroups_Manager.cpp | 4 +++- lib/MySQL_Thread.cpp | 4 ++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/MySQL_Thread.h b/include/MySQL_Thread.h index 308f6b8f8..7a5bde801 100644 --- a/include/MySQL_Thread.h +++ b/include/MySQL_Thread.h @@ -459,6 +459,7 @@ class MySQL_Threads_Handler int ping_timeout_server; int shun_on_failures; int shun_recovery_time_sec; + int unshun_algorithm; int query_retries_on_failure; bool client_multi_statements; bool connection_warming; diff --git a/include/proxysql_structs.h b/include/proxysql_structs.h index a6279a879..760467c40 100644 --- a/include/proxysql_structs.h +++ b/include/proxysql_structs.h @@ -747,6 +747,7 @@ __thread int mysql_thread___ping_interval_server_msec; __thread int mysql_thread___ping_timeout_server; __thread int mysql_thread___shun_on_failures; __thread int mysql_thread___shun_recovery_time_sec; +__thread int mysql_thread___unshun_algorithm; __thread int mysql_thread___query_retries_on_failure; __thread bool mysql_thread___client_multi_statements; __thread int mysql_thread___connect_retries_on_failure; @@ -905,6 +906,7 @@ extern __thread int mysql_thread___ping_interval_server_msec; extern __thread int mysql_thread___ping_timeout_server; extern __thread int mysql_thread___shun_on_failures; extern __thread int mysql_thread___shun_recovery_time_sec; +extern __thread int mysql_thread___unshun_algorithm; extern __thread int mysql_thread___query_retries_on_failure; extern __thread bool mysql_thread___client_multi_statements; extern __thread int mysql_thread___connect_retries_on_failure; diff --git a/lib/MySQL_HostGroups_Manager.cpp b/lib/MySQL_HostGroups_Manager.cpp index 303742a9b..3b079055a 100644 --- a/lib/MySQL_HostGroups_Manager.cpp +++ b/lib/MySQL_HostGroups_Manager.cpp @@ -2819,7 +2819,9 @@ MySrvC *MyHGC::get_random_MySrvC(char * gtid_uuid, uint64_t gtid_trxid, int max_ // This is ok for now because we only have a global mutex. // If one day we implement a mutex per hostgroup (unlikely, // but possible), this must be taken into consideration - MyHGM->unshun_server_all_hostgroups(mysrvc->address, mysrvc->port, t, max_wait_sec, &mysrvc->myhgc->hid); + if (mysql_thread___unshun_algorithm == 1) { + MyHGM->unshun_server_all_hostgroups(mysrvc->address, mysrvc->port, t, max_wait_sec, &mysrvc->myhgc->hid); + } // if a server is taken back online, consider it immediately if ( mysrvc->current_latency_us < ( mysrvc->max_latency_us ? mysrvc->max_latency_us : mysql_thread___default_max_latency_ms*1000 ) ) { // consider the host only if not too far if (gtid_trxid) { diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index ea275b937..f3665b814 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -411,6 +411,7 @@ void MySQL_Listeners_Manager::del(unsigned int idx) { static char * mysql_thread_variables_names[]= { (char *)"shun_on_failures", (char *)"shun_recovery_time_sec", + (char *)"unshun_algorithm", (char *)"query_retries_on_failure", (char *)"client_multi_statements", (char *)"client_host_cache_size", @@ -1033,6 +1034,7 @@ MySQL_Threads_Handler::MySQL_Threads_Handler() { memset(&variables, 0, sizeof(variables)); variables.shun_on_failures=5; variables.shun_recovery_time_sec=10; + variables.unshun_algorithm=0; variables.query_retries_on_failure=1; variables.client_multi_statements=true; variables.client_host_cache_size=0; @@ -2176,6 +2178,7 @@ char ** MySQL_Threads_Handler::get_variables_list() { VariablesPointers_int["reset_connection_algorithm"] = make_tuple(&variables.reset_connection_algorithm, 1, 2, false); VariablesPointers_int["shun_on_failures"] = make_tuple(&variables.shun_on_failures, 0, 10000000, false); VariablesPointers_int["shun_recovery_time_sec"] = make_tuple(&variables.shun_recovery_time_sec, 0, 3600*24*365, false); + VariablesPointers_int["unshun_algorithm"] = make_tuple(&variables.unshun_algorithm, 0, 1, false); VariablesPointers_int["hostgroup_manager_verbose"] = make_tuple(&variables.hostgroup_manager_verbose, 1, 2, false); VariablesPointers_int["tcp_keepalive_time"] = make_tuple(&variables.tcp_keepalive_time, 0, 7200, false); VariablesPointers_int["min_num_servers_lantency_awareness"] = make_tuple(&variables.min_num_servers_lantency_awareness, 0, 10000, false); @@ -3836,6 +3839,7 @@ void MySQL_Thread::refresh_variables() { mysql_thread___ping_timeout_server=GloMTH->get_variable_int((char *)"ping_timeout_server"); mysql_thread___shun_on_failures=GloMTH->get_variable_int((char *)"shun_on_failures"); mysql_thread___shun_recovery_time_sec=GloMTH->get_variable_int((char *)"shun_recovery_time_sec"); + mysql_thread___unshun_algorithm=GloMTH->get_variable_int((char *)"unshun_algorithm"); mysql_thread___query_retries_on_failure=GloMTH->get_variable_int((char *)"query_retries_on_failure"); mysql_thread___connect_retries_on_failure=GloMTH->get_variable_int((char *)"connect_retries_on_failure"); mysql_thread___client_multi_statements=(bool)GloMTH->get_variable_int((char *)"client_multi_statements");