Move causal read reply processing into sub-function

This makes the clientReply a lot easier to comprehend.
This commit is contained in:
Markus Mäkelä
2018-04-04 15:38:50 +03:00
parent 465a17d439
commit dc338ff3f2
2 changed files with 20 additions and 8 deletions

View File

@ -383,11 +383,9 @@ static void log_unexpected_response(DCB* dcb, GWBUF* buffer)
} }
} }
void RWSplitSession::clientReply(GWBUF *writebuf, DCB *backend_dcb) bool RWSplitSession::handle_causal_read_reply(GWBUF *writebuf, SRWBackend& backend)
{ {
DCB *client_dcb = backend_dcb->session->client_dcb; bool rval = true;
SRWBackend& backend = get_backend_from_dcb(backend_dcb);
if (m_config.enable_causal_read && if (m_config.enable_causal_read &&
GWBUF_IS_REPLY_OK(writebuf) && GWBUF_IS_REPLY_OK(writebuf) &&
@ -403,18 +401,31 @@ void RWSplitSession::clientReply(GWBUF *writebuf, DCB *backend_dcb)
if (m_wait_gtid_state == EXPECTING_WAIT_GTID_RESULT) if (m_wait_gtid_state == EXPECTING_WAIT_GTID_RESULT)
{ {
ss_dassert(m_config.enable_causal_read);
if ((writebuf = discard_master_wait_gtid_result(writebuf)) == NULL) if ((writebuf = discard_master_wait_gtid_result(writebuf)) == NULL)
{ {
// Nothing to route, return rval = false;
return;
} }
} }
if (m_wait_gtid_state == EXPECTING_REAL_RESULT)
if (rval && m_wait_gtid_state == EXPECTING_REAL_RESULT)
{ {
correct_packet_sequence(writebuf); correct_packet_sequence(writebuf);
} }
return rval;
}
void RWSplitSession::clientReply(GWBUF *writebuf, DCB *backend_dcb)
{
DCB *client_dcb = backend_dcb->session->client_dcb;
SRWBackend& backend = get_backend_from_dcb(backend_dcb);
if (!handle_causal_read_reply(writebuf, backend))
{
return; // Nothing to route, return
}
if (backend->get_reply_state() == REPLY_STATE_DONE) if (backend->get_reply_state() == REPLY_STATE_DONE)
{ {
/** If we receive an unexpected response from the server, the internal /** If we receive an unexpected response from the server, the internal

View File

@ -159,6 +159,7 @@ private:
void log_master_routing_failure(bool found, mxs::SRWBackend& old_master, void log_master_routing_failure(bool found, mxs::SRWBackend& old_master,
mxs::SRWBackend& curr_master); mxs::SRWBackend& curr_master);
bool handle_causal_read_reply(GWBUF *writebuf, mxs::SRWBackend& backend);
GWBUF* add_prefix_wait_gtid(SERVER *server, GWBUF *origin); GWBUF* add_prefix_wait_gtid(SERVER *server, GWBUF *origin);
void correct_packet_sequence(GWBUF *buffer); void correct_packet_sequence(GWBUF *buffer);
GWBUF* discard_master_wait_gtid_result(GWBUF *buffer); GWBUF* discard_master_wait_gtid_result(GWBUF *buffer);