aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/coordinator.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/coordinator.scm')
-rw-r--r--guix-build-coordinator/coordinator.scm64
1 files changed, 64 insertions, 0 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index a38045b..8d15fc7 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -27,8 +27,11 @@
#:use-module (ice-9 atomic)
#:use-module (ice-9 threads)
#:use-module (ice-9 exceptions)
+ #:use-module (web uri)
#:use-module (gcrypt random)
+ #:use-module (fibers)
#:use-module (fibers channels)
+ #:use-module (fibers conditions)
#:use-module (prometheus)
#:use-module (guix derivations)
#:use-module (guix build utils)
@@ -36,13 +39,18 @@
#:use-module (guix-build-coordinator config)
#:use-module (guix-build-coordinator datastore)
#:use-module (guix-build-coordinator build-allocator)
+ #:use-module (guix-build-coordinator agent-messaging http)
+ #:use-module (guix-build-coordinator client-communication)
#:export (make-build-coordinator
build-coordinator-datastore
build-coordinator-hooks
build-coordinator-metrics-registry
build-coordinator-allocation-strategy
+ %default-agent-uri
+ %default-client-uri
perform-coordinator-service-startup
+ run-coordinator-service
submit-build
new-agent
@@ -104,6 +112,62 @@
(when trigger-build-allocation?
(trigger-build-allocation build-coordinator)))
+(define %default-agent-uri (string->uri "http://0.0.0.0:8745"))
+(define %default-client-uri (string->uri "http://127.0.0.1:8746"))
+
+(define* (run-coordinator-service build-coordinator
+ #:key
+ (update-datastore? #t)
+ (pid-file #f)
+ (agent-communication-uri %default-agent-uri)
+ (client-communication-uri %default-client-uri)
+ secret-key-base)
+ (perform-coordinator-service-startup
+ build-coordinator
+ #:update-datastore? update-datastore?
+ #:pid-file pid-file)
+
+ ;; Create some worker thread channels, which need to be created prior
+ ;; to run-fibers being called.
+ (let ((chunked-request-channel
+ ;; There are fibers issues when trying to read the chunked
+ ;; requests, so do this in dedicated threads.
+ (make-worker-thread-channel (const '())
+ #:parallelism 8))
+ (substitutes-channel
+ (make-worker-thread-channel (const '())
+ #:parallelism 2)))
+
+ (let ((finished? (make-condition)))
+ (call-with-sigint
+ (lambda ()
+ (run-fibers
+ (lambda ()
+ ;; Start the agent messaging server
+ (match (uri-scheme agent-communication-uri)
+ ('http
+ (let ((host (uri-host agent-communication-uri))
+ (port (uri-port agent-communication-uri)))
+ (http-agent-messaging-start-server
+ port
+ host
+ secret-key-base
+ build-coordinator
+ chunked-request-channel)
+ (simple-format #t "listening on ~A:~A\n"
+ host port))))
+
+ ;; Start the client messaging server
+ (start-client-request-server
+ secret-key-base
+ (uri-host client-communication-uri)
+ (uri-port client-communication-uri)
+ build-coordinator
+ substitutes-channel)
+
+ (wait finished?))))
+ finished?))))
+
(define* (submit-build build-coordinator derivation-file
#:key
requested-uuid