From ae0e9b359d1559657183561e2acfc0f5ed08e0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Mon, 12 Nov 2018 08:53:27 +0200 Subject: [PATCH] Fix use of zero-weight servers The servers with a zero weight would be always used over ones that have a weight. This means that the behavior was inverted and caused the mxs2054_hybrid_cluster test to fail in 2.3. Also fixed a typo in the deprecation message. --- server/core/service.cc | 2 +- .../readwritesplit/rwsplit_select_backends.cc | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/server/core/service.cc b/server/core/service.cc index c1964d4b7..8900dc722 100644 --- a/server/core/service.cc +++ b/server/core/service.cc @@ -1703,7 +1703,7 @@ static void service_calculate_weights(SERVICE* service) if (*weightby && service->dbref) { // DEPRECATED in 2.3, remove in 2.4. - MXS_WARNING("Setting of server weigths (%s) has been deprecated" + MXS_WARNING("Setting of server weights (%s) has been deprecated" " and will be removed in a later version of MaxScale.", weightby); diff --git a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc index 2b1b3a6d3..8403e8340 100644 --- a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc +++ b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc @@ -79,7 +79,8 @@ 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 + 1) / server->server_weight : 0; + return server->server_weight ? (server->connections + 1) / server->server_weight : + std::numeric_limits::max(); }; return best_score(sBackends, server_score); @@ -89,7 +90,8 @@ 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 + 1) / server->server_weight : 0; + return server->server_weight ? (server->server->stats.n_current + 1) / server->server_weight : + std::numeric_limits::max(); }; return best_score(sBackends, server_score); @@ -99,7 +101,8 @@ SRWBackendVector::iterator backend_cmp_global_conn(SRWBackendVector& sBackends) SRWBackendVector::iterator backend_cmp_behind_master(SRWBackendVector& sBackends) { static auto server_score = [](SERVER_REF* server) { - return server->server_weight ? server->server->rlag / server->server_weight : 0; + return server->server_weight ? server->server->rlag / server->server_weight : + std::numeric_limits::max(); }; return best_score(sBackends, server_score); @@ -109,8 +112,8 @@ 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 + 1) - / server->server_weight : 0; + return server->server_weight ? (server->server->stats.n_current_ops + 1) / server->server_weight : + std::numeric_limits::max(); }; return best_score(sBackends, server_score);