diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc index 9a3d51a55..a4da57030 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc @@ -1054,16 +1054,8 @@ bool RWSplitSession::handle_got_target(GWBUF* querybuf, SRWBackend& target, bool m_qc.set_large_query(large_query); - if (large_query) - { - /** Store the previous target as we're processing a multi-packet query */ - m_prev_target = target; - } - else - { - /** Otherwise reset it so we know the query is complete */ - m_prev_target.reset(); - } + // Store the current target + m_prev_target = target; /** * If a READ ONLY transaction is ending set forced_node to NULL diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 930347ade..6ffb6a9b4 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -514,6 +514,9 @@ void RWSplitSession::clientReply(GWBUF *writebuf, DCB *backend_dcb) } else { + /** Normal response, reset the currently active query. This is done before + * the whole response is complete to prevent it from being retried + * in case the connection breaks in the middle of a resultset. */ m_current_query.reset(); }