diff options
author | Christopher Baines <mail@cbaines.net> | 2020-05-08 17:16:26 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-05-08 17:16:26 +0100 |
commit | 6315b898754c3a5fbbc0e752743b33c9175489b1 (patch) | |
tree | b8ed5375d110441e30d4c7ad48a486cd517587ef /guix-build-coordinator/coordinator.scm | |
parent | c595d561896b3aa29106fb18e45fd737ab0de702 (diff) | |
download | build-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.scm | 52 |
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")) |