From daecb6980bc1430479ef8dff694db8a5905f0230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 19 Apr 2018 15:25:14 +0300 Subject: [PATCH] MXS-1507: Use same mechanism for all delayed routing Passing the delay to the retry_query function allows the same function to be used in all cases. This removes duplicate code. --- server/modules/routing/readwritesplit/rwsplit_route_stmt.cc | 4 ++-- server/modules/routing/readwritesplit/rwsplitsession.cc | 3 +-- server/modules/routing/readwritesplit/rwsplitsession.hh | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc index def738887..2102a6de7 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.cc @@ -109,12 +109,12 @@ bool RWSplitSession::prepare_target(SRWBackend& target, route_target_t route_tar return rval; } -void RWSplitSession::retry_query(GWBUF* querybuf) +void RWSplitSession::retry_query(GWBUF* querybuf, int delay) { ss_dassert(querybuf); // Try to route the query again later MXS_SESSION* session = m_client->session; - session_delay_routing(session, router_as_downstream(session), querybuf, 1); + session_delay_routing(session, router_as_downstream(session), querybuf, delay); ++m_retry_duration; } diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 56daa5d4e..c8cb3d5e3 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -641,8 +641,7 @@ bool RWSplitSession::handle_error_new_connection(DCB *backend_dcb, GWBUF *errmsg if (stored && m_config.retry_failed_reads) { MXS_INFO("Re-routing failed read after server '%s' failed", backend->name()); - MXS_SESSION* session = m_client->session; - session_delay_routing(session, router_as_downstream(session), stored, 0); + retry_query(stored, 0); } else { diff --git a/server/modules/routing/readwritesplit/rwsplitsession.hh b/server/modules/routing/readwritesplit/rwsplitsession.hh index 505d857c0..8e2453643 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.hh +++ b/server/modules/routing/readwritesplit/rwsplitsession.hh @@ -163,7 +163,7 @@ private: bool handle_got_target(GWBUF* querybuf, mxs::SRWBackend& target, bool store); void handle_connection_keepalive(mxs::SRWBackend& target); bool prepare_target(mxs::SRWBackend& target, route_target_t route_target); - void retry_query(GWBUF* querybuf); + void retry_query(GWBUF* querybuf, int delay = 1); bool should_replace_master(mxs::SRWBackend& target); void replace_master(mxs::SRWBackend& target);