Refactor the logging setup out of process-load-new-guix-revision-job

To simplify both procedures.
This commit is contained in:
Christopher Baines 2020-02-24 18:46:53 +00:00
parent 0c726b9fe7
commit cee9acaa87

View file

@ -1554,6 +1554,37 @@ SKIP LOCKED")
(f store))) (f store)))
(define (setup-logging id thunk)
(let* ((previous-output-port (current-output-port))
(previous-error-port (current-error-port))
(result
(with-postgresql-connection
(simple-format #f "load-new-guix-revision ~A logging" id)
(lambda (logging-conn)
(insert-empty-log-entry logging-conn id)
(let ((logging-port
(log-port id logging-conn
#:delete-existing-log-parts? #t)))
(set-current-output-port logging-port)
(set-current-error-port logging-port)
(let ((result
(parameterize ((current-build-output-port logging-port)
(real-error-port previous-error-port)
(inferior-error-port
(setup-port-for-inferior-error-output
id previous-error-port)))
(thunk))))
(combine-log-parts! logging-conn id)
(drop-log-parts-sequence logging-conn id)
;; This can happen with GC, so do it explicitly
(close-port logging-port)
result))))))
(set-current-output-port previous-output-port)
(set-current-error-port previous-error-port)
result))
(define (process-load-new-guix-revision-job id) (define (process-load-new-guix-revision-job id)
(with-postgresql-connection (with-postgresql-connection
(simple-format #f "load-new-guix-revision ~A" id) (simple-format #f "load-new-guix-revision ~A" id)
@ -1584,23 +1615,9 @@ SKIP LOCKED")
(log-time (log-time
(string-append "loading revision " commit) (string-append "loading revision " commit)
(lambda () (lambda ()
(let* ((previous-output-port (current-output-port)) (setup-logging
(previous-error-port (current-error-port)) id
(result (lambda ()
(with-postgresql-connection
(simple-format #f "load-new-guix-revision ~A logging" id)
(lambda (logging-conn)
(insert-empty-log-entry logging-conn id)
(let ((logging-port
(log-port id logging-conn
#:delete-existing-log-parts? #t)))
(set-current-output-port logging-port)
(set-current-error-port logging-port)
(let ((result
(parameterize ((current-build-output-port logging-port)
(real-error-port previous-error-port)
(inferior-error-port
(setup-port-for-inferior-error-output id previous-error-port)))
(catch #t (catch #t
(lambda () (lambda ()
(with-store-connection (with-store-connection
@ -1614,17 +1631,7 @@ SKIP LOCKED")
(current-error-port) (current-error-port)
"error: load-new-guix-revision: ~A ~A\n" "error: load-new-guix-revision: ~A ~A\n"
key args) key args)
#f))))) #f))))))
(combine-log-parts! logging-conn id)
(drop-log-parts-sequence logging-conn id)
;; This can happen with GC, so do it explicitly
(close-port logging-port)
result))))))
(set-current-output-port previous-output-port)
(set-current-error-port previous-error-port)
result)))
#t)) #t))
(begin (begin
(record-job-succeeded conn id) (record-job-succeeded conn id)