diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc index 93e70a2f5..9271c424c 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc @@ -609,16 +609,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; @@ -669,8 +662,8 @@ RWBackend* RWSplitSession::get_master_backend() else { MXS_ERROR("Cannot choose server '%s' as the master because it is not " - "in use and a new connection to it cannot be created.", - master->name()); + "in use and a new connection to it cannot be created. Connection status: %s", + master->name(), get_verbose_status().c_str()); } } diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 5b169396b..2bf63395c 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -1254,25 +1254,17 @@ bool RWSplitSession::handle_error_new_connection(DCB* backend_dcb, GWBUF* errmsg route_stored_query(); } - bool succp = false; + bool ok = can_recover_servers() || can_continue_session(); - if (!can_recover_servers()) + if (!ok) { - succp = can_continue_session(); - - if (!succp) - { - MXS_ERROR("Unable to continue session as all connections have failed, " - "last server to fail was '%s'.", backend->name()); - } - } - else - { - // Try to replace failed connections - succp = open_connections(); + 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 succp; + return ok; } /** diff --git a/server/modules/routing/readwritesplit/rwsplitsession.hh b/server/modules/routing/readwritesplit/rwsplitsession.hh index e4821aca2..97da7476e 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.hh +++ b/server/modules/routing/readwritesplit/rwsplitsession.hh @@ -262,6 +262,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);