diff options
author | Christopher Baines <mail@cbaines.net> | 2024-12-21 08:39:36 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-12-29 12:22:38 +0000 |
commit | 50127de12a56177f7e953a8d8a01cea8f779adb7 (patch) | |
tree | 04c683bfae79c790d183f1a25066db49ddb36155 /guix-data-service/jobs | |
parent | 6ce51e88806f4252eb1c17eed5661726d1444fa8 (diff) | |
download | data-service-50127de12a56177f7e953a8d8a01cea8f779adb7.tar data-service-50127de12a56177f7e953a8d8a01cea8f779adb7.tar.gz |
Parallelise inserting derivation counts
Diffstat (limited to 'guix-data-service/jobs')
-rw-r--r-- | guix-data-service/jobs/load-new-guix-revision.scm | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm index 83a43a0..ad3f1ed 100644 --- a/guix-data-service/jobs/load-new-guix-revision.scm +++ b/guix-data-service/jobs/load-new-guix-revision.scm @@ -2882,38 +2882,45 @@ SKIP LOCKED") (when result (fibers-parallel - (with-postgresql-connection - (simple-format #f "post load-new-guix-revision ~A counts" id) - (lambda (conn) - (let ((revision-id - (guix-revision-id-for-job conn id))) - (with-time-logging - (simple-format - #f "inserting guix_revision_package_derivation_distribution_counts for revision ~A" - revision-id) - (let ((system-ids-and-targets - (exec-query - conn - " + (let ((revision-id + system-ids-and-targets + (with-postgresql-connection + (simple-format #f "post load-new-guix-revision ~A counts" id) + (lambda (conn) + (let ((revision-id + (guix-revision-id-for-job conn id))) + (values + revision-id + (exec-query + conn + " SELECT DISTINCT system_id, target FROM package_derivations INNER JOIN guix_revision_package_derivations ON package_derivations.id = guix_revision_package_derivations.package_derivation_id WHERE revision_id = $1" - (list revision-id)))) + (list revision-id)))))))) - (with-postgresql-transaction - conn - (lambda (conn) - (for-each - (match-lambda - ((system-id target) - (insert-guix-revision-package-derivation-distribution-counts - conn - revision-id - system-id - target))) - system-ids-and-targets)))))))) + (with-time-logging + (simple-format + #f "inserting guix_revision_package_derivation_distribution_counts for revision ~A" + revision-id) + (fibers-batch-for-each + (match-lambda + ((system-id target) + (with-postgresql-connection + (simple-format #f "post load-new-guix-revision ~A counts" id) + (lambda (conn) + (with-postgresql-transaction + conn + (lambda (conn) + (insert-guix-revision-package-derivation-distribution-counts + conn + revision-id + system-id + target))))))) + parallelism + system-ids-and-targets))) (with-postgresql-connection (simple-format #f "post load-new-guix-revision ~A" id) |