Skip to content

Commit 70b17ed

Browse files
committed
use retry in clients
1 parent 5ef8519 commit 70b17ed

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

Cargo.lock

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ regex = "1.11.1"
6767
reqwest = { version = "0.12.9", default-features = false }
6868
reqwest-middleware = "0.4"
6969
reqwest-retry = "0.7.0"
70+
retry-policies = "0.4.0"
7071
rlimit = "0.10.2"
7172
rstest = "0.23.0"
7273
self-replace = "1.5.0"

crates/pixi_utils/Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ thiserror = { workspace = true }
4444
tracing = { workspace = true }
4545
tracing-subscriber = { workspace = true }
4646
url = { workspace = true }
47+
reqwest-retry = { workspace = true }
48+
retry-policies = { workspace = true }
4749

4850
[dev-dependencies]
4951
insta = { workspace = true }

crates/pixi_utils/src/reqwest.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ use pixi_consts::consts;
44
use rattler_networking::{
55
authentication_storage::{self, backends::file::FileStorageError},
66
mirror_middleware::Mirror,
7-
retry_policies::ExponentialBackoff,
87
AuthenticationMiddleware, AuthenticationStorage, GCSMiddleware, MirrorMiddleware,
98
OciMiddleware,
109
};
10+
use reqwest_retry::RetryTransientMiddleware;
11+
use retry_policies::policies::ExponentialBackoff;
12+
use retry_policies::Jitter;
1113

1214
use reqwest::Client;
1315
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
1416
use std::collections::HashMap;
1517

1618
use pixi_config::Config;
1719

18-
/// The default retry policy employed by pixi.
19-
/// TODO: At some point we might want to make this configurable.
20-
pub fn default_retry_policy() -> ExponentialBackoff {
20+
fn default_retry_policy() -> ExponentialBackoff {
2121
ExponentialBackoff::builder().build_with_max_retries(3)
2222
}
2323

@@ -101,9 +101,17 @@ pub fn build_reqwest_clients(config: Option<&Config>) -> (Client, ClientWithMidd
101101
.expect("failed to create reqwest Client");
102102

103103
let mut client_builder = ClientBuilder::new(client.clone());
104+
let retry_policy = ExponentialBackoff::builder()
105+
.retry_bounds(Duration::from_secs(1), Duration::from_secs(60))
106+
.jitter(Jitter::Bounded)
107+
.base(2)
108+
.build_with_total_retry_duration(Duration::from_secs(24 * 60 * 60));
109+
110+
let retry_transient_middleware = RetryTransientMiddleware::new_with_policy(retry_policy);
104111

105112
if !config.mirror_map().is_empty() {
106113
client_builder = client_builder
114+
.with(retry_transient_middleware)
107115
.with(mirror_middleware(&config))
108116
.with(oci_middleware());
109117
}

0 commit comments

Comments
 (0)