cbaines pushed a commit to branch master
in repository data-service.
commit 22eb8d44ca8bb2e02d4db3f7e84d1575458d1039
Author: Christopher Baines <[email protected]>
AuthorDate: Wed Aug 14 21:13:55 2024 +0100
Move the resource pools to a different thread
As the server thread can block for a while when writing big responses.
---
guix-data-service/web/server.scm | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/guix-data-service/web/server.scm b/guix-data-service/web/server.scm
index cc67624..4739dd5 100644
--- a/guix-data-service/web/server.scm
+++ b/guix-data-service/web/server.scm
@@ -101,9 +101,37 @@
(%guix-data-service-metrics-registry registry)
(let ((finished? (make-condition))
+ (priority-scheduler #f)
(request-scheduler #f))
(call-with-sigint
(lambda ()
+ (call-with-new-thread
+ (lambda ()
+ (run-fibers
+ (lambda ()
+ (let* ((current (current-scheduler))
+ (schedulers
+ (cons current (scheduler-remote-peers current))))
+
+ (set! priority-scheduler current)
+
+ (for-each
+ (lambda (i sched)
+ (spawn-fiber
+ (lambda ()
+ (catch 'system-error
+ (lambda ()
+ (set-thread-name
+ (string-append "priority " (number->string i))))
+ (const #t)))
+ sched))
+ (iota (length schedulers))
+ schedulers))
+
+ (wait finished?))
+ #:hz 0
+ #:parallelism 1)))
+
(call-with-new-thread
(lambda ()
(run-fibers
@@ -151,6 +179,8 @@
(while (not request-scheduler)
(sleep 0.1))
+ (while (not priority-scheduler)
+ (sleep 0.1))
(let ((requests-metric
(make-counter-metric registry "requests_total")))
@@ -179,7 +209,8 @@ port. Also, the port used can be changed by passing the
--port option.\n"
#:idle-seconds 30
#:destructor
(lambda (conn)
- (close-postgresql-connection conn "web"))))
+ (close-postgresql-connection conn "web"))
+ #:scheduler priority-scheduler))
(reserved-connection-pool
(make-resource-pool
@@ -192,7 +223,8 @@ port. Also, the port used can be changed by passing the
--port option.\n"
#:idle-seconds 600
#:destructor
(lambda (conn)
- (close-postgresql-connection conn "web-reserved"))))
+ (close-postgresql-connection conn "web-reserved"))
+ #:scheduler priority-scheduler))
(resource-pool-default-timeout 5))