diff options
author | Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> | 2024-10-15 16:46:42 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-15 16:46:42 -0700 |
commit | 7c3c13cecf48219cdcb90dc0b5019686cdd88626 (patch) | |
tree | ea44361a7b8c061ec84ec29d88aa2c6a1c3ec07a /cli/http_util.rs | |
parent | 40b1c42138c47e89eefa859cd36a9e3d62541e7b (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.rs | 16 |
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( |