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 @@ PARTED-OBJECT field equals PARTITION, return #f if not found."
partition))
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
@ -1108,7 +1127,7 @@ Return #t if all the statements are valid."
(need-formatting?
(user-partition-need-formatting? user-partition)))
(or need-formatting?
(read-partition-uuid file-name)
(read-partition-uuid/retry file-name)
(raise
(condition
(&cannot-read-uuid