diff --git a/server/modules/routing/readwritesplit/readwritesplit.cc b/server/modules/routing/readwritesplit/readwritesplit.cc index a19b0b504..9790b0b32 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.cc +++ b/server/modules/routing/readwritesplit/readwritesplit.cc @@ -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; diff --git a/server/modules/routing/readwritesplit/rwsplit_internal.hh b/server/modules/routing/readwritesplit/rwsplit_internal.hh index e41f8dd09..7676a9f82 100644 --- a/server/modules/routing/readwritesplit/rwsplit_internal.hh +++ b/server/modules/routing/readwritesplit/rwsplit_internal.hh @@ -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 */ diff --git a/server/modules/routing/readwritesplit/rwsplit_session_cmd.cc b/server/modules/routing/readwritesplit/rwsplit_session_cmd.cc index 48463ba15..3b3e82349 100644 --- a/server/modules/routing/readwritesplit/rwsplit_session_cmd.cc +++ b/server/modules/routing/readwritesplit/rwsplit_session_cmd.cc @@ -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)