Skip to content

Catch retries with wrapped reqwest errors#9253

Merged
charliermarsh merged 1 commit intomainfrom
charlie/t
Nov 19, 2024
Merged

Catch retries with wrapped reqwest errors#9253
charliermarsh merged 1 commit intomainfrom
charlie/t

Conversation

@charliermarsh
Copy link
Copy Markdown
Member

Summary

It turns out that WrappedReqwestError skips the reqwest::Error itself in order to hack the display. This PR adds it to the list of variants we check when retrying transient errors.

Closes #9246.

Test Plan

Patched reqwest locally to return an error in bytes(). Verified that it was not caught prior to this PR, but was caught afterwards.

@charliermarsh charliermarsh added the bug Something isn't working label Nov 19, 2024
/// These cases should be safe to retry with [`Retryable::Transient`].
pub(crate) fn is_extended_transient_error(err: &dyn Error) -> bool {
// First, look for `WrappedReqwestError`, which wraps `reqwest::Error` but doesn't always
// include it in the source.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also change WrappedReqwestError, it's a bit of a footgun, but I guess it's meant to replace reqwest::Error rather than wrap it further.

Copy link
Copy Markdown
Member

@zanieb zanieb Nov 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah... idk. Both approaches seem to have downsides. I'd sort of rather fix the footgun but I'm not sure what other implications that has, presumably it affects the display in a problematic way?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WrappedReqwestError is a hack, if we have a better i'm all for it

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah it looked sorta tricky. I can try though. I'll merge this for now.

/// These cases should be safe to retry with [`Retryable::Transient`].
pub(crate) fn is_extended_transient_error(err: &dyn Error) -> bool {
// First, look for `WrappedReqwestError`, which wraps `reqwest::Error` but doesn't always
// include it in the source.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WrappedReqwestError is a hack, if we have a better i'm all for it

@charliermarsh charliermarsh merged commit 9fb7f81 into main Nov 19, 2024
@charliermarsh charliermarsh deleted the charlie/t branch November 19, 2024 22:08
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 21, 2024
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.5.3` -> `0.5.4` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.5.4`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#054)

[Compare Source](astral-sh/uv@0.5.3...0.5.4)

##### Enhancements

-   Accept either singular or plural values for CLI requirements ([#&#8203;9196](astral-sh/uv#9196))
-   Add `--all-groups` to `uv sync`, `uv run`, `uv export`, and `uv tree` ([#&#8203;8892](astral-sh/uv#8892))
-   Add a progress bar to `uv tree --outdated` and `uv pip list --outdated` ([#&#8203;9284](astral-sh/uv#9284))
-   Add retries for Python downloads ([#&#8203;9274](astral-sh/uv#9274))
-   Use exponential backoff for publish retries ([#&#8203;9276](astral-sh/uv#9276))
-   Add manylinux target triples up to glibc 2.40 ([#&#8203;9234](astral-sh/uv#9234))

##### Performance

-   Parallelize network requests in `uv tree --outdated` ([#&#8203;9280](astral-sh/uv#9280))
-   Use `zlib-rs` on all platforms ([#&#8203;9264](astral-sh/uv#9264))

##### Bug fixes

-   Avoid validating extra and group sources in `build-system.requires` ([#&#8203;9273](astral-sh/uv#9273))
-   Catch retries with wrapped `reqwest` errors ([#&#8203;9253](astral-sh/uv#9253))
-   Sort hashes in `uv export` output ([#&#8203;9237](astral-sh/uv#9237))
-   Strip `--index` and `--default-index` from command header ([#&#8203;9288](astral-sh/uv#9288))

##### Documentation

-   Add breadcrumbs to the documentation ([#&#8203;9242](astral-sh/uv#9242))
-   Add minimum version to PyTorch guide ([#&#8203;9247](astral-sh/uv#9247))
-   Add support for anchor redirects with client-side js ([#&#8203;9212](astral-sh/uv#9212))
-   Improve content on project configuration ([#&#8203;9235](astral-sh/uv#9235))
-   Improve the project creation documentation ([#&#8203;9236](astral-sh/uv#9236))
-   Move the integration guides into the "Guides" section as a collapsed group ([#&#8203;9245](astral-sh/uv#9245))
-   Reorganize the project concept documentation ([#&#8203;9121](astral-sh/uv#9121))
-   Use the full screen height for the main content to stabilize the nav ([#&#8203;9153](astral-sh/uv#9153))

##### Error messages

-   Add dedicated warning for empty stdin ([#&#8203;9256](astral-sh/uv#9256))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Still don't see retry on request or body error when fetching metadata

3 participants