GNU bug report logs -
#47897
[PATCH] substitutes: Don't cache negative lookups or transient errors.
Previous Next
Reported by: Christopher Baines <mail <at> cbaines.net>
Date: Mon, 19 Apr 2021 18:41:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#47897: [PATCH] substitutes: Don't cache negative lookups or transient errors.
which was filed against the guix-patches package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 47897 <at> debbugs.gnu.org.
--
47897: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=47897
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Hi,
Christopher Baines <mail <at> cbaines.net> skribis:
> The patches you've sent look good.
Pushed as 938ffcbb0589adc07dc12c79eda3e1e2bb9e7cf8 (I was generous and
lowered ‘%narinfo-negative-ttl’ to 10mn :-)).
Thanks,
Ludo’.
[Message part 3 (message/rfc822, inline)]
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.
---
guix/substitutes.scm | 22 +++-------------------
1 file 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)
--
2.30.1
This bug report was last modified 4 years and 10 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.