diff options
Diffstat (limited to 'guix-build-coordinator/datastore')
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index 0fedd63..e50f3d9 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -620,14 +620,16 @@ WHERE related_derivations.name != :derivation result))))) (define-method (datastore-list-failed-builds-with-blocking-count - (datastore <sqlite-datastore>)) + (datastore <sqlite-datastore>) + system) (call-with-worker-thread (slot-ref datastore 'worker-reader-thread-channel) (lambda (db) (let ((statement (sqlite-prepare db - " + (string-append + " SELECT builds.uuid, builds.derivation_name, @@ -648,11 +650,21 @@ SELECT ON related_derivations.name = blocked_builds.derivation_name AND blocked_builds.processed = 0 ) -FROM builds +FROM builds" + (if system + " +INNER JOIN derivations ON derivations.name = builds.derivation_name" + "") + " INNER JOIN build_results ON builds.uuid = build_results.build_id WHERE builds.processed = 1 - AND build_results.result = 'failure' + AND build_results.result = 'failure'" + (if system + " + AND derivations.system = :system" + "") + " AND NOT EXISTS ( SELECT 1 FROM derivation_outputs @@ -664,9 +676,13 @@ WHERE builds.processed = 1 ON other_builds.uuid = other_build_results.build_id WHERE derivation_outputs.derivation_name = builds.derivation_name AND other_build_results.result = 'success' -) ORDER BY 3 DESC, 2, 1" +) ORDER BY 3 DESC, 2, 1") #:cache? #t))) + (when system + (sqlite-bind-arguments statement + #:system system)) + (let ((result (sqlite-map (match-lambda (#(uuid derivation-name blocked-count) |