mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-26 12:39:36 -05:00
store: Cache `add-text-to-store' results.
* guix/store.scm (<nix-server>)[atts-cache]: New field. (add-text-to-store/cached): New procedure. Use it as a wrapper around `add-text-to-store'. When running "guix-build gdb", this reduces the number of RPCs from 3048 to 289, and execution time from 4.7s to 2.6s.
This commit is contained in:
parent
2c3f47ee3a
commit
bdcf35a6b2
1 changed files with 21 additions and 3 deletions
|
@ -293,7 +293,7 @@ (define-syntax read-arg
|
||||||
|
|
||||||
(define-record-type <nix-server>
|
(define-record-type <nix-server>
|
||||||
(%make-nix-server socket major minor
|
(%make-nix-server socket major minor
|
||||||
ats-cache)
|
ats-cache atts-cache)
|
||||||
nix-server?
|
nix-server?
|
||||||
(socket nix-server-socket)
|
(socket nix-server-socket)
|
||||||
(major nix-server-major-version)
|
(major nix-server-major-version)
|
||||||
|
@ -302,7 +302,8 @@ (define-record-type <nix-server>
|
||||||
;; Caches. We keep them per-connection, because store paths build
|
;; Caches. We keep them per-connection, because store paths build
|
||||||
;; during the session are temporary GC roots kept for the duration of
|
;; during the session are temporary GC roots kept for the duration of
|
||||||
;; the session.
|
;; the session.
|
||||||
(ats-cache nix-server-add-to-store-cache))
|
(ats-cache nix-server-add-to-store-cache)
|
||||||
|
(atts-cache nix-server-add-text-to-store-cache))
|
||||||
|
|
||||||
(define-condition-type &nix-error &error
|
(define-condition-type &nix-error &error
|
||||||
nix-error?)
|
nix-error?)
|
||||||
|
@ -340,6 +341,7 @@ (define* (open-connection #:optional (file %default-socket-path)
|
||||||
(let ((s (%make-nix-server s
|
(let ((s (%make-nix-server s
|
||||||
(protocol-major v)
|
(protocol-major v)
|
||||||
(protocol-minor v)
|
(protocol-minor v)
|
||||||
|
(make-hash-table)
|
||||||
(make-hash-table))))
|
(make-hash-table))))
|
||||||
(let loop ((done? (process-stderr s)))
|
(let loop ((done? (process-stderr s)))
|
||||||
(or done? (process-stderr s)))
|
(or done? (process-stderr s)))
|
||||||
|
@ -462,6 +464,22 @@ (define-operation (add-text-to-store (string name) (string text)
|
||||||
path."
|
path."
|
||||||
store-path)
|
store-path)
|
||||||
|
|
||||||
|
(define add-text-to-store/cached
|
||||||
|
(let ((add-text-to-store add-text-to-store))
|
||||||
|
(lambda (server name text references)
|
||||||
|
"Add TEXT under file NAME in the store, and return its store path.
|
||||||
|
REFERENCES is the list of store paths referred to by the resulting store
|
||||||
|
path."
|
||||||
|
(let ((args `(,name ,text ,references))
|
||||||
|
(cache (nix-server-add-text-to-store-cache server)))
|
||||||
|
(or (hash-ref cache args)
|
||||||
|
(let ((path (add-text-to-store server name text
|
||||||
|
references)))
|
||||||
|
(hash-set! cache args path)
|
||||||
|
path))))))
|
||||||
|
|
||||||
|
(set! add-text-to-store add-text-to-store/cached)
|
||||||
|
|
||||||
(define-operation (add-to-store (string basename)
|
(define-operation (add-to-store (string basename)
|
||||||
(boolean fixed?) ; obsolete, must be #t
|
(boolean fixed?) ; obsolete, must be #t
|
||||||
(boolean recursive?)
|
(boolean recursive?)
|
||||||
|
@ -488,7 +506,7 @@ (define add-to-store/cached
|
||||||
(hash-set! cache args path)
|
(hash-set! cache args path)
|
||||||
path))))))
|
path))))))
|
||||||
|
|
||||||
(define add-to-store add-to-store/cached)
|
(set! add-to-store add-to-store/cached)
|
||||||
|
|
||||||
(define-operation (build-derivations (string-list derivations))
|
(define-operation (build-derivations (string-list derivations))
|
||||||
"Build DERIVATIONS, and return when the worker is done building them.
|
"Build DERIVATIONS, and return when the worker is done building them.
|
||||||
|
|
Loading…
Reference in a new issue