aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm25
1 files changed, 19 insertions, 6 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm
index 5e39849..96751a5 100644
--- a/guix-build-coordinator/datastore/sqlite.scm
+++ b/guix-build-coordinator/datastore/sqlite.scm
@@ -123,7 +123,11 @@
(string-length "sqlite://")))
(when update-database?
- (run-sqitch database-file))
+ (retry-on-error
+ (lambda ()
+ (run-sqitch database-file))
+ #:times 2
+ #:delay 5))
(let ((db (db-open database-file)))
(sqlite-exec db "PRAGMA journal_mode=WAL;")
@@ -354,6 +358,14 @@ PRAGMA optimize;")
(define-method (datastore-spawn-fibers
(datastore <sqlite-datastore>))
+ ;; Queue messages to the writer thread, so that they're handled in a first
+ ;; come first served manor
+ (slot-set!
+ datastore
+ 'worker-writer-thread-channel
+ (make-queueing-channel
+ (slot-ref datastore 'worker-writer-thread-channel)))
+
(spawn-fiber
(lambda ()
(while #t
@@ -3704,11 +3716,12 @@ WHERE build_results.build_id = :build_id"
(simple-format #t "running command: ~A\n"
(string-join command))
- (unless (zero? (apply system* command))
- (simple-format
- (current-error-port)
- "error: sqitch command failed\n")
- (exit 1))))
+ (let ((pid (spawn (%config 'sqitch) command)))
+ (unless (zero? (cdr (waitpid pid)))
+ (simple-format
+ (current-error-port)
+ "error: sqitch command failed\n")
+ (exit 1)))))
(define (changes-count db)
(let ((statement