MXS-1503: Disable reconnection in clientReply

Disabled the reconnection in clientReply prior to moving the connection
creation code into routeQuery. This allows new connections to be made when
they are needed.
This commit is contained in:
Markus Mäkelä
2018-03-27 12:42:48 +03:00
parent 9f256f50eb
commit a0a37bf793
3 changed files with 8 additions and 36 deletions

View File

@ -1268,26 +1268,10 @@ static void clientReply(MXS_ROUTER *instance,
rses->expected_responses, backend->name());
}
/**
* Active cursor means that reply is from session command
* execution.
*/
if (backend->session_command_count())
{
/** This discards all responses that have already been sent to the client */
bool rconn = false;
process_sescmd_response(rses, backend, &writebuf, &rconn);
if (rconn && !rses->router->config().disable_sescmd_history)
{
select_connect_backend_servers(
rses->rses_nbackends,
rses->rses_config.max_slave_connections,
rses->client_dcb->session,
rses->router->config(), rses->backends, rses->current_master,
&rses->sescmd_list, &rses->expected_responses,
connection_type::SLAVE);
}
/** Reply to an executed session command */
process_sescmd_response(rses, backend, &writebuf);
}
bool queue_routed = false;

View File

@ -81,8 +81,7 @@ bool handle_got_target(RWSplit *inst, RWSplitSession *rses,
bool route_session_write(RWSplitSession *rses, GWBUF *querybuf,
uint8_t command, uint32_t type);
void process_sescmd_response(RWSplitSession* rses, SRWBackend& bref,
GWBUF** ppPacket, bool* reconnect);
void process_sescmd_response(RWSplitSession* rses, SRWBackend& bref, GWBUF** ppPacket);
/*
* The following are implemented in rwsplit_select_backends.c
*/

View File

@ -52,13 +52,9 @@ static std::string extract_error(GWBUF* buffer)
* @param backend The slave Backend
* @param master_cmd Master's reply
* @param slave_cmd Slave's reply
*
* @return True if the responses were different and connection was discarded
*/
static bool discard_if_response_differs(SRWBackend backend, uint8_t master_cmd, uint8_t slave_cmd)
static void discard_if_response_differs(SRWBackend backend, uint8_t master_cmd, uint8_t slave_cmd)
{
bool rval = false;
if (master_cmd != slave_cmd)
{
MXS_WARNING("Slave server '%s': response (0x%02hhx) differs "
@ -66,14 +62,10 @@ static bool discard_if_response_differs(SRWBackend backend, uint8_t master_cmd,
"connection due to inconsistent session state.",
backend->name(), slave_cmd, master_cmd);
backend->close(mxs::Backend::CLOSE_FATAL);
rval = true;
}
return rval;
}
void process_sescmd_response(RWSplitSession* rses, SRWBackend& backend,
GWBUF** ppPacket, bool* pReconnect)
void process_sescmd_response(RWSplitSession* rses, SRWBackend& backend, GWBUF** ppPacket)
{
if (backend->session_command_count())
{
@ -124,10 +116,7 @@ void process_sescmd_response(RWSplitSession* rses, SRWBackend& backend,
for (SlaveResponseList::iterator it = rses->slave_responses.begin();
it != rses->slave_responses.end(); it++)
{
if (discard_if_response_differs(it->first, cmd, it->second))
{
*pReconnect = true;
}
discard_if_response_differs(it->first, cmd, it->second);
}
rses->slave_responses.clear();
@ -139,9 +128,9 @@ void process_sescmd_response(RWSplitSession* rses, SRWBackend& backend,
rses->slave_responses.push_back(std::make_pair(backend, cmd));
}
}
else if (discard_if_response_differs(backend, rses->sescmd_responses[id], cmd))
else
{
*pReconnect = true;
discard_if_response_differs(backend, rses->sescmd_responses[id], cmd);
}
if (discard)