From 6e1da5700fc43b1e4f98bca2ed8518839cdb2173 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 8 Feb 2024 13:35:35 +0000 Subject: Expose information about setup failures --- guix-build-coordinator/datastore/sqlite.scm | 71 +++++++++++++++++------------ 1 file changed, 43 insertions(+), 28 deletions(-) (limited to 'guix-build-coordinator/datastore') 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 )) - (call-with-worker-thread - (slot-ref datastore 'worker-reader-thread-channel) - (lambda (db) - (let ((statement - (sqlite-prepare - db - " + (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 )) -- cgit v1.2.3