From ab432800d362b61ac1fce99b98c5b2bdccdfd293 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 4 Jul 2020 11:24:57 +0100 Subject: Don't skip inserting builds where the system doesn't match Previously, some builds where skipped for things like fixed output derivations. If a aarch64-linux build already existed, the x86_64-linux build for the same output wouldn't be created. This has delayed some builds, because they're unnecessarily waiting. --- guix-build-coordinator/coordinator.scm | 20 +++++++++++--------- guix-build-coordinator/datastore/sqlite.scm | 5 +++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm index bfbea73..1e54563 100644 --- a/guix-build-coordinator/coordinator.scm +++ b/guix-build-coordinator/coordinator.scm @@ -99,15 +99,17 @@ derivation-file)))) (define (build-for-output-already-exists?) - (any - (lambda (output-details) - (let ((builds-for-output - (datastore-list-builds-for-output - datastore - (assq-ref output-details 'output)))) - - (not (null? builds-for-output)))) - (datastore-find-derivation-outputs datastore derivation-file))) + (let ((system (datastore-find-derivation-system datastore + derivation-file))) + (any + (lambda (output-details) + (let ((builds-for-output + (datastore-list-builds-for-output-and-system + datastore + (assq-ref output-details 'output) + system))) + (not (null? builds-for-output)))) + (datastore-find-derivation-outputs datastore derivation-file)))) (if (and ignore-if-build-for-derivation-exists? (build-for-derivation-exists?)) diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index 801f895..b4c40a6 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -295,6 +295,8 @@ UNION ) SELECT DISTINCT related_derivations.name FROM related_derivations +INNER JOIN derivations + ON related_derivations.name = derivations.name INNER JOIN derivation_outputs ON related_derivations.name = derivation_outputs.derivation_name WHERE related_derivations.name != :derivation @@ -303,6 +305,9 @@ WHERE related_derivations.name != :derivation FROM derivation_outputs INNER JOIN builds ON derivation_outputs.derivation_name = builds.derivation_name + INNER JOIN derivations AS build_derivations + ON builds.derivation_name = build_derivations.name + WHERE build_derivations.system = derivations.system ) "))) -- cgit v1.2.3