From 24a2393a317094546a1e498ac55a16a100760745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 15 Aug 2017 21:55:03 +0300 Subject: [PATCH] MXS-1363: Fix server selection algorithm in readconnroute Servers with zero weight are now considered as valid servers by the readconnroute connection logic. --- server/modules/routing/readconnroute/readconnroute.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/modules/routing/readconnroute/readconnroute.c b/server/modules/routing/readconnroute/readconnroute.c index 8d96fe06d..9c0cd68da 100644 --- a/server/modules/routing/readconnroute/readconnroute.c +++ b/server/modules/routing/readconnroute/readconnroute.c @@ -310,7 +310,7 @@ newSession(MXS_ROUTER *instance, MXS_SESSION *session) */ for (SERVER_REF *ref = inst->service->dbref; ref; ref = ref->next) { - if (!SERVER_REF_IS_ACTIVE(ref) || SERVER_IN_MAINT(ref->server) || ref->weight == 0) + if (!SERVER_REF_IS_ACTIVE(ref) || SERVER_IN_MAINT(ref->server)) { continue; } @@ -368,6 +368,10 @@ newSession(MXS_ROUTER *instance, MXS_SESSION *session) { candidate = ref; } + else if (ref->weight == 0 || candidate->weight == 0) + { + candidate = ref->weight ? ref : candidate; + } else if (((ref->connections + 1) * 1000) / ref->weight < ((candidate->connections + 1) * 1000) / candidate->weight) {