MXS-1777 Changing server weights to match 2.2 behavior.
Match 2.2, changed the weights back to non-inverse because 0-weight is a special case. Renamed to server_weight for greppability.
This commit is contained in:
@ -364,22 +364,21 @@ static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* instance, MXS_SESSION* session
|
||||
{
|
||||
candidate = ref;
|
||||
}
|
||||
else if (candidate->connections == 0)
|
||||
else if (ref->server_weight == 0 || candidate->server_weight == 0)
|
||||
{
|
||||
/* The candidate is already as good as it gets. */
|
||||
if (ref->server_weight) // anything with a weight is better
|
||||
{
|
||||
candidate = ref;
|
||||
}
|
||||
}
|
||||
else if (ref->connections == 0)
|
||||
{
|
||||
candidate = ref;
|
||||
}
|
||||
else if (ref->inv_weight * ref->connections
|
||||
< candidate->inv_weight * candidate->connections)
|
||||
else if (ref->connections / ref->server_weight
|
||||
< candidate->connections / candidate->server_weight)
|
||||
{
|
||||
/* ref has a better score. */
|
||||
candidate = ref;
|
||||
}
|
||||
else if (mxs::almost_equal_server_scores(ref->inv_weight * ref->connections,
|
||||
candidate->inv_weight * candidate->connections)
|
||||
else if (mxs::almost_equal_server_scores(ref->server_weight * ref->connections,
|
||||
candidate->server_weight * candidate->connections)
|
||||
&& ref->server->stats.n_connections < candidate->server->stats.n_connections)
|
||||
{
|
||||
/* The servers are about equally good, but ref has had fewer connections over time.
|
||||
@ -712,7 +711,7 @@ static void diagnostics(MXS_ROUTER* router, DCB* dcb)
|
||||
dcb_printf(dcb,
|
||||
"\t\t%-20s %3.1f%% %d\n",
|
||||
ref->server->name,
|
||||
(1.0 - ref->inv_weight) * 100,
|
||||
ref->server_weight * 100,
|
||||
ref->connections);
|
||||
}
|
||||
}
|
||||
@ -887,7 +886,7 @@ static SERVER_REF* get_root_master(SERVER_REF* servers)
|
||||
if (ref->active && server_is_master(ref->server))
|
||||
{
|
||||
// No master found yet or this one has better weight.
|
||||
if (master_host == NULL || ref->inv_weight < master_host->inv_weight)
|
||||
if (master_host == NULL || ref->server_weight > master_host->server_weight)
|
||||
{
|
||||
master_host = ref;
|
||||
}
|
||||
|
@ -372,7 +372,7 @@ void RWSplit::diagnostics(DCB* dcb)
|
||||
dcb_printf(dcb,
|
||||
"\t\t%-20s %3.1f%% %-6d %-6d %d\n",
|
||||
ref->server->name,
|
||||
(1.0 - ref->inv_weight) * 100,
|
||||
ref->server_weight * 100,
|
||||
ref->server->stats.n_current,
|
||||
ref->connections,
|
||||
ref->server->stats.n_current_ops);
|
||||
|
@ -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->inv_weight * server->connections;
|
||||
return server->server_weight ? server->connections / 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->inv_weight * server->server->stats.n_current;
|
||||
return server->server_weight ? server->server->stats.n_current / server->server_weight : 0;
|
||||
};
|
||||
|
||||
return best_score(sBackends, server_score);
|
||||
@ -99,7 +99,7 @@ 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->inv_weight * server->server->rlag;
|
||||
return server->server_weight ? server->server->rlag / 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->inv_weight * server->server->stats.n_current_ops;
|
||||
return server->server_weight ? server->server->stats.n_current_ops / server->server_weight : 0;
|
||||
};
|
||||
|
||||
return best_score(sBackends, server_score);
|
||||
|
Reference in New Issue
Block a user