From: Amos Jeffries Date: Fri, 13 Jun 2008 10:20:46 +0000 (-0600) Subject: Author: Mike Mitchell X-Git-Tag: SQUID_3_0_STABLE7~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1cb20364c6414f2a3fbb710e8185c83adb0c2f00;p=thirdparty%2Fsquid.git Author: Mike Mitchell Bug #2241: weights not applied properly in round-robin peer selection --- 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; }