aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2021-04-19 19:34:34 +0100
committerChristopher Baines <mail@cbaines.net>2021-04-19 19:34:34 +0100
commit9817ca99965b338ebec431a7f2ab40f8bac4a429 (patch)
treeee0bb8faf2b47dc1536cbf159af597e05718bf88
parent2f6cbd55b6b1d196672e13a3231bfb288521ad60 (diff)
downloadguix-stop-caching-negative-narinfo-lookups.tar
guix-stop-caching-negative-narinfo-lookups.tar.gz
substitutes: Don't cache negative lookups or transient errors.stop-caching-negative-narinfo-lookups
Caching these responses can delay users getting substitutes, since they'll have to wait at least as long as the cache TTL to fetch the substitute, even if it's available sooner. * guix/substitutes.scm (%narinfo-negative-ttl, %narinfo-transient-error-ttl): Remove variables. (cache-narinfo!): Adjust to not use the negative TTL. (fetch-narinfos): Don't cache non 200 status code responses.
-rw-r--r--guix/substitutes.scm22
1 files changed, 3 insertions, 19 deletions
diff --git a/guix/substitutes.scm b/guix/substitutes.scm
index 08f8c24efd..55daa6c964 100644
--- a/guix/substitutes.scm
+++ b/guix/substitutes.scm
@@ -70,14 +70,6 @@
;; 'Cache-Control' response header.
(* 36 3600))
-(define %narinfo-negative-ttl
- ;; Likewise, but for negative lookups---i.e., cached lookup failures (404).
- (* 1 3600))
-
-(define %narinfo-transient-error-ttl
- ;; Likewise, but for transient errors such as 504 ("Gateway timeout").
- (* 10 60))
-
(define %narinfo-cache-directory
;; A local cache of narinfos, to avoid going to the network. Most of the
;; time, 'guix substitute' is called by guix-daemon as root and stores its
@@ -104,8 +96,7 @@ entry is stored in a sub-directory specific to CACHE-URL."
(define (cache-narinfo! cache-url path narinfo ttl)
"Cache locally NARNIFO for PATH, which originates from CACHE-URL, with the
-given TTL (a number of seconds or #f). NARINFO may be #f, in which case it
-indicates that PATH is unavailable at CACHE-URL."
+given TTL (a number of seconds or #f)."
(define now
(current-time time-monotonic))
@@ -113,8 +104,7 @@ indicates that PATH is unavailable at CACHE-URL."
`(narinfo (version 2)
(cache-uri ,cache-uri)
(date ,(time-second now))
- (ttl ,(or ttl
- (if narinfo %narinfo-ttl %narinfo-negative-ttl)))
+ (ttl ,(or ttl %narinfo-ttl))
(value ,(and=> narinfo narinfo->string))))
(let ((file (narinfo-cache-file cache-url path)))
@@ -214,16 +204,10 @@ if file doesn't exist, and the narinfo otherwise."
(cache-narinfo! url (narinfo-path narinfo) narinfo ttl)
(cons narinfo result))
result))
- (let* ((path (uri-path (request-uri request)))
- (hash-part (basename
- (string-drop-right path 8)))) ;drop ".narinfo"
+ (begin
(if len
(get-bytevector-n port len)
(read-to-eof port))
- (cache-narinfo! url (hash-part->path hash-part) #f
- (if (or (= 404 code) (= 202 code))
- ttl
- %narinfo-transient-error-ttl))
result))))
(define (do-fetch uri)