From d866cb3a21b592c2c42b956a55a54a623c0b0b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 2 Oct 2018 00:53:23 +0300 Subject: [PATCH] Add bias value to server score calculations By biasing the values of all counter type scores to positive integers, the server weights are always taken into use. This fixes the case when weights were ignored until all score base values were larger than zero (the mxs922_server test). --- server/modules/routing/readconnroute/readconnroute.cc | 4 ++-- .../routing/readwritesplit/rwsplit_select_backends.cc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/modules/routing/readconnroute/readconnroute.cc b/server/modules/routing/readconnroute/readconnroute.cc index 4040ff303..9f4d8b808 100644 --- a/server/modules/routing/readconnroute/readconnroute.cc +++ b/server/modules/routing/readconnroute/readconnroute.cc @@ -367,8 +367,8 @@ static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* instance, MXS_SESSION* session candidate = ref; } } - else if (ref->connections / ref->server_weight - < candidate->connections / candidate->server_weight) + else if ((ref->connections + 1) / ref->server_weight + < (candidate->connections + 1) / candidate->server_weight) { /* ref has a better score. */ candidate = ref; diff --git a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc index 7dafb8cd8..1d2b78f01 100644 --- a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc +++ b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc @@ -79,7 +79,7 @@ SRWBackendVector::iterator best_score(SRWBackendVector& sBackends, SRWBackendVector::iterator backend_cmp_router_conn(SRWBackendVector& sBackends) { static auto server_score = [](SERVER_REF* server) { - return server->server_weight ? server->connections / server->server_weight : 0; + return server->server_weight ? (server->connections + 1) / server->server_weight : 0; }; return best_score(sBackends, server_score); @@ -89,7 +89,7 @@ SRWBackendVector::iterator backend_cmp_router_conn(SRWBackendVector& sBackends) SRWBackendVector::iterator backend_cmp_global_conn(SRWBackendVector& sBackends) { static auto server_score = [](SERVER_REF* server) { - return server->server_weight ? server->server->stats.n_current / server->server_weight : 0; + return server->server_weight ? (server->server->stats.n_current + 1) / server->server_weight : 0; }; return best_score(sBackends, server_score); @@ -109,7 +109,7 @@ SRWBackendVector::iterator backend_cmp_behind_master(SRWBackendVector& sBackends SRWBackendVector::iterator backend_cmp_current_load(SRWBackendVector& sBackends) { static auto server_score = [](SERVER_REF* server) { - return server->server_weight ? server->server->stats.n_current_ops / server->server_weight : 0; + return server->server_weight ? (server->server->stats.n_current_ops + 1) / server->server_weight : 0; }; return best_score(sBackends, server_score);