From a7c21eee88c3c2530c06fea8a20c718004eed244 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Tue, 15 Nov 2016 22:14:23 +0200 Subject: [PATCH] Always treat master failures as fatal errors When a connection to the master fails, readwritesplit should always treat it the same way. Previously, if a connection to the master was lost but it hadn't lost the master status, the failure would be treated like a slave server failure. --- server/modules/routing/readwritesplit/readwritesplit.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 0b0f7ecd8..c5e33c0d6 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -4462,12 +4462,10 @@ static void handleError(ROUTER *instance, void *router_session, * If master has lost its Master status error can't be * handled so that session could continue. */ - if (rses->rses_master_ref && rses->rses_master_ref->bref_dcb == problem_dcb && - !SERVER_IS_MASTER(rses->rses_master_ref->bref_backend->backend_server)) + if (rses->rses_master_ref && rses->rses_master_ref->bref_dcb == problem_dcb) { SERVER *srv = rses->rses_master_ref->bref_backend->backend_server; - backend_ref_t *bref; - bref = get_bref_from_dcb(rses, problem_dcb); + backend_ref_t *bref = get_bref_from_dcb(rses, problem_dcb); bool can_continue = false; if (rses->rses_config.rw_master_failure_mode != RW_FAIL_INSTANTLY && @@ -4484,7 +4482,7 @@ static void handleError(ROUTER *instance, void *router_session, * connection. */ can_continue = true; } - else if (!srv->master_err_is_logged) + else if (!SERVER_IS_MASTER(srv) && !srv->master_err_is_logged) { MXS_ERROR("Server %s:%d lost the master status. Readwritesplit " "service can't locate the master. Client sessions "