cbaines pushed a commit to branch master
in repository data-service.
commit 37b7c568ed53aa6e49ae5bbd6a8b5a7b5ad1a1d5
Author: Christopher Baines <[email protected]>
AuthorDate: Mon Feb 10 10:53:24 2025 +0000
Make the job timeout configurable
---
guix-data-service/jobs.scm | 16 ++++++++--------
scripts/guix-data-service-process-jobs.in | 14 ++++++++++++--
2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/guix-data-service/jobs.scm b/guix-data-service/jobs.scm
index 3eb8403..b045133 100644
--- a/guix-data-service/jobs.scm
+++ b/guix-data-service/jobs.scm
@@ -147,7 +147,9 @@ WHERE load_new_guix_revision_jobs.id = $1"
ignore-systems
ignore-targets
(free-space-requirement
- (* 2 (expt 2 30)))) ; 2G
+ ;; 2G
+ (* 2 (expt 2 30)))
+ timeout)
(define (fetch-new-jobs)
(let ((free-space (free-disk-space "/gnu/store")))
(if (< free-space free-space-requirement)
@@ -204,7 +206,8 @@ WHERE load_new_guix_revision_jobs.id = $1"
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
@@ -312,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
@@ -324,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))
@@ -424,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)
diff --git a/scripts/guix-data-service-process-jobs.in
b/scripts/guix-data-service-process-jobs.in
index 64f9ad2..dc666be 100644
--- a/scripts/guix-data-service-process-jobs.in
+++ b/scripts/guix-data-service-process-jobs.in
@@ -70,14 +70,22 @@
(lambda (opt name arg result)
(alist-cons 'ignore-targets
(string-split arg #\,)
+ result)))
+ (option '("timeout") #t #f
+ (lambda (opt name arg result)
+ (alist-cons 'timeout
+ (string->number arg)
result)))))
+
(define %default-options
;; Alist of default option values
`((max-processes . ,default-max-processes)
(per-job-parallelism . 1)
(ignore-systems . ())
- (ignore-targets . ())))
+ (ignore-targets . ())
+ (timeout . ,(* (* 60 60) ;; 1 hour in seconds
+ 72))))
(define (parse-options args)
(args-fold
@@ -130,7 +138,9 @@
#:ignore-systems (assq-ref opts 'ignore-systems)
#:ignore-targets (assq-ref opts 'ignore-targets)
#:free-space-requirement
- (assq-ref opts 'free-space-requirement)))
+ (assq-ref opts 'free-space-requirement)
+ #:timeout
+ (assq-ref opts 'timeout)))
(lambda _
(backtrace))))
#:unwind? #t))))