From 71e6fbb9631fcdd7246615f1dc61c9153dbe1f98 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 29 Oct 2020 20:04:03 +0000 Subject: Only consider builds created in the last two weeks For the derivation ordered allocator. This is an quick alternative for having some kind of archival mechanism for builds. It should reduce the time it takes the allocator to run. --- guix-build-coordinator/build-allocator.scm | 9 +++++++-- guix-build-coordinator/datastore/sqlite.scm | 30 +++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) (limited to 'guix-build-coordinator') diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm index 0e65c4d..f4de8b7 100644 --- a/guix-build-coordinator/build-allocator.scm +++ b/guix-build-coordinator/build-allocator.scm @@ -303,6 +303,7 @@ datastore #:key (planned-builds-for-agent-limit 2048) + (builds-created-after "datetime('now', '-14 days')") metrics-registry) (define (log . args) (when #f @@ -346,8 +347,12 @@ datastore (lambda (db) (values - (datastore-fetch-unprocessed-builds-with-propagated-priorities datastore) - (datastore-list-unprocessed-builds-with-built-inputs datastore))) + (datastore-fetch-unprocessed-builds-with-propagated-priorities + datastore + builds-created-after) + (datastore-list-unprocessed-builds-with-built-inputs + datastore + builds-created-after))) #:readonly? #t))) (define systems-for-builds diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index 69a8931..0f3e5df 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -1178,17 +1178,26 @@ ORDER BY priority DESC"))) builds))))) (define-method (datastore-list-unprocessed-builds-with-built-inputs - (datastore )) + (datastore ) + created-after) (call-with-worker-thread (slot-ref datastore 'worker-reader-thread-channel) (lambda (db) (let ((statement (sqlite-prepare db - " + (string-append + " SELECT uuid FROM builds WHERE processed = 0 +" + (if created-after + (simple-format + #f "AND created_at >= ~A\n" + created-after) + "") + " EXCEPT SELECT uuid FROM builds @@ -1210,7 +1219,7 @@ EXCEPT ) EXCEPT SELECT build_id FROM allocated_builds -"))) +")))) (let ((builds (sqlite-map (match-lambda (#(uuid) uuid)) @@ -1220,20 +1229,29 @@ EXCEPT builds))))) (define-method (datastore-fetch-unprocessed-builds-with-propagated-priorities - (datastore )) + (datastore ) + created-after) (call-with-worker-thread (slot-ref datastore 'worker-reader-thread-channel) (lambda (db) (let ((statement (sqlite-prepare db - " + (string-append + " WITH RECURSIVE builds_with_derived_priority( uuid, derivation_name, derived_priority ) AS ( SELECT builds.uuid, builds.derivation_name, builds.priority FROM builds WHERE processed = 0 +" + (if created-after + (simple-format + #f "AND created_at >= ~A\n" + created-after) + "") + " UNION SELECT builds.uuid, builds.derivation_name, max(builds.priority, builds_with_derived_priority.derived_priority) @@ -1253,7 +1271,7 @@ SELECT builds_with_derived_priority.uuid, MAX(derived_priority) FROM builds_with_derived_priority INNER JOIN builds ON builds.uuid = builds_with_derived_priority.uuid WHERE builds.processed = 0 -GROUP BY builds_with_derived_priority.uuid" +GROUP BY builds_with_derived_priority.uuid") #:cache? #t))) (let ((result (sqlite-fold -- cgit v1.2.3