MXS-2562: Stop immediately on mid-resultset failure

If a server fails mid-resultset, there's not a lot we can do to recover
the situation. A few cases could be handled (e.g. generate an ERR if the
resultset has proceeded to the row processing stage) but these fall
outside the scope of the original issue.
This commit is contained in:
Markus Mäkelä
2019-06-27 23:18:33 +03:00
parent 74d15cee09
commit 3b6387c952
2 changed files with 22 additions and 0 deletions

View File

@ -947,6 +947,18 @@ void RWSplitSession::handleError(GWBUF* errmsgbuf,
SRWBackend& backend = get_backend_from_dcb(problem_dcb);
mxb_assert(backend->in_use());
if (backend->reply_has_started())
{
MXS_ERROR("Server '%s' was lost in the middle of a resultset, cannot continue the session: %s",
backend->name(), extract_error(errmsgbuf).c_str());
// This effectively causes an instant termination of the client connection and prevents any errors
// from being sent to the client (MXS-2562).
dcb_close(m_client);
*succp = true;
return;
}
switch (action)
{
case ERRACT_NEW_CONNECTION: