guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/05: Make the build event handling code more generic


From: Christopher Baines
Subject: 01/05: Make the build event handling code more generic
Date: Fri, 9 Jun 2023 11:37:33 -0400 (EDT)

cbaines pushed a commit to branch master
in repository data-service.

commit 7524d23b44b7aa3db42b9d5344eefa6440467189
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Tue Jun 6 12:32:53 2023 +0100

    Make the build event handling code more generic
    
    So that triggering a check for substitutes can be integrated in.
---
 guix-data-service/web/build-server/controller.scm | 84 +++++++++++++----------
 1 file changed, 48 insertions(+), 36 deletions(-)

diff --git a/guix-data-service/web/build-server/controller.scm 
b/guix-data-service/web/build-server/controller.scm
index bbc4a93..babf59d 100644
--- a/guix-data-service/web/build-server/controller.scm
+++ b/guix-data-service/web/build-server/controller.scm
@@ -120,10 +120,32 @@
   (define build-server-id
     (string->number build-server-id-string))
 
-  (define (spawn-fiber-for-build-handler handler
-                                         statuses
-                                         data
-                                         build-ids)
+  (define (call-via-thread-pool-channel handler)
+    (spawn-fiber
+     (lambda ()
+       (parallel-via-thread-pool-channel
+        (with-postgresql-connection
+         "build-event-handler-conn"
+         (lambda (conn)
+           (with-exception-handler
+               (lambda (exn)
+                 (simple-format
+                  (current-error-port)
+                  "exception in build event handler: ~A\n"
+                  exn))
+             (lambda ()
+               (with-throw-handler #t
+                 (lambda ()
+                   (handler conn))
+                 (lambda _
+                   (display (backtrace) (current-error-port))
+                   (display "\n" (current-error-port)))))
+             #:unwind? #t)))))))
+
+  (define (with-build-ids-for-status data
+                                     build-ids
+                                     statuses
+                                     handler)
     (let ((ids
            (delete-duplicates
             (filter-map
@@ -138,26 +160,7 @@
              data)
             =)))
       (unless (null? ids)
-        (spawn-fiber
-         (lambda ()
-           (parallel-via-thread-pool-channel
-            (with-postgresql-connection
-             "build-event-handler-conn"
-             (lambda (conn)
-               (with-exception-handler
-                   (lambda (exn)
-                     (simple-format
-                      (current-error-port)
-                      "exception in build event handler: ~A\n"
-                      exn))
-                 (lambda ()
-                   (with-throw-handler #t
-                     (lambda ()
-                       (handler conn ids))
-                     (lambda _
-                       (display (backtrace) (current-error-port))
-                       (display "\n" (current-error-port)))))
-                 #:unwind? #t)))))))))
+        (handler ids))))
 
   (define (handle-derivation-events conn items)
     (if (null? items)
@@ -223,23 +226,32 @@
                       conn
                       filtered-items)))))))
 
-      (spawn-fiber-for-build-handler
-       handle-removing-blocking-build-entries-for-successful-builds
-       '("succeeded")
+      (with-build-ids-for-status
        items
-       build-ids)
+       build-ids
+       '("succeeded")
+       (lambda (ids)
+         (call-via-thread-pool-channel
+          (lambda (conn)
+            (handle-removing-blocking-build-entries-for-successful-builds conn 
ids)))))
 
-      (spawn-fiber-for-build-handler
-       handle-blocked-builds-entries-for-scheduled-builds
-       '("scheduled")
+      (with-build-ids-for-status
        items
-       build-ids)
+       build-ids
+       '("scheduled")
+       (lambda (ids)
+         (call-via-thread-pool-channel
+          (lambda (conn)
+            (handle-blocked-builds-entries-for-scheduled-builds conn ids)))))
 
-      (spawn-fiber-for-build-handler
-       handle-populating-blocked-builds-for-build-failures
-       '("failed" "failed-dependency" "canceled")
+      (with-build-ids-for-status
        items
-       build-ids)))
+       build-ids
+       '("failed" "failed-dependency" "canceled")
+       (lambda (ids)
+         (call-via-thread-pool-channel
+          (lambda (conn)
+            (handle-populating-blocked-builds-for-build-failures conn 
ids)))))))
 
   (if (any-invalid-query-parameters? parsed-query-parameters)
       (render-json



reply via email to

[Prev in Thread] Current Thread [Next in Thread]