From b564089afefc7ecc72d72fbc3fcbfe96e0371b6d Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Fri, 25 Jan 2019 15:01:24 +0200 Subject: [PATCH] MXS-2273 Take BEING_DRAINED bit into account in RCR Also check when looking for the root master that not only the server ref but also the referred to server is active. --- server/modules/routing/readconnroute/readconnroute.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/modules/routing/readconnroute/readconnroute.cc b/server/modules/routing/readconnroute/readconnroute.cc index 7e441f8e8..57cb8bc12 100644 --- a/server/modules/routing/readconnroute/readconnroute.cc +++ b/server/modules/routing/readconnroute/readconnroute.cc @@ -86,7 +86,7 @@ SERVER_REF* RCR::get_root_master() SERVER_REF* master_host = nullptr; for (SERVER_REF* ref = m_pService->dbref; ref; ref = ref->next) { - if (ref->active && ref->server->is_master()) + if (server_ref_is_active(ref) && ref->server->is_master() && ref->server->is_connectable()) { // No master found yet or this one has better weight. if (!master_host || ref->server_weight > master_host->server_weight) @@ -232,13 +232,15 @@ RCRSession* RCR::newSession(MXS_SESSION* session) */ for (SERVER_REF* ref = m_pService->dbref; ref; ref = ref->next) { - if (!server_ref_is_active(ref) || ref->server->is_in_maint()) + if (!server_ref_is_active(ref) || !ref->server->is_connectable()) { continue; } + mxb_assert(ref->server->is_usable()); + /* Check server status bits against bitvalue from router_options */ - if (ref && ref->server->is_usable() && (ref->server->status & bitmask & bitvalue)) + if (ref && (ref->server->status & bitmask & bitvalue)) { if (master_host) {