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