aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-04-13 15:44:20 +0100
committerChristopher Baines <mail@cbaines.net>2020-04-13 15:44:20 +0100
commit4c75d59e4c8eb05907f67c154cde5375ebf8dcf5 (patch)
tree41c54064ef604ffc11b9457e779b61e4ce0a1db1 /guix-build-coordinator
parentcc2d1ddf2444e33196443eba3df7961b6dd5917e (diff)
downloadbuild-coordinator-4c75d59e4c8eb05907f67c154cde5375ebf8dcf5.tar
build-coordinator-4c75d59e4c8eb05907f67c154cde5375ebf8dcf5.tar.gz
Add datastore-store-build-result
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)