diff options
author | Ludovic Courtès <ludo@gnu.org> | 2023-05-22 17:19:39 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2023-05-30 00:15:29 +0200 |
commit | 8af9a2aa5fa2fa5b00234c1cbe12e9aff60888a0 (patch) | |
tree | dfba35bca4c132a0bccd71cd7ef85369e116e819 /guix/narinfo.scm | |
parent | d23d8fcee99e7b127f9e649925caca9cf0d36e76 (diff) |
substitute: If a server's nar URL is 404, try the next one(s).
If a substitute server advertises in its narinfo, for example, both a
/zstd and a /lzip URL but the /zstd URL is unreachable, try the /lzip
URL.
Fixes <https://issues.guix.gnu.org/63634>.
* guix/narinfo.scm (narinfo-preferred-uris): New procedure.
(narinfo-best-uri): Rebase on top of it.
* guix/scripts/substitute.scm (download-nar)[try-fetch]: New procedure.
Use 'narinfo-preferred-uris' and 'try-fetch' to attempt all the URLs of
NARINFO.
* tests/substitute.scm (request-substitution): Remove 'parameterize'.
Delete DESTINATION.
("substitute, preferred nar URL is 404, other is 200"): New test.
Diffstat (limited to 'guix/narinfo.scm')
-rw-r--r-- | guix/narinfo.scm | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/guix/narinfo.scm b/guix/narinfo.scm index 741c7ad406..a149d9a901 100644 --- a/guix/narinfo.scm +++ b/guix/narinfo.scm @@ -54,6 +54,7 @@ narinfo-hash-algorithm+value narinfo-hash->sha256 + narinfo-preferred-uris narinfo-best-uri valid-narinfo? @@ -309,9 +310,11 @@ than COMPRESSION2." ("gzip" (string=? compression2 "lzip")) (_ #f))) -(define* (narinfo-best-uri narinfo #:key fast-decompression?) - "Select the \"best\" URI to download NARINFO's nar, and return three values: -the URI, its compression method (a string), and the compressed file size. +(define* (narinfo-preferred-uris narinfo #:key fast-decompression?) + "Return the sorted list of \"preferred\" nar URIs from NARINFO (preferred +comes first) where each entry is a tuple containing: the URI, its compression +method (a string), and the compressed file size. + When FAST-DECOMPRESSION? is true, prefer substitutes with faster decompression (typically zstd) rather than substitutes with a higher compression ratio (typically lzip)." @@ -343,6 +346,16 @@ compression ratio (typically lzip)." ((uri2 compression2 . _) (decompresses-faster? compression2 compression1)))))) - (match (sort choices (if fast-decompression? (negate speed<?) file-size<?)) + (sort choices (if fast-decompression? (negate speed<?) file-size<?))) + +(define* (narinfo-best-uri narinfo #:key fast-decompression?) + "Select the \"best\" URI to download NARINFO's nar, and return three values: +the URI, its compression method (a string), and the compressed file size. + +When FAST-DECOMPRESSION? is true, prefer substitutes with faster +decompression (typically zstd) rather than substitutes with a higher +compression ratio (typically lzip)." + (match (narinfo-preferred-uris narinfo + #:fast-decompression? fast-decompression?) (((uri compression file-size) _ ...) (values uri compression file-size)))) |