aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2024-02-08 13:35:35 +0000
committerChristopher Baines <mail@cbaines.net>2024-02-08 13:35:35 +0000
commit6e1da5700fc43b1e4f98bca2ed8518839cdb2173 (patch)
tree89fffabc9d10ed1272f3033fac464ff11a6dd201 /guix-build-coordinator/datastore
parentd9fa7947c25d0624c568f744ad2a2683a43e5644 (diff)
downloadbuild-coordinator-6e1da5700fc43b1e4f98bca2ed8518839cdb2173.tar
build-coordinator-6e1da5700fc43b1e4f98bca2ed8518839cdb2173.tar.gz
Expose information about setup failures
Diffstat (limited to 'guix-build-coordinator/datastore')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm71
1 files changed, 43 insertions, 28 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index e5ae519..5e39849 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -2893,14 +2893,19 @@ WHERE build_id = :build_id"
result)))))
(define-method (datastore-fetch-setup-failures
- (datastore <sqlite-datastore>))
- (call-with-worker-thread
- (slot-ref datastore 'worker-reader-thread-channel)
- (lambda (db)
- (let ((statement
- (sqlite-prepare
- db
- "
+ (datastore <sqlite-datastore>)
+ .
+ args)
+ (apply
+ (lambda* (#:key agent-id)
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-reader-thread-channel)
+ (lambda (db)
+ (let ((statement
+ (sqlite-prepare
+ db
+ (string-append
+ "
SELECT setup_failures.id, builds.uuid, agent_id, failure_reason
FROM setup_failures
INNER JOIN builds
@@ -2910,28 +2915,38 @@ WHERE builds.processed = 0
AND builds.id NOT IN (
SELECT build_id FROM allocated_builds
)"
- #:cache? #t)))
+ (if agent-id
+ "
+ AND agent_id = :agent_id"
+ ""))
+ #:cache? #t)))
- (let ((result (sqlite-fold
- (lambda (row result)
- (match row
- (#(id build-id agent-id failure-reason)
- (let ((failures-for-build-id
- (or (hash-ref result build-id)
- '())))
- (hash-set!
- result
- build-id
- (cons `((id . ,id)
- (agent-id . ,agent-id)
- (failure-reason . ,failure-reason))
- failures-for-build-id)))))
- result)
- (make-hash-table)
- statement)))
- (sqlite-reset statement)
+ (when agent-id
+ (sqlite-bind-arguments
+ statement
+ #:agent_id agent-id))
+
+ (let ((result (sqlite-fold
+ (lambda (row result)
+ (match row
+ (#(id build-id agent-id failure-reason)
+ (let ((failures-for-build-id
+ (or (hash-ref result build-id)
+ '())))
+ (hash-set!
+ result
+ build-id
+ (cons `((id . ,id)
+ (agent-id . ,agent-id)
+ (failure-reason . ,failure-reason))
+ failures-for-build-id)))))
+ result)
+ (make-hash-table)
+ statement)))
+ (sqlite-reset statement)
- result)))))
+ result)))))
+ args))
(define-method (datastore-list-processed-builds
(datastore <sqlite-datastore>))