Prefer private mirrors, but only if they didn't fail recently.
---
 urlgrabber/grabber.py |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index 09ef978..a33e017 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -2270,11 +2270,12 @@ def parallel_wait(meter=None):
                     if key in removed: continue
 
                     # estimate mirror speed
-                    speed = _TH.estimate(key)
+                    speed, fail = _TH.estimate(key)
                     speed /= 1 + host_con.get(key, 0)
 
                     # order by: least failures, private flag, best speed
-                    private = mirror.get('kwargs', {}).get('private', False)
+                    # ignore 'private' flag if there were failures
+                    private = not fail and mirror.get('kwargs', 
{}).get('private', False)
                     speed = -failed.get(key, 0), private, speed
                     if best is None or speed > best_speed:
                         best = mirror
@@ -2391,12 +2392,12 @@ class _TH:
 
         default_speed = default_grabber.opts.default_speed
         try: speed, fail, ts = _TH.hosts[host]
-        except KeyError: return default_speed
+        except KeyError: return default_speed, 0
 
         speed *= 2**-fail
         k = 2**((ts - time.time()) / default_grabber.opts.half_life)
         speed = k * speed + (1 - k) * default_speed
-        return speed
+        return speed, fail
 
 #####################################################################
 #  TESTING
-- 
1.7.4.4

_______________________________________________
Yum-devel mailing list
Yum-devel@lists.baseurl.org
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to