From 1cb20364c6414f2a3fbb710e8185c83adb0c2f00 Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Fri, 13 Jun 2008 04:20:46 -0600 Subject: [PATCH] Author: Mike Mitchell Bug #2241: weights not applied properly in round-robin peer selection --- src/neighbors.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/neighbors.cc b/src/neighbors.cc index 63e94a6cec..a0ade0e384 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -315,11 +315,16 @@ getRoundRobinParent(HttpRequest * request) if (!peerHTTPOkay(p, request)) continue; - if (p->weight == 1) { - if (q && q->rr_count < p->rr_count) - continue; - } else if (p->weight == 0 || (q && q->rr_count < (p->rr_count / p->weight))) { + if (p->weight == 0) continue; + + if (q) { + if (p->weight == q->weight) { + if (q->rr_count < p->rr_count) + continue; + } else if ( (double) q->rr_count / q->weight < (double) p->rr_count / p->weight) { + continue; + } } q = p; @@ -328,7 +333,7 @@ getRoundRobinParent(HttpRequest * request) if (q) q->rr_count++; - debugs(15, 3, "getRoundRobinParent: returning " << (q ? q->host : "NULL")); + debugs(15, 3, HERE << "returning " << (q ? q->host : "NULL")); return q; } -- 2.47.2