From f46f873dc122c9acd1ba8730f3863ebc595ed1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 19 Sep 2019 13:22:58 +0300 Subject: [PATCH] Add verbose backend status helper This allows the same verbose information to be logged in the cases where it is of use. Mostly this information can be used to figure out why a certain session was closed. --- .../routing/readwritesplit/rwsplit_route_stmt.cc | 13 +++---------- .../routing/readwritesplit/rwsplitsession.cc | 1 + .../routing/readwritesplit/rwsplitsession.hh | 13 +++++++++++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc index 50e4907ae..9af9b6c55 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc @@ -591,16 +591,9 @@ bool RWSplitSession::route_session_write(GWBUF* querybuf, uint8_t command, uint3 } else { - std::string status; - for (const auto& a : m_backends) - { - status += "\n"; - status += a->get_verbose_status(); - } - - MXS_ERROR("Could not route session command: %s. Connection information: %s", + MXS_ERROR("Could not route session command: %s. Connection status: %s", attempted_write ? "Write to all backends failed" : "All connections have failed", - status.c_str()); + get_verbose_status().c_str()); } return nsucc; @@ -739,7 +732,7 @@ SRWBackend RWSplitSession::get_master_backend() { MXS_ERROR("Cannot choose server '%s' as the master because it is not " "in use and a new connection to it cannot be created. Connection status: %s", - master->name(), master->get_verbose_status().c_str()); + master->name(), get_verbose_status().c_str()); } } diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 0cc70e97d..09dae7656 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -1182,6 +1182,7 @@ bool RWSplitSession::handle_error_new_connection(DCB* backend_dcb, GWBUF* errmsg MXS_ERROR("Unable to continue session as all connections have failed and " "new connections cannot be created. Last server to fail was '%s'.", backend->name()); + MXS_INFO("Connection status: %s", get_verbose_status().c_str()); } return ok; diff --git a/server/modules/routing/readwritesplit/rwsplitsession.hh b/server/modules/routing/readwritesplit/rwsplitsession.hh index ded4b20b5..7d2a8a713 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.hh +++ b/server/modules/routing/readwritesplit/rwsplitsession.hh @@ -301,6 +301,19 @@ private: }); } + std::string get_verbose_status() + { + std::string status; + + for (const auto& a : m_backends) + { + status += "\n"; + status += a->get_verbose_status(); + } + + return status; + } + inline bool is_large_query(GWBUF* buf) { uint32_t buflen = gwbuf_length(buf);