gexp: Do not add derivations to the object cache.

That was needlessly making the object cache grow.

* guix/gexp.scm (lower-object, lower+expand-object): Bypass the object
cache when OBJ is a derivation.  This almost halves the number of
cache lookups and reduces the number of entries from 3.4K to 2.6K when
doing "guix build libreoffice -d --no-grafts".
This commit is contained in:
Ludovic Courtès 2021-03-22 22:34:43 +01:00
parent a779363b6a
commit 324a235579
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 16 additions and 11 deletions

View File

@ -258,14 +258,17 @@ OBJ must be an object that has an associated gexp compiler, such as a
(#f
(raise (condition (&gexp-input-error (input obj)))))
(lower
;; Cache in STORE the result of lowering OBJ.
(mcached (mlet %store-monad ((lowered (lower obj system target)))
(if (and (struct? lowered)
(not (derivation? lowered)))
(loop lowered)
(return lowered)))
obj
system target graft?))))))
;; Cache in STORE the result of lowering OBJ. If OBJ is a
;; derivation, bypass the cache.
(if (derivation? obj)
(return obj)
(mcached (mlet %store-monad ((lowered (lower obj system target)))
(if (and (struct? lowered)
(not (derivation? lowered)))
(loop lowered)
(return lowered)))
obj
system target graft?)))))))
(define* (lower+expand-object obj
#:optional (system (%current-system))
@ -280,9 +283,11 @@ expand to file names, but it's possible to expand to a plain data type."
(raise (condition (&gexp-input-error (input obj)))))
(lower
(mlet* %store-monad ((graft? (grafting?))
(lowered (mcached (lower obj system target)
obj
system target graft?)))
(lowered (if (derivation? obj)
(return obj)
(mcached (lower obj system target)
obj
system target graft?))))
;; LOWER might return something that needs to be further
;; lowered.
(if (struct? lowered)