From 6c1960e53b235d4116f7dec9b5fe0ce6ac98f502 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 30 Jun 2014 16:16:27 +0100 Subject: [PATCH] Increase accuracy of percentages for connection distribution. --- server/modules/routing/readconnroute.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/server/modules/routing/readconnroute.c b/server/modules/routing/readconnroute.c index 0c4a4e678..71d529d2b 100644 --- a/server/modules/routing/readconnroute.c +++ b/server/modules/routing/readconnroute.c @@ -238,7 +238,7 @@ char *weightby; } inst->servers[n]->server = server; inst->servers[n]->current_connection_count = 0; - inst->servers[n]->weight = 100; + inst->servers[n]->weight = 1000; n++; } inst->servers[n] = NULL; @@ -267,7 +267,9 @@ char *weightby; int perc; backend = inst->servers[n]; perc = (atoi(serverGetParameter(backend->server, - weightby)) * 100) / total; + weightby)) * 1000) / total; + if (perc == 0) + perc = 1; backend->weight = perc; if (perc == 0) { @@ -444,18 +446,18 @@ BACKEND *master_host = NULL; candidate = inst->servers[i]; } else if ((inst->servers[i]->current_connection_count - * 100) / inst->servers[i]->weight < + * 1000) / inst->servers[i]->weight < (candidate->current_connection_count * - 100) / candidate->weight) + 1000) / candidate->weight) { /* This running server has fewer connections, set it as a new candidate */ candidate = inst->servers[i]; } else if ((inst->servers[i]->current_connection_count - * 100) / inst->servers[i]->weight == + * 1000) / inst->servers[i]->weight == (candidate->current_connection_count * - 100) / candidate->weight && + 1000) / candidate->weight && inst->servers[i]->server->stats.n_connections < candidate->server->stats.n_connections) { @@ -747,9 +749,9 @@ char *weightby; for (i = 0; router_inst->servers[i]; i++) { backend = router_inst->servers[i]; - dcb_printf(dcb, "\t\t%-20s %3d%% %d\n", + dcb_printf(dcb, "\t\t%-20s %3.1f%% %d\n", backend->server->unique_name, - backend->weight, + (float)backend->weight / 10, backend->current_connection_count); }