From 70da6b51848f4483958fcaa5b586e10f676c08aa Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 29 Apr 2020 18:03:36 +0100 Subject: Use a hash-table for setup failures, rather than an alist This will probably perform better when there are lots of step failures. --- guix-build-coordinator/build-allocator.scm | 4 ++-- guix-build-coordinator/datastore/sqlite.scm | 11 ++++++----- 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) -- cgit v1.2.3