summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-11-08 22:47:02 +0100
committerLudovic Courtès <ludo@gnu.org>2013-11-08 22:47:02 +0100
commit50dc48922cc88faec10e8759f58f231bb08f0684 (patch)
tree538a31de289d24602b6ad851931c3c2ce8b399da
parent6a9957545ce51e7a50381059d4509d0dfcba0aba (diff)
downloadguix-50dc48922cc88faec10e8759f58f231bb08f0684.tar.gz
substitute-binary: Increase lookup concurrency to reduce latency.
* guix/scripts/substitute-binary.scm (%lookup-threads): New variable.
  (guix-substitute-binary): Use 'n-par-map' instead of 'par-map' for
  batch 'lookup-narinfo' calls.
-rwxr-xr-xguix/scripts/substitute-binary.scm16
1 files changed, 12 insertions, 4 deletions
diff --git a/guix/scripts/substitute-binary.scm b/guix/scripts/substitute-binary.scm
index 1afc93bbc9..44699cfca9 100755
--- a/guix/scripts/substitute-binary.scm
+++ b/guix/scripts/substitute-binary.scm
@@ -290,6 +290,12 @@ reading PORT."
   (time>? (subtract-duration now (make-time time-duration 0 ttl))
           (make-time time-monotonic 0 date)))
 
+(define %lookup-threads
+  ;; Number of threads spawned to perform lookup operations.  This means we
+  ;; can have this many simultaneous HTTP GET requests to the server, which
+  ;; limits the impact of connection latency.
+  20)
+
 (define (lookup-narinfo cache path)
   "Check locally if we have valid info about PATH, otherwise go to CACHE and
 check what it has."
@@ -489,8 +495,9 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
                    ;; Return the subset of PATHS available in CACHE.
                    (let ((substitutable
                           (if cache
-                              (par-map (cut lookup-narinfo cache <>)
-                                       paths)
+                              (n-par-map %lookup-threads
+                                         (cut lookup-narinfo cache <>)
+                                         paths)
                               '())))
                      (for-each (lambda (narinfo)
                                  (when narinfo
@@ -501,8 +508,9 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
                    ;; Reply info about PATHS if it's in CACHE.
                    (let ((substitutable
                           (if cache
-                              (par-map (cut lookup-narinfo cache <>)
-                                       paths)
+                              (n-par-map %lookup-threads
+                                         (cut lookup-narinfo cache <>)
+                                         paths)
                               '())))
                      (for-each (lambda (narinfo)
                                  (format #t "~a\n~a\n~a\n"