cbaines pushed a commit to branch master
in repository data-service.

commit 50127de12a56177f7e953a8d8a01cea8f779adb7
Author: Christopher Baines <[email protected]>
AuthorDate: Sat Dec 21 08:39:36 2024 +0000

    Parallelise inserting derivation counts
---
 guix-data-service/jobs/load-new-guix-revision.scm | 59 +++++++++++++----------
 1 file 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)

Reply via email to