Don't compare across systems in one query

As the query seems to be super slow, and this allows parallelising it as well.
This commit is contained in:
Christopher Baines 2024-06-21 12:11:48 +01:00
parent 94e66d5b1f
commit 4e7c2bcfbf
2 changed files with 32 additions and 29 deletions

View file

@ -255,7 +255,7 @@ GROUP BY derivation_source_files.store_path"))
base_guix_revision_id base_guix_revision_id
target_guix_revision_id target_guix_revision_id
#:key #:key
(systems #f) (system #f)
(targets #f) (targets #f)
(include-builds? #t) (include-builds? #t)
(exclude-unchanged-outputs? #t) (exclude-unchanged-outputs? #t)
@ -267,15 +267,8 @@ GROUP BY derivation_source_files.store_path"))
after-name) after-name)
(define extra-constraints (define extra-constraints
(string-append (string-append
(if systems (if system
(string-append (string-append " AND systems.system = '" system "'")
" AND systems.system IN ("
(string-join (map
(lambda (s)
(string-append "'" s "'"))
systems)
", ")
")")
"") "")
(if targets (if targets
(string-append (string-append

View file

@ -684,24 +684,30 @@
(let ((base-commit (assq-ref query-parameters 'base_commit)) (let ((base-commit (assq-ref query-parameters 'base_commit))
(target-commit (assq-ref query-parameters 'target_commit)) (target-commit (assq-ref query-parameters 'target_commit))
(systems (assq-ref query-parameters 'system)) (systems (or (assq-ref query-parameters 'system)
(call-with-resource-from-pool (connection-pool)
list-systems)))
(targets (assq-ref query-parameters 'target)) (targets (assq-ref query-parameters 'target))
(build-change (and=> (build-change (and=>
(assq-ref query-parameters 'build_change) (assq-ref query-parameters 'build_change)
string->symbol)) string->symbol))
(after-name (assq-ref query-parameters 'after_name)) (after-name (assq-ref query-parameters 'after_name))
(limit-results (assq-ref query-parameters 'limit_results))) (limit-results (assq-ref query-parameters 'limit_results)))
(letpar& ((data (let ((data
(concatenate!
(par-map&
(lambda (system)
(with-resource-from-pool (connection-pool) conn (with-resource-from-pool (connection-pool) conn
(package-derivation-differences-data (package-derivation-differences-data
conn conn
(commit->revision-id conn base-commit) (commit->revision-id conn base-commit)
(commit->revision-id conn target-commit) (commit->revision-id conn target-commit)
#:systems systems #:system system
#:targets targets #:targets targets
#:build-change build-change #:build-change build-change
#:after-name after-name #:after-name after-name
#:limit-results limit-results))) #:limit-results limit-results)))
systems)))
(build-server-urls (build-server-urls
(call-with-resource-from-pool (connection-pool) (call-with-resource-from-pool (connection-pool)
select-build-server-urls-by-id))) select-build-server-urls-by-id)))
@ -771,7 +777,9 @@
(base-datetime (assq-ref query-parameters 'base_datetime)) (base-datetime (assq-ref query-parameters 'base_datetime))
(target-branch (assq-ref query-parameters 'target_branch)) (target-branch (assq-ref query-parameters 'target_branch))
(target-datetime (assq-ref query-parameters 'target_datetime)) (target-datetime (assq-ref query-parameters 'target_datetime))
(systems (assq-ref query-parameters 'system)) (systems (or (assq-ref query-parameters 'system)
(call-with-resource-from-pool (connection-pool)
list-systems)))
(targets (assq-ref query-parameters 'target)) (targets (assq-ref query-parameters 'target))
(build-change (and=> (build-change (and=>
(assq-ref query-parameters 'build_change) (assq-ref query-parameters 'build_change)
@ -789,18 +797,20 @@
(select-guix-revision-for-branch-and-datetime conn (select-guix-revision-for-branch-and-datetime conn
target-branch target-branch
target-datetime)))) target-datetime))))
(letpar& (let ((data
((data (par-map&
(lambda (system)
(with-resource-from-pool (connection-pool) conn (with-resource-from-pool (connection-pool) conn
(package-derivation-differences-data (package-derivation-differences-data
conn conn
(first base-revision-details) (first base-revision-details)
(first target-revision-details) (first target-revision-details)
#:systems systems #:system system
#:targets targets #:targets targets
#:build-change build-change #:build-change build-change
#:after-name after-name #:after-name after-name
#:limit-results limit-results)))) #:limit-results limit-results)))
systems)))
(let ((names-and-versions (let ((names-and-versions
(package-derivation-data->names-and-versions data))) (package-derivation-data->names-and-versions data)))
(let-values (let-values