MXS-619: Send fake response for unconnected DCBs
This causes the connection failure to be counted as an authentication failure instead of a connection error. The former never causes the host to be blocked which effectively solves the problem for most cases. The only case where this would not work is where the network buffer for a backend DCB is full right after the connection is created.
This commit is contained in:
parent
e725ebb7d0
commit
484ff06795
@ -1415,10 +1415,20 @@ static int gw_backend_hangup(DCB* dcb)
|
||||
static int gw_backend_close(DCB* dcb)
|
||||
{
|
||||
mxb_assert(dcb->session);
|
||||
MySQLProtocol* proto = (MySQLProtocol*)dcb->protocol;
|
||||
|
||||
if (proto->protocol_auth_state == MXS_AUTH_STATE_INIT
|
||||
|| proto->protocol_auth_state == MXS_AUTH_STATE_PENDING_CONNECT
|
||||
|| proto->protocol_auth_state == MXS_AUTH_STATE_CONNECTED)
|
||||
{
|
||||
MYSQL_session client;
|
||||
gw_get_shared_session_auth_info(dcb->session->client_dcb, &client);
|
||||
memset(proto->scramble, 0, sizeof(proto->scramble));
|
||||
dcb_write(dcb, gw_generate_auth_response(&client, proto, false, false, 0));
|
||||
}
|
||||
|
||||
/** Send COM_QUIT to the backend being closed */
|
||||
GWBUF* quitbuf = mysql_create_com_quit(NULL, 0);
|
||||
mysql_send_com_quit(dcb, 0, quitbuf);
|
||||
dcb_write(dcb, mysql_create_com_quit(NULL, 0));
|
||||
|
||||
/** Free protocol data */
|
||||
mysql_protocol_done(dcb);
|
||||
|
Loading…
x
Reference in New Issue
Block a user