aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-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>))