aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-06-01 18:48:58 +0100
committerChristopher Baines <mail@cbaines.net>2020-06-01 18:48:58 +0100
commit16484c86f3b13024edc4833487961539b6058dd9 (patch)
tree55cda0a4bd251f49256cbbae8d5087c98de6e94a /guix-build-coordinator
parent2ac09243135c85d54e2ae2740d5c1aabe5c1ef06 (diff)
downloadbuild-coordinator-16484c86f3b13024edc4833487961539b6058dd9.tar
build-coordinator-16484c86f3b13024edc4833487961539b6058dd9.tar.gz
Fix the builds with blocking counts
Don't just count the builds for directly related derivations, but indirectly related ones as well.
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm22
1 files changed, 13 insertions, 9 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index c0798e9..2b39c51 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -305,17 +305,21 @@ SELECT
builds.uuid,
builds.derivation_name,
(
+ WITH RECURSIVE related_derivations(name) AS (
+ VALUES(builds.derivation_name)
+ UNION
+ SELECT derivation_inputs.derivation_name
+ FROM derivation_outputs
+ INNER JOIN related_derivations
+ ON derivation_outputs.derivation_name = related_derivations.name
+ INNER JOIN derivation_inputs
+ ON derivation_outputs.id = derivation_inputs.derivation_output_id
+ )
SELECT COUNT(DISTINCT blocked_builds.uuid)
- FROM derivation_outputs
- INNER JOIN derivation_outputs AS matching_derivation_outputs
- ON derivation_outputs.output = matching_derivation_outputs.output
- INNER JOIN derivation_inputs
- ON matching_derivation_outputs.id =
- derivation_inputs.derivation_output_id
+ FROM related_derivations
INNER JOIN builds AS blocked_builds
- ON derivation_inputs.derivation_name = blocked_builds.derivation_name
- AND blocked_builds.processed = 0
- WHERE derivation_outputs.derivation_name = builds.derivation_name
+ ON related_derivations.name = blocked_builds.derivation_name
+ AND blocked_builds.processed = 0
)
FROM builds
INNER JOIN build_results