Subject: bug#43079: guix ignores available substitutes

From: Ludovic Courtès <[email-masked]>
Date: Fri, 28 Aug 2020 16:23:31 +0200

Hallo!

Jonathan Brielmaier <[email-masked]> skribis:

> Tobias provided me some nginx logs from ci.guix.gnu.org so here is some
> further analysis:
>
> guix@laptop $ guix build --dry-run inkscape
> Folgende Ableitungen würden erstellt:
>    /gnu/store/i1sh5hzlzxzgzbdl3jb8wgnn9hr912wn-inkscape-1.0.drv
>    /gnu/store/1mzsr5z2qnrlr57gdv5mv7bhm1yg88z2-gtkspell3-3.0.10.drv
>    /gnu/store/07sff3s4ckc81j2lxip0pcyikfqbqs6v-gtkspell3-3.0.10.tar.xz.drv
>
> Where the inkscape drv derives to
> /gnu/store/wp4v7qsyjngxggncz34gaidb3yqcqy3l-inkscape-1.0
>
> https.access.log:XXX.XXX.XXX.XXX - - [28/Aug/2020:00:48:08 +0200] "GET
> /wp4v7qsyjngxggncz34gaidb3yqcqy3l.narinfo HTTP/1.1" 200 3336 "-" "GNU Guile"
>
> It's also in the cache:
> -rw------- 1 root root 3451 28. Aug 01:18
> /var/guix/substitute/cache/4refhwxbjmeua2kwg2nmzhv4dg4d3dorpjefq7kiciw2pfhaf26a/wp4v7qsyjngxggncz34gaidb3yqcqy3l
>
> (narinfo (version 2) (cache-uri "https://ci.guix.gnu.org") (date
> 1598570321) (ttl 7776000) (value "StorePath:
> /gnu/store/wp4v7qsyjngxggncz34gaidb3yqcqy3l-inkscape-1.0\nURL:
> nar/gzip/wp4v7qsyjngxggncz34gaidb3yqcqy3l-inkscape-1.0\nCompression:
> gzip\nFileSize: 40257671\nURL:
> nar/lzip/wp4v7qsyjngxggncz34gaidb3yqcqy3l-inkscape-1.0\nCompression:
> lzip\nFileSize: 16181383\nNarHash:
> sha256:1i44f21lnxmajdir2jqvg9d28518fipbv3jq4cpf6wmmk1xgqr8m\nNarSize:
> 164233984\nReferences: 01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib
> 07m4rm6cwdj2m5mzh6n19wldn1if3h0q-glibmm-2.62.0
> [...]
> zrmhnj3pwchn2msphgnwzwd3q89m46rn-aspell-0.60.8\nSystem:
> x86_64-linux\nDeriver:
> s8f2r8md9sjmmgnac1k5y881d6a84c90-inkscape-1.0.drv\nSignature:
> 1;berlin.guix.gnu.org;LONG_KEY\n"))
>
> I have no idea what is wrong here...

I’m not sure what conclusions you’re drawing here?  :-)

As you found, each entry in /var/guix/substitute/cache has a TTL,
including for negative lookups.  This is why one can observe different
behaviors on different machines: one machine can think the substitute is
unavailable (cached negative entry not yet expired), while the other got
a positive lookup soon after the substitute had been “baked” on the
server.

TTLs vary.  For successful lookups, this is usually a long TTL (see
‘guix publish --ttl’).  For negative lookups, there are two cases: a
1h-or-so TTL for “absolute no”, and a 5mn TTL for
“substitute-being-baked no”.

On top of that, nginx on ci.guix.gnu.org might perform extra caching,
though we’d need to check the config.

HTH!

Ludo’.