diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-05-11 10:23:27 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-05-11 18:05:42 +0200 |
commit | 24b21720f7c3a368efc32017c126e107a5d76f52 (patch) | |
tree | 326f165b42f7b21d703984626ec44144cf0ed67f | |
parent | 5899fafbfefcd7682aec8f2caaaad3add678a3c4 (diff) | |
download | gnu-guix-24b21720f7c3a368efc32017c126e107a5d76f52.tar gnu-guix-24b21720f7c3a368efc32017c126e107a5d76f52.tar.gz |
publish: Advertise a short TTL for "baking" 404s.
* guix/scripts/publish.scm (not-found): Add #:phrase and #:ttl
parameters and honor them.
* tests/publish.scm ("with cache"): Check the 'cache-control' header on
of the 404 response.
-rw-r--r-- | guix/scripts/publish.scm | 15 | ||||
-rw-r--r-- | tests/publish.scm | 7 |
2 files changed, 18 insertions, 4 deletions
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm index efaa549676..8da75cb825 100644 --- a/guix/scripts/publish.scm +++ b/guix/scripts/publish.scm @@ -300,10 +300,15 @@ References: ~a~%~a" (canonical-sexp->string (signed-string info))))) (format #f "~aSignature: 1;~a;~a~%" info (gethostname) signature))) -(define (not-found request) +(define* (not-found request + #:key (phrase "Resource not found") + ttl) "Render 404 response for REQUEST." - (values (build-response #:code 404) - (string-append "Resource not found: " + (values (build-response #:code 404 + #:headers (if ttl + `((cache-control (max-age . ,ttl))) + '())) + (string-append phrase ": " (uri-path (request-uri request))))) (define (render-nix-cache-info) @@ -434,7 +439,9 @@ requested using POOL." (file-expiration-time ttl) #:delete-entry delete-entry #:cleanup-period ttl)))) - (not-found request)) + (not-found request + #:phrase "We're baking it" + #:ttl 300)) ;should be available within 5m (else (not-found request))))) diff --git a/tests/publish.scm b/tests/publish.scm index 6238f37bc1..268c324551 100644 --- a/tests/publish.scm +++ b/tests/publish.scm @@ -355,6 +355,13 @@ FileSize: ~a~%" (basename %item) ".nar")) (response (http-get url))) (and (= 404 (response-code response)) + + ;; We should get an explicitly short TTL for 404 in this case + ;; because it's going to become 200 shortly. + (match (assq-ref (response-headers response) 'cache-control) + ((('max-age . ttl)) + (< ttl 3600))) + (wait-for-file cached) (let* ((body (http-get-port url)) (compressed (http-get nar-url)) |