aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2024-03-08 10:31:26 +0000
committerChristopher Baines <mail@cbaines.net>2024-03-08 11:29:00 +0000
commit7d1cc4d3252e96ad94f7caca8497478056de8972 (patch)
tree550435f7eb359f20b4ea2bd5a5af1ccbf3ba7740 /guix-data-service
parent5f80856ad1587aea38ee4e7b54db558cdb43f6b7 (diff)
downloaddata-service-7d1cc4d3252e96ad94f7caca8497478056de8972.tar
data-service-7d1cc4d3252e96ad94f7caca8497478056de8972.tar.gz
Attempt to avoid issues with the guix-daemon WAL
Diffstat (limited to 'guix-data-service')
-rw-r--r--guix-data-service/database.scm19
-rw-r--r--guix-data-service/jobs/load-new-guix-revision.scm11
2 files changed, 30 insertions, 0 deletions
diff --git a/guix-data-service/database.scm b/guix-data-service/database.scm
index 756bfef..7270e90 100644
--- a/guix-data-service/database.scm
+++ b/guix-data-service/database.scm
@@ -38,6 +38,8 @@
check-test-database!
+ lock-advisory-session-lock
+ unlock-advisory-session-lock
with-advisory-session-lock
with-advisory-session-lock/log-time
obtain-advisory-transaction-lock
@@ -282,6 +284,23 @@
(unless (string=? name "guix_data_service_test")
(error "tests being run against non test database")))))
+(define (lock-advisory-session-lock conn lock)
+ (let ((lock-number (symbol-hash lock)))
+ (exec-query conn
+ "SELECT pg_advisory_lock($1)"
+ (list (number->string lock-number)))
+ lock-number))
+
+(define (unlock-advisory-session-lock conn lock)
+ (let ((lock-number
+ (if (number? lock)
+ lock
+ (symbol-hash lock))))
+ (exec-query conn
+ "SELECT pg_advisory_lock($1)"
+ (list (number->string lock-number))))
+ #t)
+
(define (with-advisory-session-lock conn lock f)
(let ((lock-number (number->string (symbol-hash lock))))
(exec-query conn
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm
index b0493ca..f6d4292 100644
--- a/guix-data-service/jobs/load-new-guix-revision.scm
+++ b/guix-data-service/jobs/load-new-guix-revision.scm
@@ -1445,6 +1445,16 @@
(lambda (filename)
(put-message channel filename))))
+ (define lock-num
+ ;; I'm seeing problems with the guix-dameon WAL growing excessively, which
+ ;; I think is happening when processing revivions involving lots of new
+ ;; derivations. So limit the concurrency here in the hope that this'll
+ ;; help.
+ (with-time-logging "getting 'inferior-package-derivations lock"
+ (lock-advisory-session-lock
+ conn
+ 'inferior-package-derivations)))
+
(simple-format #t "debug: extract-information-from: ~A\n" store-path)
(letpar& ((inferior-lint-checkers-and-warnings-data
@@ -1524,6 +1534,7 @@
pkg-to-replacement-hash-table))))))))
(destroy-resource-pool inf-and-store-pool)
+ (unlock-advisory-session-lock conn lock-num)
(simple-format
#t "debug: finished loading information from inferior\n")