aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-04-29 18:03:36 +0100
committerChristopher Baines <mail@cbaines.net>2020-04-29 18:03:36 +0100
commit70da6b51848f4483958fcaa5b586e10f676c08aa (patch)
tree450aad87ea0ccfe7bc74adfa777cbe2e121d9dfa
parent421791cf5250897d69ef0b1c04a47b900cf5ea7e (diff)
downloadbuild-coordinator-70da6b51848f4483958fcaa5b586e10f676c08aa.tar
build-coordinator-70da6b51848f4483958fcaa5b586e10f676c08aa.tar.gz
Use a hash-table for setup failures, rather than an alist
This will probably perform better when there are lots of step failures.
-rw-r--r--guix-build-coordinator/build-allocator.scm4
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm11
2 files changed, 8 insertions, 7 deletions
diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm
index d3030f5..49868a3 100644
--- a/guix-build-coordinator/build-allocator.scm
+++ b/guix-build-coordinator/build-allocator.scm
@@ -37,7 +37,7 @@
(let ((agents (datastore-list-agents datastore))
(builds (datastore-list-unprocessed-builds datastore))
- (setup-failures
+ (setup-failures-hash
(datastore-fetch-setup-failures datastore)))
(define (filter-builds-for-agent agent-id)
@@ -77,7 +77,7 @@
(log "build:" (assq-ref build 'uuid))
(let* ((build-id (assq-ref build 'uuid))
(setup-failures-for-build
- (or (assoc-ref setup-failures build-id)
+ (or (hash-ref setup-failures-hash build-id)
'()))
(relevant-setup-failures
(filter relevant-setup-failure?
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index e4a5aab..c3859de 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -697,16 +697,17 @@ SELECT id, build_id, agent_id, failure_reason FROM setup_failures")))
(match row
(#(id build-id agent-id failure-reason)
(let ((failures-for-build-id
- (or (assoc-ref result build-id)
+ (or (hash-ref result build-id)
'())))
- (alist-cons
+ (hash-set!
+ result
build-id
(cons `((id . ,id)
(agent-id . ,agent-id)
(failure-reason . ,failure-reason))
- failures-for-build-id)
- (alist-delete build-id result))))))
- '()
+ failures-for-build-id)))))
+ result)
+ (make-hash-table)
statement)))
(sqlite-reset statement)