summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-02-04 10:00:50 +0000
committerChristopher Baines <mail@cbaines.net>2022-02-04 10:09:01 +0000
commit71d2bdfa9fce546e8d8d5103aee4e1096ce65ecf (patch)
treebbdb35be712f18cea14c0d534962c3eea43a874a
parentff093f5739a61e77b296feccc48d260b9bb574c0 (diff)
downloadguix-patches-71d2bdfa9fce546e8d8d5103aee4e1096ce65ecf.tar
guix-patches-71d2bdfa9fce546e8d8d5103aee4e1096ce65ecf.tar.gz
services: nar-herder: Support ttl and negative-ttl options.
* gnu/services/guix.scm (<nar-herder-configuration>): Add ttl and negative-ttl fields. (nar-herder-shepherd-services): Pass the ttl and negative-ttl values to the service. * doc/guix.texi (Guix Services): Document this.
-rw-r--r--doc/guix.texi14
-rw-r--r--gnu/services/guix.scm18
2 files changed, 29 insertions, 3 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index aaa7cbb66f..0cf865a672 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -33721,6 +33721,20 @@ Each criteria is specified by a string, then an equals sign, then
another string. Currently, only one criteria is supported, checking if a
nar is stored on another Nar Herder instance.
+@item @code{ttl} (default: @code{#f})
+Produce @code{Cache-Control} HTTP headers that advertise a time-to-live
+(TTL) of @var{ttl}. @var{ttl} must denote a duration: @code{5d} means 5
+days, @code{1m} means 1 month, and so on.
+
+This allows the user's Guix to keep substitute information in cache for
+@var{ttl}.
+
+@item @code{negative-ttl} (default: @code{#f})
+Similarly produce @code{Cache-Control} HTTP headers to advertise the
+time-to-live (TTL) of @emph{negative} lookups---missing store items, for
+which the HTTP 404 code is returned. By default, no negative TTL is
+advertised.
+
@end table
@end deftp
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index 6a5b276b33..dc9bd8ad68 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -774,7 +774,12 @@ ca-certificates.crt file in the system profile."
(default "none"))
(storage-nar-removal-criteria
nar-herder-configuration-storage-nar-removal-criteria
- (default '())))
+ (default '()))
+ (ttl nar-herder-configuration-ttl
+ (default #f))
+ (negative-ttl nar-herder-configuration-negative-ttl
+ (default #f)))
+
(define (nar-herder-shepherd-services config)
(match-record config <nar-herder-configuration>
@@ -782,7 +787,8 @@ ca-certificates.crt file in the system profile."
mirror
database database-dump
host port
- storage storage-limit storage-nar-removal-criteria)
+ storage storage-limit storage-nar-removal-criteria
+ ttl negative-ttl)
(unless (or mirror storage)
(error "nar-herder: mirror or storage must be set"))
@@ -817,7 +823,13 @@ ca-certificates.crt file in the system profile."
(match criteria
((k . v) (simple-format #f "~A=~A" k v))
(str str))))
- storage-nar-removal-criteria))
+ storage-nar-removal-criteria)
+ #$@(if ttl
+ (list (string-append "--ttl=" ttl))
+ '())
+ #$@(if negative-ttl
+ (list (string-append "--negative-ttl=" negative-ttl))
+ '()))
#:user #$user
#:group #$group
#:pid-file "/var/run/nar-herder/pid"