diff options
author | Christopher Baines <mail@cbaines.net> | 2022-10-11 10:58:52 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2022-10-11 10:58:52 +0100 |
commit | 2cd06f2cf8a20f719aa3823eeffac8c39b768504 (patch) | |
tree | 4d3279047837e6eefefc517a9b9b250595b8a506 /guix-build-coordinator/datastore/sqlite.scm | |
parent | 05529c1757d0d5e2a81040b86b4a825c7d88fd9c (diff) | |
download | build-coordinator-2cd06f2cf8a20f719aa3823eeffac8c39b768504.tar build-coordinator-2cd06f2cf8a20f719aa3823eeffac8c39b768504.tar.gz |
Guard against canceling builds required by others
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index ba44d75..11947e3 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -26,6 +26,7 @@ datastore-call-with-transaction datastore-store-derivation datastore-build-exists-for-derivation-outputs? + datastore-build-required-by-another? datastore-list-related-derivations-with-no-build-for-outputs datastore-list-failed-builds-with-blocking-count datastore-list-builds-for-derivation-recursive-inputs @@ -826,6 +827,46 @@ WHERE derivation_outputs.derivation_id = :derivation_id #t #f)))))) +(define-method (datastore-build-required-by-another? + (datastore <sqlite-datastore>) + uuid) + (call-with-worker-thread + (slot-ref datastore 'worker-reader-thread-channel) + (lambda (db) + (let ((statement + (sqlite-prepare + db + " +SELECT 1 +FROM builds +INNER JOIN derivation_outputs + ON builds.derivation_id = derivation_outputs.derivation_id +INNER JOIN outputs ON derivation_outputs.output_id = outputs.id +INNER JOIN derivation_outputs AS all_derivation_outputs + ON outputs.id = all_derivation_outputs.output_id +INNER JOIN derivation_inputs + ON derivation_inputs.derivation_output_id = all_derivation_outputs.id +INNER JOIN derivations AS dependent_derivations + ON dependent_derivations.id = derivation_inputs.derivation_id +INNER JOIN builds AS dependent_builds + ON dependent_builds.derivation_id = dependent_derivations.id + AND dependent_builds.processed = 0 + AND dependent_builds.canceled = 0 +WHERE builds.uuid = :uuid +" + #:cache? #t))) + + (sqlite-bind-arguments + statement + #:uuid uuid) + + (let ((result (sqlite-step statement))) + (sqlite-reset statement) + + (if result + #t + #f)))))) + (define-method (datastore-list-related-derivations-with-no-build-for-outputs (datastore <sqlite-datastore>) derivation) |