Allow customising the maximum number of processes

This commit is contained in:
Christopher Baines 2019-12-16 19:57:56 +00:00
parent 96f897cf3b
commit c229ace8a5
2 changed files with 39 additions and 8 deletions

View file

@ -2,9 +2,11 @@
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 format) #:use-module (ice-9 format)
#:use-module (guix-data-service jobs load-new-guix-revision) #:use-module (guix-data-service jobs load-new-guix-revision)
#:export (process-jobs)) #:export (process-jobs
(define (process-jobs conn) default-max-processes))
(define* (process-jobs conn #:key max-processes)
(define (fetch-new-jobs) (define (fetch-new-jobs)
(fetch-unlocked-jobs conn)) (fetch-unlocked-jobs conn))
@ -23,7 +25,8 @@
(process-jobs-concurrently fetch-new-jobs (process-jobs-concurrently fetch-new-jobs
process-job process-job
handle-job-failure)) handle-job-failure
#:max-processes max-processes))
(define default-max-processes (define default-max-processes
(max (round (/ (current-processor-count) (max (round (/ (current-processor-count)

View file

@ -30,8 +30,36 @@
(setvbuf (current-output-port) 'line) (setvbuf (current-output-port) 'line)
(setvbuf (current-error-port) 'line) (setvbuf (current-error-port) 'line)
(with-postgresql-connection (define %options
"process-jobs" ;; Specifications of the command-line options
(lambda (conn) (list (option '("max-processes") #t #f
(simple-format #t "Ready to process jobs...\n") (lambda (opt name arg result)
(process-jobs conn))) (alist-cons 'max-processes
(string->number arg)
result)))))
(define %default-options
;; Alist of default option values
`((max-processes ,default-max-processes)))
(define (parse-options args)
(args-fold
args %options
(lambda (opt name arg result)
(error "unrecognized option" name))
(lambda (arg result)
(alist-cons
'revision-commits
(cons arg
(or (assoc-ref result 'revision-commits)
'()))
(alist-delete 'revision-commits result)))
%default-options))
(let ((opts (parse-options (cdr (program-arguments)))))
(with-postgresql-connection
"process-jobs"
(lambda (conn)
(simple-format #t "Ready to process jobs...\n")
(process-jobs conn
#:max-processes (assq-ref opts 'max-processes)))))