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);