From cdaa8b1764083005fe527e070f4dc10374e072c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Mon, 12 Dec 2022 15:49:06 +0100 Subject: [PATCH] Honor 'mysql-verbose_query_error' format for warnings #3935 --- include/MySQL_Session.h | 1 + lib/MySQL_Session.cpp | 4 ++++ lib/mysql_connection.cpp | 43 ++++++++++++++++++++++++++-------------- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/include/MySQL_Session.h b/include/MySQL_Session.h index 8fd6e2e2f..36086de0f 100644 --- a/include/MySQL_Session.h +++ b/include/MySQL_Session.h @@ -62,6 +62,7 @@ class Query_Info { uint64_t affected_rows; uint64_t rows_sent; uint64_t waiting_since; + std::string show_warnings_prev_query_digest; Query_Info(); ~Query_Info(); diff --git a/lib/MySQL_Session.cpp b/lib/MySQL_Session.cpp index 02fd92289..1360184de 100644 --- a/lib/MySQL_Session.cpp +++ b/lib/MySQL_Session.cpp @@ -4901,6 +4901,10 @@ handler_again: if (mysql_thread___log_mysql_warnings_enabled) { auto warn_no = mysql_warning_count(myconn->mysql); if (warn_no > 0) { + // Backup actual digest causing the warning before it's destroyed by finishing the request + const char* digest_text = CurrentQuery.get_digest_text(); + CurrentQuery.show_warnings_prev_query_digest = digest_text == NULL ? "" : digest_text; + RequestEnd(myds); writeout(); diff --git a/lib/mysql_connection.cpp b/lib/mysql_connection.cpp index 9e93cbbcd..a02e274be 100644 --- a/lib/mysql_connection.cpp +++ b/lib/mysql_connection.cpp @@ -1548,21 +1548,34 @@ handler_again: async_fetch_row_start=false; if (mysql_row) { if (myds && myds->sess && myds->sess->status == SHOW_WARNINGS) { - if (mysql_thread___verbose_query_error) - proxy_warning("Warning during query on (%d,%s,%d,%lu). User '%s@%s', schema '%s'," - " digest_text '%s', level '%s', code '%s', message '%s'\n", - parent->myhgc->hid, parent->address, parent->port, - mysql->thread_id, - myds->sess->client_myds->myconn->userinfo->username, - (myds->sess->client_myds->addr.addr ? myds->sess->client_myds->addr.addr : (char *)"unknown"), - myds->sess->client_myds->myconn->userinfo->schemaname, - myds->sess->CurrentQuery.get_digest_text(), - mysql_row[0], mysql_row[1], mysql_row[2]); - else - proxy_warning("Warning during query on (%d,%s,%d,%lu). " - "Level '%s', code '%s',"" message '%s'\n", - parent->myhgc->hid, parent->address, parent->port, - mysql->thread_id, mysql_row[0], mysql_row[1], mysql_row[2]); + if (mysql_thread___verbose_query_error) { + MySQL_Data_Stream* client_myds = myds->sess->client_myds; + const char* username = ""; + const char* schema = ""; + const char* client_addr = ""; + const char* digest_text = myds->sess->CurrentQuery.show_warnings_prev_query_digest.c_str(); + + if (client_myds) { + client_addr = client_myds->addr.addr ? client_myds->addr.addr : (char *)"unknown"; + + if (client_myds->myconn && client_myds->myconn->userinfo) { + username = client_myds->myconn->userinfo->username; + schema = client_myds->myconn->userinfo->schemaname; + } + } + + proxy_warning( + "Warning during query on (%d,%s,%d,%lu). User '%s@%s', schema '%s', digest_text '%s', level '%s', code '%s', message '%s'\n", + parent->myhgc->hid, parent->address, parent->port, get_mysql_thread_id(), username, client_addr, + schema, digest_text, mysql_row[0], mysql_row[1], mysql_row[2] + ); + } else { + proxy_warning( + "Warning during query on (%d,%s,%d,%lu). Level '%s', code '%s', message '%s'\n", + parent->myhgc->hid, parent->address, parent->port, get_mysql_thread_id(), mysql_row[0], mysql_row[1], + mysql_row[2] + ); + } } unsigned int br=MyRS->add_row(mysql_row); __sync_fetch_and_add(&parent->bytes_recv,br);