Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion reqwest-middleware/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ serde = { version = "1.0.106", optional = true }
thiserror = "2.0"
tower-service = "0.3.0"

[dev-dependencies]
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
reqwest = { version = "0.13.1", features = ["rustls"] }
reqwest-retry = { path = "../reqwest-retry" }
reqwest-tracing = { path = "../reqwest-tracing" }
Expand Down
17 changes: 13 additions & 4 deletions reqwest-retry/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,26 @@ reqwest = { version = "0.13.1", default-features = false }
retry-policies = "0.5"
thiserror = "2.0"
tracing = { version = "0.1.26", optional = true }
web-time = "1.1.0"

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
hyper = "1.0"
tokio = { version = "1.6.0", default-features = false, features = ["time"] }

[target.'cfg(target_arch = "wasm32")'.dependencies]
wasmtimer = "0.4.3"
getrandom = { version = "0.2.0", features = ["js"] }
getrandom = { version = "0.3.0", features = ["wasm_js"] }

[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
wiremock = { version = "0.6", default-features = false }
[dev-dependencies]
tokio = { version = "1.0.0", features = [
#"time",
#"io-util",
#"sync",
#"macros",
#"rt",
], default-features = false }

paste = "1.0.0"
tokio = { version = "1.0.0", features = ["full"] }
wiremock = "0.6.0"
futures = "0.3.0"
#futures = "0.3.0"
2 changes: 1 addition & 1 deletion reqwest-retry/src/middleware.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ macro_rules! log_retry {
/// runtime that supports them.
///
///```rust
/// use std::time::Duration;
/// use web_time::Duration;
/// use reqwest_middleware::ClientBuilder;
/// use retry_policies::{RetryDecision, RetryPolicy, Jitter};
/// use retry_policies::policies::ExponentialBackoff;
Expand Down
36 changes: 19 additions & 17 deletions reqwest-retry/tests/all/retry.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![cfg(not(target_family = "wasm"))]
use futures::FutureExt;
use paste::paste;
use reqwest::Client;
Expand All @@ -11,6 +12,7 @@ use std::sync::{
};
use tokio::io::AsyncReadExt;
use tokio::io::AsyncWriteExt;

use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, Respond, ResponseTemplate};

Expand Down Expand Up @@ -55,8 +57,8 @@ macro_rules! assert_retry_succeeds_inner {
.with(RetryTransientMiddleware::new_with_policy(
ExponentialBackoff::builder()
.retry_bounds(
std::time::Duration::from_millis(30),
std::time::Duration::from_millis(100),
web_time::Duration::from_millis(30),
web_time::Duration::from_millis(100),
)
.build_with_max_retries(retry_amount),
))
Expand Down Expand Up @@ -151,10 +153,10 @@ assert_retry_succeeds!(429, StatusCode::OK);
assert_no_retry!(431, StatusCode::REQUEST_HEADER_FIELDS_TOO_LARGE);
assert_no_retry!(451, StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS);

pub struct RetryTimeoutResponder(Arc<AtomicU32>, u32, std::time::Duration);
pub struct RetryTimeoutResponder(Arc<AtomicU32>, u32, web_time::Duration);

impl RetryTimeoutResponder {
fn new(retries: u32, initial_timeout: std::time::Duration) -> Self {
fn new(retries: u32, initial_timeout: web_time::Duration) -> Self {
Self(Arc::new(AtomicU32::new(0)), retries, initial_timeout)
}
}
Expand All @@ -180,7 +182,7 @@ async fn assert_retry_on_request_timeout() {
.and(path("/foo"))
.respond_with(RetryTimeoutResponder::new(
3,
std::time::Duration::from_millis(1000),
web_time::Duration::from_millis(1000),
))
.expect(2)
.mount(&server)
Expand All @@ -191,16 +193,16 @@ async fn assert_retry_on_request_timeout() {
.with(RetryTransientMiddleware::new_with_policy(
ExponentialBackoff::builder()
.retry_bounds(
std::time::Duration::from_millis(30),
std::time::Duration::from_millis(100),
web_time::Duration::from_millis(30),
web_time::Duration::from_millis(100),
)
.build_with_max_retries(3),
))
.build();

let resp = client
.get(format!("{}/foo", server.uri()))
.timeout(std::time::Duration::from_millis(10))
.timeout(web_time::Duration::from_millis(10))
.send()
.await
.expect("call failed");
Expand Down Expand Up @@ -246,16 +248,16 @@ async fn assert_retry_on_incomplete_message() {
.with(RetryTransientMiddleware::new_with_policy(
ExponentialBackoff::builder()
.retry_bounds(
std::time::Duration::from_millis(30),
std::time::Duration::from_millis(100),
web_time::Duration::from_millis(30),
web_time::Duration::from_millis(100),
)
.build_with_max_retries(3),
))
.build();

let resp = client
.get(format!("{}/foo", uri))
.timeout(std::time::Duration::from_millis(100))
.timeout(web_time::Duration::from_millis(100))
.send()
.await
.expect("call failed");
Expand Down Expand Up @@ -297,16 +299,16 @@ async fn assert_retry_on_hyper_canceled() {
.with(RetryTransientMiddleware::new_with_policy(
ExponentialBackoff::builder()
.retry_bounds(
std::time::Duration::from_millis(30),
std::time::Duration::from_millis(100),
web_time::Duration::from_millis(30),
web_time::Duration::from_millis(100),
)
.build_with_max_retries(3),
))
.build();

let resp = client
.get(format!("{}/foo", uri))
.timeout(std::time::Duration::from_millis(100))
.timeout(web_time::Duration::from_millis(100))
.send()
.await
.expect("call failed");
Expand Down Expand Up @@ -345,16 +347,16 @@ async fn assert_retry_on_connection_reset_by_peer() {
.with(RetryTransientMiddleware::new_with_policy(
ExponentialBackoff::builder()
.retry_bounds(
std::time::Duration::from_millis(30),
std::time::Duration::from_millis(100),
web_time::Duration::from_millis(30),
web_time::Duration::from_millis(100),
)
.build_with_max_retries(3),
))
.build();

let resp = client
.get(format!("{}/foo", uri))
.timeout(std::time::Duration::from_millis(100))
.timeout(web_time::Duration::from_millis(100))
.send()
.await
.expect("call failed");
Expand Down
128 changes: 98 additions & 30 deletions reqwest-tracing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,54 @@ keywords = ["reqwest", "http", "middleware", "opentelemetry", "tracing"]
categories = ["web-programming::http-client"]

[features]
opentelemetry_0_20 = ["opentelemetry_0_20_pkg", "tracing-opentelemetry_0_21_pkg"]
opentelemetry_0_21 = ["opentelemetry_0_21_pkg", "tracing-opentelemetry_0_22_pkg"]
opentelemetry_0_22 = ["opentelemetry_0_22_pkg", "tracing-opentelemetry_0_23_pkg"]
opentelemetry_0_23 = ["opentelemetry_0_23_pkg", "tracing-opentelemetry_0_24_pkg"]
opentelemetry_0_24 = ["opentelemetry_0_24_pkg", "tracing-opentelemetry_0_25_pkg"]
opentelemetry_0_25 = ["opentelemetry_0_25_pkg", "tracing-opentelemetry_0_26_pkg"]
opentelemetry_0_26 = ["opentelemetry_0_26_pkg", "tracing-opentelemetry_0_27_pkg"]
opentelemetry_0_27 = ["opentelemetry_0_27_pkg", "tracing-opentelemetry_0_28_pkg"]
opentelemetry_0_28 = ["opentelemetry_0_28_pkg", "tracing-opentelemetry_0_29_pkg"]
opentelemetry_0_29 = ["opentelemetry_0_29_pkg", "tracing-opentelemetry_0_30_pkg"]
opentelemetry_0_30 = ["opentelemetry_0_30_pkg", "tracing-opentelemetry_0_31_pkg"]
opentelemetry_0_31 = ["opentelemetry_0_31_pkg", "tracing-opentelemetry_0_32_pkg"]
opentelemetry_0_20 = [
"opentelemetry_0_20_pkg",
"tracing-opentelemetry_0_21_pkg",
]
opentelemetry_0_21 = [
"opentelemetry_0_21_pkg",
"tracing-opentelemetry_0_22_pkg",
]
opentelemetry_0_22 = [
"opentelemetry_0_22_pkg",
"tracing-opentelemetry_0_23_pkg",
]
opentelemetry_0_23 = [
"opentelemetry_0_23_pkg",
"tracing-opentelemetry_0_24_pkg",
]
opentelemetry_0_24 = [
"opentelemetry_0_24_pkg",
"tracing-opentelemetry_0_25_pkg",
]
opentelemetry_0_25 = [
"opentelemetry_0_25_pkg",
"tracing-opentelemetry_0_26_pkg",
]
opentelemetry_0_26 = [
"opentelemetry_0_26_pkg",
"tracing-opentelemetry_0_27_pkg",
]
opentelemetry_0_27 = [
"opentelemetry_0_27_pkg",
"tracing-opentelemetry_0_28_pkg",
]
opentelemetry_0_28 = [
"opentelemetry_0_28_pkg",
"tracing-opentelemetry_0_29_pkg",
]
opentelemetry_0_29 = [
"opentelemetry_0_29_pkg",
"tracing-opentelemetry_0_30_pkg",
]
opentelemetry_0_30 = [
"opentelemetry_0_30_pkg",
"tracing-opentelemetry_0_31_pkg",
]
opentelemetry_0_31 = [
"opentelemetry_0_31_pkg",
"tracing-opentelemetry_0_32_pkg",
]
# This feature ensures that both the old (deprecated) and new attributes are published simultaneously.
# By doing so, we maintain backward compatibility, allowing existing code that relies on the old attributes
# to continue functioning while encouraging the transition to the new attributes.
Expand Down Expand Up @@ -63,27 +99,59 @@ tracing-opentelemetry_0_31_pkg = { package = "tracing-opentelemetry", version =
tracing-opentelemetry_0_32_pkg = { package = "tracing-opentelemetry", version = "0.32.0", optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
getrandom = { version = "0.2.0", features = ["js"] }
getrandom = { version = "0.3.0", features = ["wasm_js"] }

[dev-dependencies]
[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
tokio = { version = "1.0.0", features = ["macros"] }
tracing_subscriber = { package = "tracing-subscriber", version = "0.3.0" }
wiremock = "0.6.0"
reqwest = { version = "0.13.1", features = ["rustls"] }

opentelemetry_sdk_0_21 = { package = "opentelemetry_sdk", version = "0.21.0", features = ["trace"] }
opentelemetry_sdk_0_22 = { package = "opentelemetry_sdk", version = "0.22.0", features = ["trace"] }
opentelemetry_sdk_0_23 = { package = "opentelemetry_sdk", version = "0.23.0", features = ["trace"] }
opentelemetry_sdk_0_24 = { package = "opentelemetry_sdk", version = "0.24.1", features = ["trace"] }
opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", features = ["trace"] }
opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = ["trace"] }
opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = ["trace"] }
opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = ["trace"] }
opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = ["trace"] }
opentelemetry_sdk_0_30 = { package = "opentelemetry_sdk", version = "0.30.0", features = ["trace"] }
opentelemetry_sdk_0_31 = { package = "opentelemetry_sdk", version = "0.31.0", features = ["trace"] }
opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = ["trace"] }
opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = ["trace"] }
opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = ["trace"] }
opentelemetry_stdout_0_4 = { package = "opentelemetry-stdout", version = "0.4.0", features = ["trace"] }
opentelemetry_stdout_0_5 = { package = "opentelemetry-stdout", version = "0.5.0", features = ["trace"] }
opentelemetry_sdk_0_21 = { package = "opentelemetry_sdk", version = "0.21.0", features = [
"trace",
] }
opentelemetry_sdk_0_22 = { package = "opentelemetry_sdk", version = "0.22.0", features = [
"trace",
] }
opentelemetry_sdk_0_23 = { package = "opentelemetry_sdk", version = "0.23.0", features = [
"trace",
] }
opentelemetry_sdk_0_24 = { package = "opentelemetry_sdk", version = "0.24.1", features = [
"trace",
] }
opentelemetry_sdk_0_25 = { package = "opentelemetry_sdk", version = "0.25.0", features = [
"trace",
] }
opentelemetry_sdk_0_26 = { package = "opentelemetry_sdk", version = "0.26.0", features = [
"trace",
] }
opentelemetry_sdk_0_27 = { package = "opentelemetry_sdk", version = "0.27.0", features = [
"trace",
] }
opentelemetry_sdk_0_28 = { package = "opentelemetry_sdk", version = "0.28.0", features = [
"trace",
] }
opentelemetry_sdk_0_29 = { package = "opentelemetry_sdk", version = "0.29.0", features = [
"trace",
] }
opentelemetry_sdk_0_30 = { package = "opentelemetry_sdk", version = "0.30.0", features = [
"trace",
] }
opentelemetry_sdk_0_31 = { package = "opentelemetry_sdk", version = "0.31.0", features = [
"trace",
] }
opentelemetry_stdout_0_1 = { package = "opentelemetry-stdout", version = "0.1.0", features = [
"trace",
] }
opentelemetry_stdout_0_2 = { package = "opentelemetry-stdout", version = "0.2.0", features = [
"trace",
] }
opentelemetry_stdout_0_3 = { package = "opentelemetry-stdout", version = "0.3.0", features = [
"trace",
] }
opentelemetry_stdout_0_4 = { package = "opentelemetry-stdout", version = "0.4.0", features = [
"trace",
] }
opentelemetry_stdout_0_5 = { package = "opentelemetry-stdout", version = "0.5.0", features = [
"trace",
] }
Loading