From f3e00431de0cb4bb545921bdc62e11f60a09ded6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 20 Feb 2018 15:35:52 +0200 Subject: [PATCH] Fix MXS-1418 regression If a server is removed from a service, readconnroute will not verify that the server it is connected to is still the same root master. This fixes the regression of MXS-1418. --- server/modules/routing/readconnroute/readconnroute.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/modules/routing/readconnroute/readconnroute.c b/server/modules/routing/readconnroute/readconnroute.c index 788da87d2..82f61ed42 100644 --- a/server/modules/routing/readconnroute/readconnroute.c +++ b/server/modules/routing/readconnroute/readconnroute.c @@ -551,12 +551,20 @@ static inline bool connection_is_valid(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* if (SERVER_IS_RUNNING(router_cli_ses->backend->server) && (router_cli_ses->backend->server->status & inst->bitmask & inst->bitvalue)) { - if (inst->bitvalue & SERVER_MASTER) + if ((inst->bitvalue & SERVER_MASTER) && router_cli_ses->backend->active) { + // If we're using an active master server, verify that it is still a master rval = router_cli_ses->backend == get_root_master(inst->service->dbref); } else { + /** + * Either we don't use master type servers or the server reference + * is deactivated. We let deactivated connection close gracefully + * so we simply assume it is OK. This allows a server to be taken + * out of use in a manner that won't cause errors to the connected + * clients. + */ rval = true; } }