[yum-commits] urlgrabber/grabber.py

zpavlas at osuosl.org zpavlas at osuosl.org
Mon Dec 9 15:17:46 UTC 2013


 urlgrabber/grabber.py |   22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

New commits:
commit 331ef6f6116531c0a8a6ddb737a44fa6e3c886ed
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Dec 9 16:09:23 2013 +0100

    Process mirror retries before other queued requests.
    
    Sometimes the ordering of downloads is important- eg Yum downloads
    DRPMs before RPMs, so the delta rebuild can run while downloading..
    Instead of adding retries at the end, process them in-place.

diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index d06cdae..f3fd02f 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -2170,6 +2170,7 @@ def parallel_wait(meter=None):
     dl = _ExternalDownloaderPool()
     host_con = {} # current host connection counts
     single = set() # hosts in single connection mode
+    retry_queue = []
 
     def start(opts, tries):
         opts.tries = tries
@@ -2250,7 +2251,7 @@ def parallel_wait(meter=None):
                     # mask this mirror and retry
                     if action.get('remove', 1):
                         removed.add(key)
-                    _async_queue.append(opts)
+                    retry_queue.append(opts)
                     continue
                 # fail=1 from callback
                 ug_err.errors = errors
@@ -2260,19 +2261,22 @@ def parallel_wait(meter=None):
             _run_callback(opts.failfunc, opts)
 
     try:
-        idx = 0
+        retry_idx = idx = 0
         while True:
-            if idx >= len(_async_queue):
-                # the queue is empty
+            if retry_idx < len(retry_queue):
+                # retries first
+                opts = retry_queue[retry_idx]
+                retry_idx += 1
+            elif idx < len(_async_queue):
+                # handle next request
+                opts = _async_queue[idx]
+                idx += 1
+            else:
+                # both queues are empty
                 if not dl.running: break
-                # pending dl may extend it
                 perform()
                 continue
 
-            # handle next request
-            opts = _async_queue[idx]
-            idx += 1
-
             # check global limit
             while len(dl.running) >= default_grabber.opts.max_connections:
                 perform()


More information about the Yum-commits mailing list