summaryrefslogtreecommitdiff
path: root/cli/http_util.rs
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-10-15 16:46:42 -0700
committerGitHub <noreply@github.com>2024-10-15 16:46:42 -0700
commit7c3c13cecf48219cdcb90dc0b5019686cdd88626 (patch)
treeea44361a7b8c061ec84ec29d88aa2c6a1c3ec07a /cli/http_util.rs
parent40b1c42138c47e89eefa859cd36a9e3d62541e7b (diff)
fix(install): retry downloads of registry info / tarballs (#26278)
Fixes #26085. Adds a basic retry utility with some defaults, starts off with a 100ms wait, then 250ms, then 500ms I've applied the retry in the http client, reusing an existing function, so this also applies to retrying downloads of deno binaries in `upgrade` and `compile`. I can make a separate function that doesn't retry so this doesn't affect `upgrade` and `compile`, but it seemed desirable to have retries there too, so I left it in.
Diffstat (limited to 'cli/http_util.rs')
-rw-r--r--cli/http_util.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/cli/http_util.rs b/cli/http_util.rs
index cf244c525..9c9ae9e41 100644
--- a/cli/http_util.rs
+++ b/cli/http_util.rs
@@ -470,15 +470,23 @@ impl HttpClient {
}
}
- pub async fn download_with_progress(
+ pub async fn download_with_progress_and_retries(
&self,
url: Url,
maybe_header: Option<(HeaderName, HeaderValue)>,
progress_guard: &UpdateGuard,
) -> Result<Option<Vec<u8>>, DownloadError> {
- self
- .download_inner(url, maybe_header, Some(progress_guard))
- .await
+ crate::util::retry::retry(
+ || {
+ self.download_inner(
+ url.clone(),
+ maybe_header.clone(),
+ Some(progress_guard),
+ )
+ },
+ |e| matches!(e, DownloadError::BadResponse(_) | DownloadError::Fetch(_)),
+ )
+ .await
}
pub async fn get_redirected_url(