Skip to content

Commit 5f6b502

Browse files
authored
Merge pull request #3248 from ProvableHQ/fix/parameter-fetch-ureq-minimal
[Fix] Use `ureq` instead of `reqwest::blocking`
2 parents 5f551f7 + 8487fc5 commit 5f6b502

5 files changed

Lines changed: 65 additions & 62 deletions

File tree

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ jobs:
686686

687687
ledger:
688688
executor: rust-docker
689-
resource_class: << pipeline.parameters.xlarge >>
689+
resource_class: << pipeline.parameters.twoxlarge >>
690690
steps:
691691
- run_test:
692692
workspace_member: snarkvm-ledger

Cargo.lock

Lines changed: 38 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parameters/Cargo.toml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,13 @@ version = "0.3.64"
9393
features = ["XmlHttpRequest"]
9494
optional = true
9595

96-
[target.'cfg(all(any(target_os = "android", target_os = "ios"), not(target_family = "wasm"), not(target_env = "sgx")))'.dependencies.reqwest]
97-
version = "0.13"
98-
default-features = false
99-
features = ["blocking", "native-tls"]
96+
[target.'cfg(all(any(target_os = "android", target_os = "ios"), not(target_family = "wasm"), not(target_env = "sgx")))'.dependencies.ureq]
97+
workspace = true
98+
features = ["native-tls"]
10099

101-
[target.'cfg(all(not(any(target_os = "android", target_os = "ios")), not(target_family = "wasm"), not(target_env = "sgx")))'.dependencies.reqwest]
102-
version = "0.13"
103-
default-features = false
104-
features = ["blocking", "rustls"]
100+
[target.'cfg(all(not(any(target_os = "android", target_os = "ios")), not(target_family = "wasm"), not(target_env = "sgx")))'.dependencies.ureq]
101+
workspace = true
102+
features = ["rustls"]
105103

106104
[dev-dependencies.snarkvm-algorithms]
107105
path = "../algorithms"

parameters/src/errors/parameter.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ pub enum ParameterError {
4040
}
4141

4242
#[cfg(all(not(feature = "wasm"), not(target_env = "sgx")))]
43-
impl From<reqwest::Error> for ParameterError {
44-
fn from(error: reqwest::Error) -> Self {
45-
ParameterError::Crate("reqwest", format!("{error}"))
43+
impl From<ureq::Error> for ParameterError {
44+
fn from(error: ureq::Error) -> Self {
45+
ParameterError::Crate("ureq", format!("{error}"))
4646
}
4747
}
4848

parameters/src/macros.rs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,32 @@ macro_rules! impl_store_and_remote_fetch {
7070

7171
#[cfg(all(not(feature = "wasm"), not(target_env = "sgx")))]
7272
fn remote_fetch(buffer: &mut Vec<u8>, url: &str) -> Result<(), $crate::errors::ParameterError> {
73+
use std::io::Read;
74+
7375
#[cfg(not(feature = "no_std_out"))]
7476
{
7577
use colored::*;
7678
let output = format!("{:>15} - Downloading \"{}\"", "Installation", url);
7779
println!("{}", output.dimmed());
7880
}
7981

80-
let host = url.split('/').nth(2).unwrap_or_default().to_string();
81-
let retry_policy = reqwest::retry::for_host(host)
82-
.max_retries_per_request(3)
83-
.classify_fn(|req_rep| {
84-
if req_rep.error().is_some() {
85-
return req_rep.retryable();
82+
// Retry up to 3 times on transient errors (5xx, 429, IO, timeout).
83+
let mut attempts = 3u32;
84+
loop {
85+
match ureq::get(url).config().max_redirects(10).build().call() {
86+
Ok(mut response) => {
87+
response.body_mut().as_reader().read_to_end(buffer)?;
88+
break;
8689
}
87-
match req_rep.status() {
88-
Some(status) if status.is_server_error() || status.as_u16() == 429 => req_rep.retryable(),
89-
_ => req_rep.success(),
90+
Err(ureq::Error::StatusCode(code)) if attempts > 0 && (code >= 500 || code == 429) => {
91+
attempts -= 1;
9092
}
91-
});
92-
93-
let client = reqwest::blocking::Client::builder()
94-
.redirect(reqwest::redirect::Policy::limited(10)) // Limit to 10 redirects.
95-
.retry(retry_policy)
96-
.build()?;
97-
98-
let mut response = client.get(url).send()?.error_for_status()?;
99-
response.copy_to(buffer)?;
93+
Err(ureq::Error::Io(_) | ureq::Error::Timeout(_)) if attempts > 0 => {
94+
attempts -= 1;
95+
}
96+
Err(err) => return Err(err.into()),
97+
}
98+
}
10099

101100
#[cfg(not(feature = "no_std_out"))]
102101
{

0 commit comments

Comments
 (0)