From 4d70e6de5cdbddcbfa5789259855141d4f5a9c73 Mon Sep 17 00:00:00 2001 From: Cameron Dale Date: Mon, 31 Mar 2008 16:21:15 -0700 Subject: [PATCH] Make all the peer rankings exponentially decreasing. --- apt_p2p/HTTPDownloader.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/apt_p2p/HTTPDownloader.py b/apt_p2p/HTTPDownloader.py index eb36932..de01958 100644 --- a/apt_p2p/HTTPDownloader.py +++ b/apt_p2p/HTTPDownloader.py @@ -253,24 +253,26 @@ class Peer(ClientFactory): return total_response / len(self._responseTimes) - def rank(self, fastest): + def rank(self): """Determine the ranking value for the peer. - The ranking value is composed of 5 numbers: - - 1 if a connection to the peer is open, 0.9 otherwise - - 1 if there are no pending requests, to 0 if there are a maximum - - 1 if the peer is the fastest of all peers, to 0 if the speed is 0 - - 1 if all requests are good, 0 if all produced errors - - an exponentially decreasing number based on the response time + The ranking value is composed of 5 numbers, each exponentially + decreasing from 1 to 0 based on: + - if a connection to the peer is open + - the number of pending requests + - the time to download a single piece + - the number of errors + - the response time """ rank = 1.0 if self.closed: rank *= 0.9 - rank *= (max(0.0, 10.0 - len(self.request_queue) - len(self.response_queue))) / 10.0 - if fastest > 0.0: - rank *= min(1.0, self.downloadSpeed() / fastest) + rank *= exp(-(len(self.request_queue) - len(self.response_queue))) + speed = self.downloadSpeed() + if speed > 0.0: + rank *= exp(-512.0*1024 / speed) if self._completed: - rank *= max(0.0, 1.0 - float(self._errors) / self._completed) + rank *= exp(-float(self._errors) / self._completed) rank *= exp(-self.responseTime() / 5.0) return rank -- 2.39.5