Merge branch '2.3' into 2.4

This commit is contained in:
Markus Mäkelä
2019-09-19 15:37:43 +03:00
3 changed files with 24 additions and 26 deletions

View File

@ -609,16 +609,9 @@ bool RWSplitSession::route_session_write(GWBUF* querybuf, uint8_t command, uint3
} }
else else
{ {
std::string status; MXS_ERROR("Could not route session command: %s. Connection status: %s",
for (const auto& a : m_backends)
{
status += "\n";
status += a->get_verbose_status();
}
MXS_ERROR("Could not route session command: %s. Connection information: %s",
attempted_write ? "Write to all backends failed" : "All connections have failed", attempted_write ? "Write to all backends failed" : "All connections have failed",
status.c_str()); get_verbose_status().c_str());
} }
return nsucc; return nsucc;
@ -669,8 +662,8 @@ RWBackend* RWSplitSession::get_master_backend()
else else
{ {
MXS_ERROR("Cannot choose server '%s' as the master because it is not " MXS_ERROR("Cannot choose server '%s' as the master because it is not "
"in use and a new connection to it cannot be created.", "in use and a new connection to it cannot be created. Connection status: %s",
master->name()); master->name(), get_verbose_status().c_str());
} }
} }

View File

@ -1254,25 +1254,17 @@ bool RWSplitSession::handle_error_new_connection(DCB* backend_dcb, GWBUF* errmsg
route_stored_query(); route_stored_query();
} }
bool succp = false; bool ok = can_recover_servers() || can_continue_session();
if (!can_recover_servers()) if (!ok)
{ {
succp = can_continue_session(); MXS_ERROR("Unable to continue session as all connections have failed and "
"new connections cannot be created. Last server to fail was '%s'.",
if (!succp) backend->name());
{ MXS_INFO("Connection status: %s", get_verbose_status().c_str());
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();
} }
return succp; return ok;
} }
/** /**

View File

@ -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) inline bool is_large_query(GWBUF* buf)
{ {
uint32_t buflen = gwbuf_length(buf); uint32_t buflen = gwbuf_length(buf);