aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/datastore.scm1
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm51
2 files changed, 52 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore.scm b/guix-build-coordinator/datastore.scm
index 10131e7..8360970 100644
--- a/guix-build-coordinator/datastore.scm
+++ b/guix-build-coordinator/datastore.scm
@@ -10,6 +10,7 @@
datastore-new-agent
datastore-list-agents
datastore-find-agent
+ datastore-store-build-result
datastore-new-agent-password
datastore-agent-password-exists?
datastore-find-build
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index c0c964d..1af74dd 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -13,6 +13,7 @@
datastore-store-derivation
datastore-store-build
datastore-find-build
+ datastore-store-build-result
datastore-new-agent
datastore-list-agents
datastore-find-agent
@@ -172,6 +173,56 @@ WHERE agent_id = :agent_id AND password = :password")))
(sqlite-exec db "COMMIT TRANSACTION;")))
#t)
+(define-method (datastore-store-build-result
+ (datastore <sqlite-datastore>)
+ build-id
+ agent-id
+ result
+ failure-reason)
+ (define (insert-build-result db build-id agent-id result failure-reason)
+ (sqlite-exec
+ db
+ (string-append
+ "
+INSERT INTO build_results (
+ build_id, agent_id, result, failure_reason
+) VALUES ('"
+ build-id "', '"
+ agent-id "', '"
+ result "', "
+ (if failure-reason
+ (string-append "'" failure-reason "'")
+ "NULL")
+ ")")))
+
+ (define (remove-build-allocation db build-id agent-id)
+ (sqlite-exec
+ db
+ (string-append
+ "
+DELETE FROM allocated_builds WHERE build_id = '"
+ build-id
+ "' AND agent_id = '"
+ agent-id
+ "'")))
+
+ (define (mark-build-as-processed db build-id)
+ (sqlite-exec
+ db
+ (string-append
+ "
+UPDATE builds SET processed = 1 WHERE uuid = '" build-id "'")))
+
+ (call-with-worker-thread
+ (slot-ref datastore 'worker-thread-channel)
+ (lambda (db)
+ (sqlite-exec db "BEGIN TRANSACTION;")
+ (insert-build-result db build-id agent-id result failure-reason)
+ (remove-build-allocation db build-id agent-id)
+ (mark-build-as-processed db build-id)
+ (sqlite-exec db "COMMIT TRANSACTION;")))
+ #t)
+
(define-method (datastore-find-build
(datastore <sqlite-datastore>)
uuid)