aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/jobs
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/jobs')
-rw-r--r--guix-data-service/jobs/load-new-guix-revision.scm125
1 files changed, 71 insertions, 54 deletions
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm
index a7da8a8..0059f85 100644
--- a/guix-data-service/jobs/load-new-guix-revision.scm
+++ b/guix-data-service/jobs/load-new-guix-revision.scm
@@ -1785,6 +1785,46 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(close-connection store)
(close-inferior inferior)))))
+ (define (call-with-inferior proc)
+ (define (check-wal-size)
+ (let loop ((wal-bytes
+ (catch #t
+ (lambda ()
+ (stat:size (stat "/var/guix/db/db.sqlite-wal")))
+ (lambda _ 0))))
+ (when (> wal-bytes (* 512 (expt 2 20)))
+ (simple-format #t "debug: guix-daemon WAL is large (~A), waiting\n"
+ wal-bytes)
+
+ (sleep 30)
+ (loop (catch #t
+ (lambda ()
+ (stat:size (stat "/var/guix/db/db.sqlite-wal")))
+ (lambda _ 0))))))
+
+ (let loop ()
+ (check-wal-size)
+ (match
+ (with-exception-handler
+ (lambda (exn)
+ (if (resource-pool-timeout-error? exn)
+ 'retry
+ (raise-exception exn)))
+ (lambda ()
+ (call-with-resource-from-pool inf-and-store-pool
+ (match-lambda
+ ((inferior . inferior-store)
+ (call-with-values
+ (lambda ()
+ (proc inferior inferior-store))
+ (lambda vals
+ (cons 'result vals)))))
+ #:timeout 20))
+ #:unwind? #t)
+ ('retry (loop))
+ (('result . vals)
+ (apply values vals)))))
+
(define postgresql-connection-pool
(make-resource-pool
(lambda ()
@@ -1824,22 +1864,6 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(with-resource-from-pool postgresql-connection-pool conn
(insert-packages conn packages-data))))))
- (define (check-wal-size)
- (let loop ((wal-bytes
- (catch #t
- (lambda ()
- (stat:size (stat "/var/guix/db/db.sqlite-wal")))
- (lambda _ 0))))
- (when (> wal-bytes (* 512 (expt 2 20)))
- (simple-format #t "debug: guix-daemon WAL is large (~A), waiting\n"
- wal-bytes)
-
- (sleep 30)
- (loop (catch #t
- (lambda ()
- (stat:size (stat "/var/guix/db/db.sqlite-wal")))
- (lambda _ 0))))))
-
(define (extract-and-store-lint-checkers-and-warnings)
(define inferior-lint-checkers-data
(with-resource-from-pool inf-and-store-pool res
@@ -1869,13 +1893,11 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
;; currently infeasible
(not (eq? checker-name 'derivation)))
(begin
- (check-wal-size)
- (with-resource-from-pool inf-and-store-pool res
- (match res
- ((inferior . inferior-store)
- (inferior-lint-warnings inferior
- inferior-store
- checker-name))))))))
+ (call-with-inferior
+ (lambda (inferior inferior-store)
+ (inferior-lint-warnings inferior
+ inferior-store
+ checker-name)))))))
inferior-lint-checkers-data)))
(let ((package-ids (fibers-force package-ids-promise)))
@@ -1900,12 +1922,11 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(define (extract-and-store-package-derivations)
(define packages-count
- (with-resource-from-pool inf-and-store-pool res
- (match res
- ((inferior . inferior-store)
- (ensure-gds-inferior-packages-defined! inferior)
+ (call-with-inferior
+ (lambda (inferior inferior-store)
+ (ensure-gds-inferior-packages-defined! inferior)
- (inferior-eval '(vector-length gds-inferior-packages) inferior)))))
+ (inferior-eval '(vector-length gds-inferior-packages) inferior))))
(define chunk-size 3000)
@@ -1916,24 +1937,22 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(with-time-logging
(simple-format #f "getting derivations for ~A" (cons system target))
(let loop ((start-index 0))
- (check-wal-size)
(let* ((count
(if (>= (+ start-index chunk-size) packages-count)
(- packages-count start-index)
chunk-size))
(chunk
- (with-resource-from-pool inf-and-store-pool res
- (match res
- ((inferior . inferior-store)
- (ensure-gds-inferior-packages-defined! inferior)
-
- (inferior-package-derivations
- inferior-store
- inferior
- system
- target
- start-index
- count))))))
+ (call-with-inferior
+ (lambda (inferior inferior-store)
+ (ensure-gds-inferior-packages-defined! inferior)
+
+ (inferior-package-derivations
+ inferior-store
+ inferior
+ system
+ target
+ start-index
+ count)))))
(vector-copy! derivations-vector
start-index
chunk)
@@ -1989,10 +2008,9 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(retry-on-missing-store-item
(lambda ()
(process-system-and-target/fiberized system target)))))
- (with-resource-from-pool inf-and-store-pool res
- (match res
- ((inferior . inferior-store)
- (inferior-fetch-system-target-pairs inferior)))))))
+ (call-with-inferior
+ (lambda (inferior inferior-store)
+ (inferior-fetch-system-target-pairs inferior))))))
(define (extract-and-store-system-tests)
(if skip-system-tests?
@@ -2000,15 +2018,14 @@ SELECT 1 FROM derivation_source_file_nars WHERE derivation_source_file_id = $1"
(simple-format #t "debug: skipping system tests\n")
'())
(let ((data-with-derivation-file-names
- (with-resource-from-pool inf-and-store-pool res
- (match res
- ((inferior . inferior-store)
- (with-time-logging "getting inferior system tests"
- (all-inferior-system-tests
- inferior
- inferior-store
- guix-source
- commit)))))))
+ (call-with-inferior
+ (lambda (inferior inferior-store)
+ (with-time-logging "getting inferior system tests"
+ (all-inferior-system-tests
+ inferior
+ inferior-store
+ guix-source
+ commit))))))
(when data-with-derivation-file-names
(let ((data-with-derivation-ids
(map (match-lambda