From d8ae6062b1a881f83e9dbfb12774d3548017b574 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 24 May 2025 11:46:27 +0100 Subject: [PATCH] Retry computing channel instance manifests On readlink errors. --- .../jobs/load-new-guix-revision.scm | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm index 10ce0ea..11fc168 100644 --- a/guix-data-service/jobs/load-new-guix-revision.scm +++ b/guix-data-service/jobs/load-new-guix-revision.scm @@ -1570,24 +1570,34 @@ SELECT store_path FROM derivation_source_files WHERE id = $1" (commit ,(channel-commit channel))) ,(channel-instance-commit channel-instance) ,(channel-instance-checkout channel-instance))))) - (simple-format - (current-error-port) - "guix-data-service: computing the derivation-file-name for ~A\n" - system) - (let ((manifest - (catch #t - (lambda () - ((channel-instances->manifest instances #:system system) store)) - (lambda (key . args) - (simple-format - (current-error-port) - "error: while computing manifest entry derivation for ~A\n" - system) - (simple-format - (current-error-port) - "error ~A: ~A\n" key args) - #f)))) + (define (compute) + (simple-format + (current-error-port) + "guix-data-service: computing the derivation-file-name for ~A\n" + system) + + (catch #t + (lambda () + ((channel-instances->manifest instances #:system system) store)) + (lambda (key . args) + (simple-format + (current-error-port) + "error: while computing manifest entry derivation for ~A\n" + system) + (simple-format + (current-error-port) + "error ~A: ~A\n" key args) + + (match (cons key args) + (('system-error "readlink" _ ...) + 'retry) + (_ #f))))) + + (let loop ((manifest (compute))) + (when (eq? mainfest 'retry) + (loop (compute))) + (define (add-tmp-root-and-return-drv drv) (add-temp-root store drv) drv)