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:
@ -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:
|
||||
|
Reference in New Issue
Block a user