From f0e3a87159fd1834bdc19f3555a2b5a19fc9f086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Mon, 29 Mar 2021 13:00:49 +0200 Subject: [PATCH] Introduce ignore_vars in MySQL_Variables This vector lists all the variables that proxysql will parse but ignore --- include/MySQL_Variables.h | 3 ++- lib/MySQL_Session.cpp | 3 +++ lib/MySQL_Thread.cpp | 2 +- lib/MySQL_Variables.cpp | 8 ++++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/MySQL_Variables.h b/include/MySQL_Variables.h index 692c83df0..60755da11 100644 --- a/include/MySQL_Variables.h +++ b/include/MySQL_Variables.h @@ -30,7 +30,8 @@ class MySQL_Variables { public: std::string variables_regexp; - + // ignore_vars is a list of all variables that proxysql will parse but ignore its value + std::vector ignore_vars; public: MySQL_Variables(); diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index 51433a6a2..38ecfcceb 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -5738,6 +5738,9 @@ bool MySQL_Session::handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_C return false; proxy_debug(PROXY_DEBUG_MYSQL_COM, 8, "Changing connection TX ISOLATION to %s\n", value1.c_str()); } + } else if (std::find(mysql_variables.ignore_vars.begin(), mysql_variables.ignore_vars.end(), var) != mysql_variables.ignore_vars.end()) { + std::string value1 = *values; + proxy_info("%s = %s\n", var.c_str(), value1.c_str()); } else { std::string value1 = *values; std::size_t found_at = value1.find("@"); diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index d875c3723..b37ec3ab6 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -4036,7 +4036,7 @@ bool MySQL_Thread::init() { match_regexes[0]=new Session_Regex((char *)"^SET (|SESSION |@@|@@session.)SQL_LOG_BIN( *)(:|)=( *)"); std::stringstream ss; - ss << "^SET (|SESSION |@@|@@session.)(" << mysql_variables.variables_regexp << "wait_timeout|SESSION_TRACK_GTIDS|TX_ISOLATION( *)(:|)=( *))"; + ss << "^SET (|SESSION |@@|@@session.)(" << mysql_variables.variables_regexp << "SESSION_TRACK_GTIDS|TX_ISOLATION( *)(:|)=( *))"; match_regexes[1]=new Session_Regex((char *)ss.str().c_str()); match_regexes[2]=new Session_Regex((char *)"^SET(?: +)(|SESSION +)TRANSACTION(?: +)(?:(?:(ISOLATION(?: +)LEVEL)(?: +)(REPEATABLE(?: +)READ|READ(?: +)COMMITTED|READ(?: +)UNCOMMITTED|SERIALIZABLE))|(?:(READ)(?: +)(WRITE|ONLY)))"); diff --git a/lib/MySQL_Variables.cpp b/lib/MySQL_Variables.cpp index 2c56553b1..ddf766e9e 100644 --- a/lib/MySQL_Variables.cpp +++ b/lib/MySQL_Variables.cpp @@ -20,6 +20,10 @@ update_var MySQL_Variables::updaters[SQL_NAME_LAST]; MySQL_Variables::MySQL_Variables() { + // add here all the variables we want proxysql to recognize, but ignore + ignore_vars.push_back("interactve_timeout"); + ignore_vars.push_back("wait_timeout"); + ignore_vars.push_back("net_read_timeout"); variables_regexp = ""; for (auto i = 0; i < SQL_NAME_LAST; i++) { if (i == SQL_CHARACTER_SET || i == SQL_CHARACTER_ACTION || i == SQL_SET_NAMES) { @@ -38,6 +42,10 @@ MySQL_Variables::MySQL_Variables() { variables_regexp += "|"; } } + for (std::vector::iterator it=ignore_vars.begin(); it != ignore_vars.end(); it++) { + variables_regexp += *it; + variables_regexp += "|"; + } } MySQL_Variables::~MySQL_Variables() {}