diff options
author | Christopher Baines <mail@cbaines.net> | 2021-10-10 18:10:45 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-10-10 18:10:45 +0100 |
commit | e2422e358850f455100d8927483dbc35543fe706 (patch) | |
tree | a9fde6d4cca6e665b71c82399d500b26c3b82576 /guix-build-coordinator/coordinator.scm | |
parent | 76d129dc19cc0e14441ae3a74bbc44e3be570b21 (diff) | |
download | build-coordinator-e2422e358850f455100d8927483dbc35543fe706.tar build-coordinator-e2422e358850f455100d8927483dbc35543fe706.tar.gz |
Speed up storing builds
By moving looking up derivation outputs with no build to before the
transaction that writes to the database, as this will allow for more
concurrency.
Diffstat (limited to 'guix-build-coordinator/coordinator.scm')
-rw-r--r-- | guix-build-coordinator/coordinator.scm | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm index 2367d40..c95099d 100644 --- a/guix-build-coordinator/coordinator.scm +++ b/guix-build-coordinator/coordinator.scm @@ -322,38 +322,34 @@ (or requested-uuid (random-v4-uuid))) - (define (perform-datastore-changes db) - (unless (datastore-find-derivation datastore derivation-file) - (datastore-store-derivation - datastore - (read-derivation-from-file derivation-file))) - - ;; Actually create a build - (when ensure-all-related-derivation-outputs-have-builds? - (let ((derivations-lacking-builds - (datastore-list-related-derivations-with-no-build-for-outputs - datastore - derivation-file))) - (for-each - (lambda (related-derivation) - (let ((related-uuid (random-v4-uuid))) - (simple-format #t "submtiting ~A for related ~A\n" - related-uuid - related-derivation) - (store-build related-derivation + (define (build-perform-datastore-changes derivations-lacking-builds) + (lambda (_) + (unless (datastore-find-derivation datastore derivation-file) + (datastore-store-derivation + datastore + (read-derivation-from-file derivation-file))) + + (for-each + (lambda (related-derivation) + (let ((related-uuid (random-v4-uuid))) + (simple-format #t "submtiting ~A for related ~A\n" related-uuid - ;; Let the scheduler take care of - ;; the prioritisation - 0 - tags))) - derivations-lacking-builds))) - - (store-build derivation-file - build-id - priority - tags) - - #t) + related-derivation) + (store-build related-derivation + related-uuid + ;; Let the scheduler take care of + ;; the prioritisation + 0 + tags))) + derivations-lacking-builds) + + ;; Actually create a build + (store-build derivation-file + build-id + priority + tags) + + #t)) (call-with-duration-metric (build-coordinator-metrics-registry build-coordinator) @@ -366,10 +362,18 @@ (build-for-output-already-exists?)) '((no-build-submitted . build-already-exists-for-a-output)) (begin - (datastore-call-with-transaction datastore - perform-datastore-changes - #:duration-metric-name - "store_build") + (datastore-call-with-transaction + datastore + (build-perform-datastore-changes + (if ensure-all-related-derivation-outputs-have-builds? + ;; Do this here so it doesn't take time in the writer + ;; thread + (datastore-list-related-derivations-with-no-build-for-outputs + datastore + derivation-file) + '())) + #:duration-metric-name + "store_build") (build-coordinator-prompt-hook-processing-for-event build-coordinator |