From 69f9f7083ff4503a9c7518fc7e995133103594c8 Mon Sep 17 00:00:00 2001 From: Marco Neumann Date: Wed, 12 Feb 2025 13:26:07 +0100 Subject: [PATCH] refactor: directly call stdlib w/o hyper-util --- object_store/Cargo.toml | 4 +--- object_store/src/client/dns.rs | 39 +++++++++++++--------------------- object_store/src/client/mod.rs | 2 +- 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/object_store/Cargo.toml b/object_store/Cargo.toml index a5bc3469b39b..bf254b3a0bbd 100644 --- a/object_store/Cargo.toml +++ b/object_store/Cargo.toml @@ -46,7 +46,6 @@ walkdir = "2" # Cloud storage support base64 = { version = "0.22", default-features = false, features = ["std"], optional = true } hyper = { version = "1.2", default-features = false, optional = true } -hyper-util = { version = "0.1.10", default-features = false, optional = true, features = ["client", "client-legacy", "tokio"] } quick-xml = { version = "0.37.0", features = ["serialize", "overlapped-lists"], optional = true } serde = { version = "1.0", default-features = false, features = ["derive"], optional = true } serde_json = { version = "1.0", default-features = false, optional = true } @@ -55,7 +54,6 @@ reqwest = { version = "0.12", default-features = false, features = ["rustls-tls- ring = { version = "0.17", default-features = false, features = ["std"], optional = true } rustls-pemfile = { version = "2.0", default-features = false, features = ["std"], optional = true } tokio = { version = "1.29.0", features = ["sync", "macros", "rt", "time", "io-util"] } -tower-service = { version = "0.3", default-features = false, optional = true } md-5 = { version = "0.10.6", default-features = false, optional = true } httparse = { version = "1.8.0", default-features = false, features = ["std"], optional = true } @@ -63,7 +61,7 @@ httparse = { version = "1.8.0", default-features = false, features = ["std"], op nix = { version = "0.29.0", features = ["fs"] } [features] -cloud = ["serde", "serde_json", "tower-service", "quick-xml", "hyper", "hyper-util", "reqwest", "reqwest/json", "reqwest/stream", "chrono/serde", "base64", "rand", "ring"] +cloud = ["serde", "serde_json", "quick-xml", "hyper", "reqwest", "reqwest/json", "reqwest/stream", "chrono/serde", "base64", "rand", "ring"] azure = ["cloud", "httparse"] gcp = ["cloud", "rustls-pemfile"] aws = ["cloud", "md-5"] diff --git a/object_store/src/client/dns.rs b/object_store/src/client/dns.rs index 942b33619bc1..32e9291bac76 100644 --- a/object_store/src/client/dns.rs +++ b/object_store/src/client/dns.rs @@ -15,45 +15,36 @@ // specific language governing permissions and limitations // under the License. -use std::str::FromStr; +use std::net::ToSocketAddrs; -use hyper_util::client::legacy::connect::dns::{ - GaiResolver as HyperGaiResolver, Name as HyperName, -}; use rand::prelude::SliceRandom; use reqwest::dns::{Addrs, Name, Resolve, Resolving}; -use tower_service::Service; +use tokio::task::JoinSet; type DynErr = Box; #[derive(Debug)] -pub(crate) struct ShuffleResolver(HyperGaiResolver); - -impl Default for ShuffleResolver { - fn default() -> Self { - Self(HyperGaiResolver::new()) - } -} +pub(crate) struct ShuffleResolver; impl Resolve for ShuffleResolver { fn resolve(&self, name: Name) -> Resolving { - let inner = self.0.clone(); - Box::pin(async move { - let mut inner = inner; + // use `JoinSet` to propagate cancelation + let mut tasks = JoinSet::new(); + tasks.spawn_blocking(move || { + let it = (name.as_str(), 0).to_socket_addrs()?; + let mut addrs = it.collect::>(); - // convert name reqwest -> hyper - let name = HyperName::from_str(name.as_str()).map_err(|err| Box::new(err) as DynErr)?; + addrs.shuffle(&mut rand::rng()); - let mut addr = inner - .call(name) + Ok(Box::new(addrs.into_iter()) as Addrs) + }); + + tasks + .join_next() .await + .expect("spawned on task") .map_err(|err| Box::new(err) as DynErr)? - .collect::>(); - - addr.shuffle(&mut rand::rng()); - - Ok(Box::new(addr.into_iter()) as Addrs) }) } } diff --git a/object_store/src/client/mod.rs b/object_store/src/client/mod.rs index ae211a7a413e..629715955647 100644 --- a/object_store/src/client/mod.rs +++ b/object_store/src/client/mod.rs @@ -690,7 +690,7 @@ impl ClientOptions { builder = builder.no_gzip(); if self.randomize_addresses.get()? { - builder = builder.dns_resolver(Arc::new(dns::ShuffleResolver::default())); + builder = builder.dns_resolver(Arc::new(dns::ShuffleResolver)); } builder