aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/jobs.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/jobs.scm')
-rw-r--r--guix-data-service/jobs.scm59
1 files changed, 46 insertions, 13 deletions
diff --git a/guix-data-service/jobs.scm b/guix-data-service/jobs.scm
index 7d62be3..3ea1ebf 100644
--- a/guix-data-service/jobs.scm
+++ b/guix-data-service/jobs.scm
@@ -30,6 +30,8 @@
count-log-parts
combine-log-parts!
+ guix-revision-id-for-job
+
process-jobs
default-max-processes))
@@ -124,13 +126,33 @@ guix-data-service: error: missing log line: ~A
(with-time-logging "vacuuming log parts"
(vacuum-log-parts-table conn)))
+(define (guix-revision-id-for-job conn job-id)
+ (match (exec-query
+ conn
+ "
+SELECT guix_revisions.id
+FROM guix_revisions
+INNER JOIN load_new_guix_revision_jobs
+ ON guix_revisions.git_repository_id = load_new_guix_revision_jobs.git_repository_id
+ AND guix_revisions.commit = load_new_guix_revision_jobs.commit
+WHERE load_new_guix_revision_jobs.id = $1"
+ (list (simple-format #f "~A" job-id)))
+ (((id)) id)))
+
(define* (process-jobs conn #:key max-processes
latest-branch-revision-max-processes
skip-system-tests?
- per-job-parallelism)
+ extra-inferior-environment-variables
+ per-job-parallelism
+ ignore-systems
+ ignore-targets
+ (free-space-requirement
+ ;; 2G
+ (* 2 (expt 2 30)))
+ timeout)
(define (fetch-new-jobs)
(let ((free-space (free-disk-space "/gnu/store")))
- (if (< free-space (* 2 (expt 2 30))) ; 2G
+ (if (< free-space free-space-requirement)
(begin
(simple-format
(current-error-port)
@@ -148,9 +170,22 @@ guix-data-service: error: missing log line: ~A
,@(if skip-system-tests?
'("--skip-system-tests")
'())
+ ,@(map (match-lambda
+ ((key . val)
+ (simple-format #f "--inferior-set-environment-variable=~A=~A"
+ key val)))
+ extra-inferior-environment-variables)
,@(if per-job-parallelism
(list (simple-format #f "--parallelism=~A" per-job-parallelism))
- '()))
+ '())
+ ,@(if (null? ignore-systems)
+ '()
+ (list (simple-format #f "--ignore-systems=~A"
+ (string-join ignore-systems ","))))
+ ,@(if (null? ignore-targets)
+ '()
+ (list (simple-format #f "--ignore-targets=~A"
+ (string-join ignore-targets ",")))))
#:output log-port
#:error log-port)))
@@ -171,7 +206,8 @@ guix-data-service: error: missing log line: ~A
handle-job-failure
#:max-processes max-processes
#:priority-max-processes
- latest-branch-revision-max-processes))
+ latest-branch-revision-max-processes
+ #:timeout timeout))
(define* (log-for-job conn job-id
@@ -279,10 +315,6 @@ WHERE job_id = $1")
4))
1))
-(define default-timeout
- (* (* 60 60) ;; 1 hour in seconds
- 72))
-
(define* (process-jobs-concurrently
fetch-new-jobs
process-job
@@ -291,7 +323,7 @@ WHERE job_id = $1")
#:key
(max-processes default-max-processes)
(priority-max-processes (* 2 max-processes))
- (timeout default-timeout))
+ timeout)
(define processes
(make-hash-table))
@@ -302,9 +334,9 @@ WHERE job_id = $1")
"\n\n"
(let ((running-jobs (hash-count (const #t) processes)))
(cond
- ((eq? running-jobs 0)
+ ((= running-jobs 0)
"status: 0 running jobs")
- ((eq? running-jobs 1)
+ ((= running-jobs 1)
"status: 1 running job")
(else
(simple-format #f "status: ~A running jobs"
@@ -331,7 +363,7 @@ WHERE job_id = $1")
(match (hash-ref processes pid)
((_ (id))
(post-job id)
- (unless (eq? status 0)
+ (unless (= status 0)
(simple-format (current-error-port)
"pid ~A (job: ~A) failed with status ~A\n"
pid id status)
@@ -391,7 +423,8 @@ WHERE job_id = $1")
(atomic-box-set! exit? #t)))
(while #t
- (kill-long-running-processes)
+ (when timeout
+ (kill-long-running-processes))
(wait-on-processes)
(display-status)