Make the build event handling code more generic

So that triggering a check for substitutes can be integrated in.
This commit is contained in:
Christopher Baines 2023-06-06 12:32:53 +01:00
parent 68850065d7
commit 7524d23b44

View file

@ -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
(with-build-ids-for-status
items
build-ids
'("succeeded")
items
build-ids)
(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
(with-build-ids-for-status
items
build-ids
'("scheduled")
items
build-ids)
(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