aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/coordinator.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-05-08 17:16:26 +0100
committerChristopher Baines <mail@cbaines.net>2020-05-08 17:16:26 +0100
commit6315b898754c3a5fbbc0e752743b33c9175489b1 (patch)
treeb8ed5375d110441e30d4c7ad48a486cd517587ef /guix-build-coordinator/coordinator.scm
parentc595d561896b3aa29106fb18e45fd737ab0de702 (diff)
downloadbuild-coordinator-6315b898754c3a5fbbc0e752743b33c9175489b1.tar
build-coordinator-6315b898754c3a5fbbc0e752743b33c9175489b1.tar.gz
Make a record type for the build coordinator
This is already useful to pass around the datastore, hooks and metrics registry, and will become more useful to pass around the allocator to use.
Diffstat (limited to 'guix-build-coordinator/coordinator.scm')
-rw-r--r--guix-build-coordinator/coordinator.scm52
1 files changed, 38 insertions, 14 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index ce67cfd..0cc41d0 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -20,6 +20,7 @@
(define-module (guix-build-coordinator coordinator)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:use-module (ice-9 ftw)
#:use-module (ice-9 match)
@@ -33,7 +34,10 @@
#:use-module (guix-build-coordinator metrics)
#:use-module (guix-build-coordinator datastore)
#:use-module (guix-build-coordinator build-allocator)
- #:export (coordinator-metrics-registry
+ #:export (make-build-coordinator
+ build-coordinator-datastore
+ build-coordinator-hooks
+ build-coordinator-metrics-registry
submit-build
new-agent
@@ -48,8 +52,19 @@
handle-build-result
handle-setup-failure-report))
-(define coordinator-metrics-registry
- (make-metrics-registry))
+(define-record-type <build-coordinator>
+ (make-build-coordinator-record datastore hooks metrics-registry)
+ build-coordinator?
+ (datastore build-coordinator-datastore)
+ (hooks build-coordinator-hooks)
+ (metrics-registry build-coordinator-metrics-registry))
+
+(define* (make-build-coordinator #:key datastore hooks
+ (metrics-registry (make-metrics-registry)))
+ (make-build-coordinator-record
+ datastore
+ hooks
+ metrics-registry))
(define* (submit-build datastore derivation
#:key
@@ -118,7 +133,7 @@
(basic-build-allocation-strategy datastore))
#t)
-(define (make-build-allocator-thread datastore)
+(define (make-build-allocator-thread build-coordinator)
(define mtx (make-mutex))
(define v (make-condition-variable))
@@ -131,7 +146,7 @@
(with-mutex mtx
(wait-condition-variable v mtx)
(call-with-duration-metric
- coordinator-metrics-registry
+ (build-coordinator-metrics-registry build-coordinator)
"guixbuildcoordinator_allocate_builds_duration_seconds"
(lambda ()
(with-exception-handler
@@ -146,12 +161,16 @@
(backtrace)
(raise-exception exn))
(lambda ()
- (allocate-builds datastore))))
+ (allocate-builds
+ (build-coordinator-datastore build-coordinator)))))
#:unwind? #t)))))))
trigger-build-allocation)
-(define (start-hook-processing-thread datastore hooks)
+(define (start-hook-processing-thread build-coordinator)
+ (define datastore
+ (build-coordinator-datastore build-coordinator))
+
(call-with-new-thread
(lambda ()
(while #t
@@ -161,7 +180,9 @@
(catch
#t
(lambda ()
- (apply (assq-ref hooks event) datastore arguments)
+ (apply (assq-ref (build-coordinator-hooks build-coordinator)
+ event)
+ datastore arguments)
(datastore-delete-unprocessed-hook-event datastore id))
(lambda (key . args)
(simple-format #t "error: running ~A hook: ~A ~A\n"
@@ -169,18 +190,18 @@
#f)))))))
#t)
-(define (fetch-builds datastore agent)
+(define (fetch-builds build-coordinator agent)
(call-with-duration-metric
- coordinator-metrics-registry
+ (build-coordinator-metrics-registry build-coordinator)
"guixbuildcoordinator_coordinator_fetch_builds_duration_seconds"
(lambda ()
(let ((builds (datastore-list-allocation-plan-builds
- datastore
+ (build-coordinator-datastore build-coordinator)
agent
1)))
(unless (null? builds)
(datastore-allocate-builds-to-agent
- datastore
+ (build-coordinator-datastore build-coordinator)
agent
(map (lambda (build)
(assq-ref build 'uuid))
@@ -225,10 +246,13 @@
(simple-format #f "found multiple files for ~A: ~A"
build-id files))))))
-(define (handle-build-result datastore
+(define (handle-build-result build-coordinator
agent-id build-id result-json)
+ (define datastore
+ (build-coordinator-datastore build-coordinator))
+
(call-with-duration-metric
- coordinator-metrics-registry
+ (build-coordinator-metrics-registry build-coordinator)
"guixbuildcoordinator_coordinator_handle_build_result_duration_seconds"
(lambda ()
(let* ((result (assoc-ref result-json "result"))