Add retry if connection got reset by peer (#144)

This commit is contained in:
ByteDream 2023-04-13 21:53:46 +02:00
parent 3c648f4192
commit 95f8cc542c

View file

@ -529,11 +529,21 @@ pub async fn download_segments(
for (i, segment) in thread_segments.into_iter().enumerate() { for (i, segment) in thread_segments.into_iter().enumerate() {
let mut retry_count = 0; let mut retry_count = 0;
let mut buf = loop { let mut buf = loop {
let response = thread_client let request = thread_client
.get(&segment.url) .get(&segment.url)
.timeout(Duration::from_secs(60)) .timeout(Duration::from_secs(60))
.send() .send();
.await?;
let response = match request.await {
Ok(r) => r,
Err(e) => {
if retry_count == 5 {
bail!("Max retry count reached ({}), multiple errors occurred while receiving segment {}: {}", retry_count, num + (i * cpus), e)
}
debug!("Failed to download segment {} ({}). Retrying, {} out of 5 retries left", num + (i * cpus), e, 5 - retry_count);
continue
}
};
match response.bytes().await { match response.bytes().await {
Ok(b) => break b.to_vec(), Ok(b) => break b.to_vec(),