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).
This commit is contained in:
@ -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;
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user