diff options
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/datastore.scm | 1 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 51 |
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) |