Re-arrange some of the load new revision code

Try to isolate the code that inserts in to the database, so that the relevant
tables can be locked during this time.
This commit is contained in:
Christopher Baines 2019-06-21 15:47:59 +02:00
parent 766656086f
commit baf2b17bf8

View file

@ -196,54 +196,62 @@
(lambda () (lambda ()
(deduplicate-inferior-packages (deduplicate-inferior-packages
(inferior-packages inf))))) (inferior-packages inf)))))
(package-license-set-ids
(log-time "fetching inferior package license metadata"
(lambda ()
(inferior-packages->license-set-ids conn inf
packages))))
(packages-metadata-ids
(log-time "fetching inferior package metadata"
(lambda ()
(inferior-packages->package-metadata-ids
conn packages package-license-set-ids))))
(package-ids
(log-time "getting package-ids"
(lambda ()
(inferior-packages->package-ids
conn packages packages-metadata-ids))))
(inferior-package-id->package-id-hash-table
(alist->hashq-table
(map (lambda (package package-id)
(cons (inferior-package-id package)
package-id))
packages
package-ids)))
(inferior-data-4-tuples (inferior-data-4-tuples
(log-time "getting inferior derivations" (log-time "getting inferior derivations"
(lambda () (lambda ()
(all-inferior-package-derivations store inf packages))))) (all-inferior-package-derivations store inf packages)))))
(simple-format (define loading-inferior-data
#t "debug: finished loading information from inferior\n") (record-start-time "critical region fetching and loading inferior data"))
(close-inferior inf)
(let ((derivation-ids (let* ((package-license-set-ids
(derivation-file-names->derivation-ids (log-time "fetching inferior package license metadata"
conn (lambda ()
(map fourth inferior-data-4-tuples))) (inferior-packages->license-set-ids conn inf
(flat-package-ids-systems-and-targets packages))))
(map (packages-metadata-ids
(match-lambda (log-time "fetching inferior package metadata"
((inferior-package-id system target derivation-file-name) (lambda ()
(list (hashq-ref inferior-package-id->package-id-hash-table (inferior-packages->package-metadata-ids
inferior-package-id) conn packages package-license-set-ids))))
system (package-ids
target))) (log-time "getting package-ids"
inferior-data-4-tuples))) (lambda ()
(inferior-packages->package-ids
conn packages packages-metadata-ids)))))
(insert-package-derivations conn (simple-format
flat-package-ids-systems-and-targets #t "debug: finished loading information from inferior\n")
derivation-ids)))) (close-inferior inf)
(let* ((derivation-ids
(derivation-file-names->derivation-ids
conn
(map fourth inferior-data-4-tuples)))
(inferior-package-id->package-id-hash-table
(alist->hashq-table
(map (lambda (package package-id)
(cons (inferior-package-id package)
package-id))
packages
package-ids)))
(flat-package-ids-systems-and-targets
(map
(match-lambda
((inferior-package-id system target derivation-file-name)
(list (hashq-ref inferior-package-id->package-id-hash-table
inferior-package-id)
system
target)))
inferior-data-4-tuples))
(package-derivation-ids
(insert-package-derivations conn
flat-package-ids-systems-and-targets
derivation-ids)))
(record-end-time loading-inferior-data)
package-derivation-ids))))
(define (inferior-package-transitive-supported-systems package) (define (inferior-package-transitive-supported-systems package)
((@@ (guix inferior) inferior-package-field) ((@@ (guix inferior) inferior-package-field)