installer: parted: Retry failing read-partition-uuid call.

Fixes: <https://issues.guix.gnu.org/53541>.

* gnu/installer/parted.scm (read-partition-uuid/retry): New procedure.
(check-user-partitions): Use it.
This commit is contained in:
Mathieu Othacehe 2022-10-22 22:27:57 +02:00
parent 5197b07e0e
commit ab974ed709
No known key found for this signature in database
GPG key ID: 8354763531769CA6

View file

@ -319,6 +319,25 @@ (define (find-user-partition-by-parted-object user-partitions
partition)) partition))
user-partitions)) user-partitions))
(define (read-partition-uuid/retry file-name)
"Call READ-PARTITION-UUID with 5 retries spaced by 1 second. This is useful
if the partition table is updated by the kernel at the time this function is
called, causing the underlying /dev to be absent."
(define max-retries 5)
(let loop ((retry max-retries))
(catch #t
(lambda ()
(read-partition-uuid file-name))
(lambda _
(if (> retry 0)
(begin
(sleep 1)
(loop (- retry 1)))
(error
(format #f (G_ "Could not open ~a after ~a retries~%.")
file-name max-retries)))))))
;; ;;
;; Devices ;; Devices
@ -1108,7 +1127,7 @@ (define (check-uuid)
(need-formatting? (need-formatting?
(user-partition-need-formatting? user-partition))) (user-partition-need-formatting? user-partition)))
(or need-formatting? (or need-formatting?
(read-partition-uuid file-name) (read-partition-uuid/retry file-name)
(raise (raise
(condition (condition
(&cannot-read-uuid (&cannot-read-uuid