guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

04/04: store: 'run-with-store' preserves the functional object cache.


From: guix-commits
Subject: 04/04: store: 'run-with-store' preserves the functional object cache.
Date: Wed, 3 Jul 2019 17:45:34 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit dd0ee954c4fa965023fd887452927c02edb8b52f
Author: Ludovic Court├Ęs <address@hidden>
Date:   Wed Jul 3 23:29:17 2019 +0200

    store: 'run-with-store' preserves the functional object cache.
    
    This increases the hit rate of the object cache from 56% to 85% when
    running something like 'guix build libreoffice -nd'.
    
    * guix/store.scm (set-store-connection-object-cache!): New procedure.
    (run-with-store): Copy 'object-cache' field of the new store into the
    original one.
---
 guix/store.scm | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/guix/store.scm b/guix/store.scm
index 8fa1649..52940ff 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -1783,6 +1783,9 @@ the store."
   ;; when using 'gexp->derivation' and co.
   (make-parameter #f))
 
+(define set-store-connection-object-cache!
+  (record-modifier <store-connection> 'object-cache))
+
 (define* (run-with-store store mval
                          #:key
                          (guile-for-build (%guile-for-build))
@@ -1798,9 +1801,12 @@ connection, and return the result."
                  (%current-target-system target))
     (call-with-values (lambda ()
                         (run-with-state mval store))
-      (lambda (result store)
-        ;; Discard the state.
-        result))))
+      (lambda (result new-store)
+        ;; Copy the object cache from NEW-STORE so we don't fully discard the
+        ;; state.
+        (let ((cache (store-connection-object-cache new-store)))
+          (set-store-connection-object-cache! store cache)
+          result)))))
 
 
 ;;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]