From 263688d3af7f1c350b21e30c957082ca00278d3a Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Sun, 6 Nov 2016 07:03:07 +0200 Subject: [PATCH] Use proper server status macros in readwritesplit Some of the master server status checks didn't check whether the server was actually running. The macros in server.h should always be used instead of manually inspecting the server status. --- server/modules/routing/readwritesplit/readwritesplit.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 3e16abc67..82a5c2115 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -3152,6 +3152,7 @@ static bool select_connect_backend_servers(backend_ref_t **p_master_ref, bref_clear_state(&backend_ref[i], BREF_WAITING_RESULT); } bref_clear_state(&backend_ref[i], BREF_IN_USE); + bref_set_state(&backend_ref[i], BREF_CLOSED); /** Decrease backend's connection counter. */ atomic_add(&backend_ref[i].bref_backend->backend_conn_count, -1); dcb_close(backend_ref[i].bref_dcb); @@ -4891,8 +4892,7 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) b = servers[i].bref_backend; - if ((b->backend_server->status & (SERVER_MASTER | SERVER_MAINT)) == - SERVER_MASTER) + if (SERVER_IS_MASTER(b->backend_server)) { if (master_host == NULL || (b->backend_server->depth < master_host->backend_server->depth)) @@ -4927,13 +4927,14 @@ static backend_ref_t *get_root_master_bref(ROUTER_CLIENT_SES *rses) bref = &rses->rses_backend_ref[i]; if (bref && BREF_IS_IN_USE(bref)) { + ss_dassert(!BREF_IS_CLOSED(bref) && !BREF_HAS_FAILED(bref)); if (bref == rses->rses_master_ref) { /** Store master state for better error reporting */ master.status = bref->bref_backend->backend_server->status; } - if (bref->bref_backend->backend_server->status & SERVER_MASTER) + if (SERVER_IS_MASTER(bref->bref_backend->backend_server)) { if (candidate_bref == NULL || (bref->bref_backend->backend_server->depth <