Speed up querying for revision package derivations

By splitting it up by system.
This commit is contained in:
Christopher Baines 2024-06-21 15:08:37 +01:00
parent 4e7c2bcfbf
commit e6205e988a
2 changed files with 49 additions and 39 deletions

View file

@ -198,7 +198,7 @@ ORDER BY systems.system DESC,
(define* (select-package-derivations-in-revision conn
commit-hash
#:key
systems
system
targets
minimum-builds
maximum-builds
@ -214,18 +214,24 @@ ORDER BY systems.system DESC,
(string-join
`(,@(filter-map
(lambda (field values)
(if values
(cond
((list? values)
(string-append
field " IN ("
(string-join (map (lambda (value)
(simple-format #f "'~A'" value))
values)
",")
")")
#f))
'("systems.system"
"target")
(list systems
")"))
((number? values)
(string-append
field " = " (number->string values)))
(else
#f)))
'("package_derivations.system_id" "target")
(list
(and=> system (lambda (system)
(system->system-id conn system)))
targets))
,@(if minimum-builds
(list
@ -346,7 +352,6 @@ EXISTS (
(string-append
"
SELECT derivations.file_name,
systems.system,
package_derivations.target"
(if include-builds?
",
@ -371,8 +376,6 @@ SELECT derivations.file_name,
"")
"
FROM derivations
INNER JOIN systems
ON derivations.system_id = systems.id
INNER JOIN derivations_by_output_details_set
ON derivations.id = derivations_by_output_details_set.derivation_id
INNER JOIN package_derivations
@ -400,7 +403,7 @@ ORDER BY derivations.file_name
"")))
(map (match-lambda
((file_name system target builds)
((file_name target builds)
(list file_name
system
target
@ -408,7 +411,7 @@ ORDER BY derivations.file_name
(eq? #f builds))
#()
(json-string->scm builds))))
((file_name system target)
((file_name target)
(list file_name system target)))
(exec-query conn
query

View file

@ -1069,8 +1069,8 @@
(assq-ref query-parameters 'field)))
(letpar&
((derivations
(with-resource-from-pool (connection-pool) conn
(if search-query
(with-resource-from-pool (connection-pool) conn
(search-package-derivations-in-revision
conn
commit-hash
@ -1088,11 +1088,15 @@
string->symbol)
#:limit-results limit-results
#:after-name (assq-ref query-parameters 'after_name)
#:include-builds? (member "builds" fields))
#:include-builds? (member "builds" fields)))
(concatenate!
(par-map&
(lambda (system)
(with-resource-from-pool (connection-pool) conn
(select-package-derivations-in-revision
conn
commit-hash
#:systems (assq-ref query-parameters 'system)
#:system system
#:targets (assq-ref query-parameters 'target)
#:maximum-builds (assq-ref query-parameters 'maximum_builds)
#:minimum-builds (assq-ref query-parameters 'minimum_builds)
@ -1105,7 +1109,10 @@
string->symbol)
#:limit-results limit-results
#:after-name (assq-ref query-parameters 'after_name)
#:include-builds? (member "builds" fields)))))
#:include-builds? (member "builds" fields))))
(or (assq-ref query-parameters 'system)
(call-with-resource-from-pool (connection-pool)
list-systems))))))
(build-server-urls
(call-with-resource-from-pool (connection-pool)
select-build-server-urls-by-id)))