aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix-build-coordinator/datastore.scm1
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm55
-rw-r--r--sqitch/pg/deploy/derivation_outputs_derivation_name_index.sql7
-rw-r--r--sqitch/pg/revert/derivation_outputs_derivation_name_index.sql7
-rw-r--r--sqitch/pg/verify/derivation_outputs_derivation_name_index.sql7
-rw-r--r--sqitch/sqitch.plan1
-rw-r--r--sqitch/sqlite/deploy/derivation_outputs_derivation_name_index.sql7
-rw-r--r--sqitch/sqlite/revert/derivation_outputs_derivation_name_index.sql7
-rw-r--r--sqitch/sqlite/verify/derivation_outputs_derivation_name_index.sql7
9 files changed, 99 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm
index d1c08bf..0267f28 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -34,6 +34,7 @@
(re-export datastore-list-processed-builds)
(re-export datastore-list-unprocessed-builds)
(re-export datastore-fetch-input-builds-for-unprocessed-builds)
+(re-export datastore-fetch-unprocessed-builds-with-propagated-priorities)
(re-export datastore-list-unprocessed-hook-events)
(re-export datastore-delete-unprocessed-hook-event)
(re-export datastore-list-agent-builds)
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index e418500..bbf967f 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -40,6 +40,7 @@
datastore-list-processed-builds
datastore-list-unprocessed-builds
datastore-fetch-input-builds-for-unprocessed-builds
+ datastore-fetch-unprocessed-builds-with-propagated-priorities
datastore-list-unprocessed-hook-events
datastore-delete-unprocessed-hook-event
datastore-list-agent-builds
@@ -942,6 +943,60 @@ WHERE builds.processed = 0")))
result)))))
+(define-method (datastore-fetch-unprocessed-builds-with-propagated-priorities
+ (datastore <sqlite-datastore>))
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+WITH RECURSIVE builds_with_derived_priority(
+ uuid, derivation_name, derived_priority
+ ) AS (
+ -- Start with builds for derivations where outputs from that derivation
+ -- aren't used by other derivations
+ SELECT builds.uuid, builds.derivation_name, builds.priority
+ FROM builds
+ WHERE
+ builds.processed = 0 AND
+ NOT EXISTS (
+ SELECT 1
+ FROM derivation_inputs
+ INNER JOIN derivation_outputs
+ ON derivation_inputs.derivation_output_id = derivation_outputs.id
+ WHERE derivation_outputs.derivation_name = builds.derivation_name
+ )
+UNION
+ SELECT builds.uuid, builds.derivation_name,
+ max(builds.priority, builds_with_derived_priority.derived_priority)
+ FROM builds_with_derived_priority
+ INNER JOIN derivation_inputs
+ ON builds_with_derived_priority.derivation_name =
+ derivation_inputs.derivation_name
+ INNER JOIN derivation_outputs
+ ON derivation_inputs.derivation_output_id = derivation_outputs.id
+ INNER JOIN builds
+ ON builds.derivation_name = derivation_outputs.derivation_name
+ WHERE builds.processed = 0
+)
+SELECT uuid, derived_priority
+FROM builds_with_derived_priority"
+ #:cache? #t)))
+
+ (let ((result (sqlite-fold
+ (lambda (row result)
+ (match row
+ (#(uuid derived-priority)
+ (hash-set! result uuid derived-priority)))
+ result)
+ (make-hash-table 10000)
+ statement)))
+ (sqlite-reset statement)
+
+ result)))))
+
(define (insert-unprocessed-hook-event
db
event
diff --git a/sqitch/pg/deploy/derivation_outputs_derivation_name_index.sql b/sqitch/pg/deploy/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..65ee9b0
--- /dev/null
+++ b/sqitch/pg/deploy/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Deploy guix-build-coordinator:derivation_outputs_derivation_name_index to pg
+
+BEGIN;
+
+-- XXX Add DDLs here.
+
+COMMIT;
diff --git a/sqitch/pg/revert/derivation_outputs_derivation_name_index.sql b/sqitch/pg/revert/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..2dfadfd
--- /dev/null
+++ b/sqitch/pg/revert/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Revert guix-build-coordinator:derivation_outputs_derivation_name_index from pg
+
+BEGIN;
+
+-- XXX Add DDLs here.
+
+COMMIT;
diff --git a/sqitch/pg/verify/derivation_outputs_derivation_name_index.sql b/sqitch/pg/verify/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..c1b5a6a
--- /dev/null
+++ b/sqitch/pg/verify/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Verify guix-build-coordinator:derivation_outputs_derivation_name_index on pg
+
+BEGIN;
+
+-- XXX Add verifications here.
+
+ROLLBACK;
diff --git a/sqitch/sqitch.plan b/sqitch/sqitch.plan
index a062e08..509802d 100644
--- a/sqitch/sqitch.plan
+++ b/sqitch/sqitch.plan
@@ -12,3 +12,4 @@ output_metadata 2020-04-23T14:26:15Z Christopher Baines <mail@cbaines.net> # Cre
derivation_outputs_output_index 2020-04-28T17:49:19Z Christopher Baines <mail@cbaines.net> # Add an index on derivation_outputs.output
allocator_related_indexes 2020-04-29T16:59:14Z Christopher Baines <mail@cbaines.net> # Add a few indexes that should speed up build allocation
unprocessed_hook_events 2020-05-08T12:55:28Z Christopher Baines <mail@cbaines.net> # Add a new table unprocessed_hook_events
+derivation_outputs_derivation_name_index 2020-05-10T16:24:05Z Christopher Baines <mail@cbaines.net> # Add an index on derivation_outputs.derivation_name
diff --git a/sqitch/sqlite/deploy/derivation_outputs_derivation_name_index.sql b/sqitch/sqlite/deploy/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..b564ef6
--- /dev/null
+++ b/sqitch/sqlite/deploy/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Deploy guix-build-coordinator:derivation_outputs_derivation_name_index to sqlite
+
+BEGIN;
+
+CREATE INDEX derivation_outputs_derivation_name_idx ON derivation_outputs (derivation_name);
+
+COMMIT;
diff --git a/sqitch/sqlite/revert/derivation_outputs_derivation_name_index.sql b/sqitch/sqlite/revert/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..d915d2d
--- /dev/null
+++ b/sqitch/sqlite/revert/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Revert guix-build-coordinator:derivation_outputs_derivation_name_index from sqlite
+
+BEGIN;
+
+-- XXX Add DDLs here.
+
+COMMIT;
diff --git a/sqitch/sqlite/verify/derivation_outputs_derivation_name_index.sql b/sqitch/sqlite/verify/derivation_outputs_derivation_name_index.sql
new file mode 100644
index 0000000..5871242
--- /dev/null
+++ b/sqitch/sqlite/verify/derivation_outputs_derivation_name_index.sql
@@ -0,0 +1,7 @@
+-- Verify guix-build-coordinator:derivation_outputs_derivation_name_index on sqlite
+
+BEGIN;
+
+-- XXX Add verifications here.
+
+ROLLBACK;