From e561c3995c7396cf3749ccdf6a3357d7dd32c856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 21 Jun 2018 14:43:15 +0300 Subject: [PATCH] Use correct write in Backend::execute_session_command Backend::execute_session_command would use the overridden write method instead of the Backend::write method that it intended to use. This caused session commands that did not expect a response to be in a state that expected a result. Also fixed RWBackend::write pass the response_type value to Backend::write. --- server/core/backend.cc | 19 +++++++++---------- .../routing/readwritesplit/rwsplitsession.cc | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/server/core/backend.cc b/server/core/backend.cc index edd1ef1cc..0a6f631d0 100644 --- a/server/core/backend.cc +++ b/server/core/backend.cc @@ -87,18 +87,18 @@ bool Backend::execute_session_command() CHK_DCB(m_dcb); - SessionCommandList::iterator iter = m_session_commands.begin(); - SessionCommand& sescmd = *(*iter); - GWBUF *buffer = sescmd.deep_copy_buffer(); + SSessionCommand& sescmd = m_session_commands.front(); + GWBUF *buffer = sescmd->deep_copy_buffer(); bool rval = false; - switch (sescmd.get_command()) + switch (sescmd->get_command()) { case MXS_COM_QUIT: case MXS_COM_STMT_CLOSE: /** These commands do not generate responses */ - rval = write(buffer, NO_RESPONSE); + rval = Backend::write(buffer, NO_RESPONSE); complete_session_command(); + ss_dassert(!is_waiting_result()); break; case MXS_COM_CHANGE_USER: @@ -109,12 +109,11 @@ bool Backend::execute_session_command() case MXS_COM_QUERY: default: - /** - * Mark session command buffer, it triggers writing - * MySQL command to protocol - */ + // TODO: Remove use of GWBUF_TYPE_SESCMD + //Mark session command buffer, it triggers writing MySQL command to protocol gwbuf_set_type(buffer, GWBUF_TYPE_SESCMD); - rval = write(buffer); + rval = Backend::write(buffer); + ss_dassert(is_waiting_result()); break; } diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 35476403d..beeba1bbc 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -96,7 +96,7 @@ bool RWBackend::write(GWBUF* buffer, response_type type) } } - return mxs::Backend::write(buffer); + return mxs::Backend::write(buffer, type); } bool RWBackend::consume_fetched_rows(GWBUF* buffer)