diff --git a/guix-data-service/web/server.scm b/guix-data-service/web/server.scm index 4db9839..a6a71ca 100644 --- a/guix-data-service/web/server.scm +++ b/guix-data-service/web/server.scm @@ -248,37 +248,50 @@ port. Also, the port used can be changed by passing the --port option.\n" (while (not (check-startup-completed startup-completed)) (sleep 1)) - (call-with-resource-from-pool (background-connection-pool) - (lambda (conn) - (let ((build-ids - (select-background-processing-build-ids conn))) - (unless (null? build-ids) - (simple-format #t "processing ~A builds from the background queue\n" - (length build-ids))) - (for-each - (lambda (build-id) - (let ((status (select-latest-build-status-by-build-id - conn - build-id))) - (cond - ((string=? status "succeeded") - (handle-removing-blocking-build-entries-for-successful-builds - conn - (list build-id))) - ((string=? status "scheduled") - (handle-blocked-builds-entries-for-scheduled-builds - conn - (list build-id))) - ((member status '("failed" - "failed-dependency" - "canceled")) - (handle-populating-blocked-builds-for-build-failures - conn - (list build-id))))) - (delete-background-processing-entries-for-build-ids - conn - build-id)) - build-ids))))) + (with-exception-handler + (lambda _ #f) + (lambda () + (with-exception-handler + (lambda (exn) + (simple-format + #t + "exception when processing the background jobs queue") + (print-backtrace-and-exception/knots + exn) + (raise-exception exn)) + (lambda () + (call-with-resource-from-pool (background-connection-pool) + (lambda (conn) + (let ((build-ids + (select-background-processing-build-ids conn))) + (unless (null? build-ids) + (simple-format #t "processing ~A builds from the background queue\n" + (length build-ids))) + (for-each + (lambda (build-id) + (let ((status (select-latest-build-status-by-build-id + conn + build-id))) + (cond + ((string=? status "succeeded") + (handle-removing-blocking-build-entries-for-successful-builds + conn + (list build-id))) + ((string=? status "scheduled") + (handle-blocked-builds-entries-for-scheduled-builds + conn + (list build-id))) + ((member status '("failed" + "failed-dependency" + "canceled")) + (handle-populating-blocked-builds-for-build-failures + conn + (list build-id))))) + (delete-background-processing-entries-for-build-ids + conn + build-id)) + build-ids))))))) + #:unwind? #t)) #:parallel? #t) (spawn-fiber