cbaines pushed a commit to branch master
in repository data-service.
commit 786908281610e9ae906e23af15a302b10dc000ab
Author: Christopher Baines <[email protected]>
AuthorDate: Thu Aug 8 13:30:30 2024 +0100
Parallelise inserting package derivation distribution counts
---
guix-data-service/jobs/load-new-guix-revision.scm | 25 +++++----
.../model/guix-revision-package-derivation.scm | 63 ++++++++++++----------
2 files changed, 51 insertions(+), 37 deletions(-)
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm
b/guix-data-service/jobs/load-new-guix-revision.scm
index 1b13881..a8e056d 100644
--- a/guix-data-service/jobs/load-new-guix-revision.scm
+++ b/guix-data-service/jobs/load-new-guix-revision.scm
@@ -1856,8 +1856,9 @@ SELECT 1 FROM derivation_source_file_nars WHERE
derivation_source_file_id = $1"
(loop (catch #t
(lambda ()
(stat:size (stat "/var/guix/db/db.sqlite-wal")))
- (lambda _ 0)))))
+ (lambda _ 0))))))
+ (define (process-system-and-target system target)
(with-time-logging
(simple-format #f "processing derivations for ~A" (cons system
target))
(let ((derivations-vector (make-vector packages-count)))
@@ -1913,7 +1914,18 @@ SELECT 1 FROM derivation_source_file_nars WHERE
derivation_source_file_id = $1"
guix-revision-id
package-derivation-ids-chunk)))
2000
- package-derivation-ids))))))
+ package-derivation-ids)))))
+
+ (with-resource-from-pool postgresql-connection-pool conn
+ (with-time-logging
+ (simple-format
+ #f "insert-guix-revision-package-derivation-distribution-counts
(~A ~A)"
+ system target)
+ (insert-guix-revision-package-derivation-distribution-counts
+ conn
+ guix-revision-id
+ system
+ (or target "")))))
(let ((process-system-and-target/fiberized
(fiberize process-system-and-target
@@ -1925,14 +1937,7 @@ SELECT 1 FROM derivation_source_file_nars WHERE
derivation_source_file_id = $1"
(with-resource-from-pool inf-and-store-pool res
(match res
((inferior . inferior-store)
- (inferior-fetch-system-target-pairs inferior))))))
-
- (with-resource-from-pool postgresql-connection-pool conn
- (with-time-logging
- "insert-guix-revision-package-derivation-distribution-counts"
- (insert-guix-revision-package-derivation-distribution-counts
- conn
- guix-revision-id))))
+ (inferior-fetch-system-target-pairs inferior)))))))
(define (extract-and-store-system-tests)
(if skip-system-tests?
diff --git a/guix-data-service/model/guix-revision-package-derivation.scm
b/guix-data-service/model/guix-revision-package-derivation.scm
index 63c23e5..99a7079 100644
--- a/guix-data-service/model/guix-revision-package-derivation.scm
+++ b/guix-data-service/model/guix-revision-package-derivation.scm
@@ -20,6 +20,7 @@
#:use-module (ice-9 threads)
#:use-module (squee)
#:use-module (guix-data-service database)
+ #:use-module (guix-data-service model system)
#:export (insert-guix-revision-package-derivations
insert-guix-revision-package-derivation-distribution-counts
@@ -46,17 +47,9 @@
(define (insert-guix-revision-package-derivation-distribution-counts
conn
- guix-revision-id)
- (define system-ids-and-targets
- (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 guix-revision-id)))
+ guix-revision-id
+ system
+ target)
(define (get-count-for-next-level system-id target level-counts)
(define next-level
@@ -154,17 +147,16 @@ VALUES ($1, $2, $3, $4, $5)"
(number->string level)
(number->string count))))
- (for-each
- (match-lambda
- ((system-id target)
+ (define system-id
+ (number->string
+ (system->system-id conn system)))
- (let loop ((level-counts '()))
- (let ((level (length level-counts))
- (count (get-count-for-next-level system-id target level-counts)))
- (unless (= count 0)
- (insert-level-count system-id target level count)
- (loop (append level-counts (list count))))))))
- system-ids-and-targets))
+ (let loop ((level-counts '()))
+ (let ((level (length level-counts))
+ (count (get-count-for-next-level system-id target level-counts)))
+ (unless (= count 0)
+ (insert-level-count system-id target level count)
+ (loop (append level-counts (list count)))))))
(define (backfill-guix-revision-package-derivation-distribution-counts conn)
(define revision-ids
@@ -183,12 +175,29 @@ ORDER BY id DESC")))
(for-each
(lambda (revision-id)
(simple-format #t "backfilling
guix_revision_package_derivation_distribution_counts for revision ~A\n"
revision-id)
- (with-postgresql-transaction
- conn
- (lambda (conn)
- (insert-guix-revision-package-derivation-distribution-counts
- conn
- revision-id))))
+ (let ((system-ids-and-targets
+ (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))))
+
+ (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)))))
revision-ids))
(define* (get-sql-to-select-package-and-related-derivations-for-revision