feat(era): Implement retry policy for HTTP client downloader (#16664)

This commit is contained in:
Roman Hodulák
2025-06-05 10:21:17 +02:00
committed by GitHub
parent cd521ce79d
commit 63cc4eccad

View File

@@ -67,16 +67,30 @@ impl<Http: HttpClient + Clone> EraClient<Http> {
let number =
self.file_name_to_number(file_name).ok_or_eyre("Cannot parse number from file name")?;
let mut stream = client.get(url).await?;
let mut file = File::create(&path).await?;
let mut hasher = Sha256::new();
while let Some(item) = stream.next().await.transpose()? {
io::copy(&mut item.as_ref(), &mut file).await?;
hasher.update(item);
let mut tries = 1..3;
let mut actual_checksum: eyre::Result<_>;
loop {
actual_checksum = async {
let mut file = File::create(&path).await?;
let mut stream = client.get(url.clone()).await?;
let mut hasher = Sha256::new();
while let Some(item) = stream.next().await.transpose()? {
io::copy(&mut item.as_ref(), &mut file).await?;
hasher.update(item);
}
Ok(hasher.finalize().to_vec())
}
.await;
if actual_checksum.is_ok() || tries.next().is_none() {
break;
}
}
let actual_checksum = hasher.finalize().to_vec();
let actual_checksum = actual_checksum?;
let file = File::open(self.folder.join(Self::CHECKSUMS)).await?;
let reader = io::BufReader::new(file);