From 1d0bef67e07a761dec66b40d1be10ce7c213347d Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Fri, 13 Jun 2008 00:49:29 +1200 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 6fb4e7c07a..ed318d93d4 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -312,11 +312,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; @@ -325,7 +330,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.39.5