This is an automated email from the ASF dual-hosted git repository.

xuanwo pushed a commit to branch fix-http-client
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 1a1c7fffaf152d127f48cdcb6b5a04daea27840f
Author: Xuanwo <[email protected]>
AuthorDate: Fri Mar 15 14:17:17 2024 +0800

    refactor: Remove reqwest related features
    
    Signed-off-by: Xuanwo <[email protected]>
---
 core/Cargo.lock                  | 108 ++-------------------------------------
 core/Cargo.toml                  |  16 ++----
 core/src/docs/upgrade.md         |  12 ++++-
 core/src/raw/http_util/client.rs |  21 ++------
 4 files changed, 21 insertions(+), 136 deletions(-)

diff --git a/core/Cargo.lock b/core/Cargo.lock
index 5986d5cae1..91a83648fb 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -2118,18 +2118,6 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "enum-as-inner"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn 2.0.48",
-]
-
 [[package]]
 name = "equivalent"
 version = "1.0.1"
@@ -2984,19 +2972,6 @@ dependencies = [
  "tokio-io-timeout",
 ]
 
-[[package]]
-name = "hyper-tls"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
-dependencies = [
- "bytes",
- "hyper",
- "native-tls",
- "tokio",
- "tokio-native-tls",
-]
-
 [[package]]
 name = "iana-time-zone"
 version = "0.1.59"
@@ -3037,16 +3012,6 @@ dependencies = [
  "unicode-normalization",
 ]
 
-[[package]]
-name = "idna"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
 [[package]]
 name = "idna"
 version = "0.5.0"
@@ -3789,8 +3754,8 @@ dependencies = [
  "tokio",
  "tokio-rustls",
  "tokio-util",
- "trust-dns-proto 0.21.2",
- "trust-dns-resolver 0.21.2",
+ "trust-dns-proto",
+ "trust-dns-resolver",
  "typed-builder",
  "uuid",
  "webpki-roots 0.25.4",
@@ -4302,15 +4267,6 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
 
-[[package]]
-name = "openssl-src"
-version = "300.2.2+3.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8bbfad0063610ac26ee79f7484739e2b07555a75c42453b89263830b5c8103bc"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "openssl-sys"
 version = "0.9.99"
@@ -4319,7 +4275,6 @@ checksum = 
"22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
 dependencies = [
  "cc",
  "libc",
- "openssl-src",
  "pkg-config",
  "vcpkg",
 ]
@@ -5378,36 +5333,27 @@ dependencies = [
  "http 0.2.11",
  "http-body",
  "hyper",
- "hyper-rustls",
- "hyper-tls",
  "ipnet",
  "js-sys",
  "log",
  "mime",
- "native-tls",
  "once_cell",
  "percent-encoding",
  "pin-project-lite",
  "rustls",
- "rustls-native-certs",
- "rustls-pemfile",
  "serde",
  "serde_json",
  "serde_urlencoded",
  "sync_wrapper",
  "system-configuration",
  "tokio",
- "tokio-native-tls",
- "tokio-rustls",
  "tokio-util",
  "tower-service",
- "trust-dns-resolver 0.23.2",
  "url",
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "wasm-streams",
  "web-sys",
- "webpki-roots 0.25.4",
  "winreg",
 ]
 
@@ -6869,7 +6815,7 @@ dependencies = [
  "async-trait",
  "cfg-if",
  "data-encoding",
- "enum-as-inner 0.4.0",
+ "enum-as-inner",
  "futures-channel",
  "futures-io",
  "futures-util",
@@ -6885,31 +6831,6 @@ dependencies = [
  "url",
 ]
 
-[[package]]
-name = "trust-dns-proto"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374"
-dependencies = [
- "async-trait",
- "cfg-if",
- "data-encoding",
- "enum-as-inner 0.6.0",
- "futures-channel",
- "futures-io",
- "futures-util",
- "idna 0.4.0",
- "ipnet",
- "once_cell",
- "rand 0.8.5",
- "smallvec",
- "thiserror",
- "tinyvec",
- "tokio",
- "tracing",
- "url",
-]
-
 [[package]]
 name = "trust-dns-resolver"
 version = "0.21.2"
@@ -6927,28 +6848,7 @@ dependencies = [
  "smallvec",
  "thiserror",
  "tokio",
- "trust-dns-proto 0.21.2",
-]
-
-[[package]]
-name = "trust-dns-resolver"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6"
-dependencies = [
- "cfg-if",
- "futures-util",
- "ipconfig",
- "lru-cache",
- "once_cell",
- "parking_lot 0.12.1",
- "rand 0.8.5",
- "resolv-conf",
- "smallvec",
- "thiserror",
- "tokio",
- "tracing",
- "trust-dns-proto 0.23.2",
+ "trust-dns-proto",
 ]
 
 [[package]]
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 6d7a8d25b0..72a90cffaf 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -39,7 +39,7 @@ default-members = ["."]
 members = [".", "fuzz", "edge/*", "benches/vs_*"]
 
 [features]
-default = ["rustls", "services-memory"]
+default = ["services-memory"]
 
 # Build test utils or not.
 #
@@ -59,17 +59,6 @@ tests = [
   "services-s3",
 ]
 
-# Enable trust-dns for pure rust dns cache.
-trust-dns = ["reqwest/trust-dns"]
-
-# Enable rustls for TLS support
-rustls = ["reqwest/rustls-tls-native-roots"]
-rustls-webpki = ["reqwest/rustls-tls-webpki-roots"]
-# Enable native-tls for TLS support
-native-tls = ["reqwest/native-tls"]
-# Enable vendored native-tls for TLS support
-native-tls-vendored = ["reqwest/native-tls-vendored"]
-
 # Enable path cache.
 # This is an internal feature, and should not be used by users.
 internal-path-cache = ["dep:moka"]
@@ -388,3 +377,6 @@ tracing-subscriber = { version = "0.3", features = [
   "tracing-log",
 ] }
 wiremock = "0.5"
+reqwest = { version = "0.11.18", features = [
+  "stream", "rustls"
+], default-features = false }
diff --git a/core/src/docs/upgrade.md b/core/src/docs/upgrade.md
index 3ffa845444..a9bed6cf0b 100644
--- a/core/src/docs/upgrade.md
+++ b/core/src/docs/upgrade.md
@@ -1,8 +1,16 @@
 # Upgrade to v0.46
 
-## Services Feature Flag
+## Public API
+
+### Services Feature Flag
+
+Starting with version 0.46, OpenDAL only includes the memory service by 
default to prevent compiling unnecessary service code. To use other services, 
please activate their respective feature flags.
+
+Additionally, we have removed all `reqwest`-related feature flags:
 
-Starting from v0.46, OpenDAL does not include any services except memory 
service in default features to avoid compiling unneeded services' code. Please 
enable each service's feature flag to use it.
+- Users must now directly use `reqwest`'s feature flags for options like 
`rustls`, `native-tls`, etc.
+- The `rustls` feature is no longer enabled by default; it must be activated 
manually.
+- OpenDAL no longer offers the `trust-dns` option; users should configure the 
client builder directly.
 
 # Upgrade to v0.45
 
diff --git a/core/src/raw/http_util/client.rs b/core/src/raw/http_util/client.rs
index e8108e3a6a..3f2f50d675 100644
--- a/core/src/raw/http_util/client.rs
+++ b/core/src/raw/http_util/client.rs
@@ -19,7 +19,6 @@ use std::fmt::Debug;
 use std::fmt::Formatter;
 use std::mem;
 use std::str::FromStr;
-use std::time::Duration;
 
 use futures::TryStreamExt;
 use http::Request;
@@ -34,8 +33,6 @@ use crate::Error;
 use crate::ErrorKind;
 use crate::Result;
 
-const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(60);
-
 /// HttpClient that used across opendal.
 #[derive(Clone)]
 pub struct HttpClient {
@@ -57,22 +54,10 @@ impl HttpClient {
 
     /// Build a new http client in async context.
     #[cfg(not(target_arch = "wasm32"))]
-    pub fn build(mut builder: reqwest::ClientBuilder) -> Result<Self> {
-        // Make sure we don't enable auto gzip decompress.
-        builder = builder.no_gzip();
-        // Make sure we don't enable auto brotli decompress.
-        builder = builder.no_brotli();
-        // Make sure we don't enable auto deflate decompress.
-        builder = builder.no_deflate();
-        // Make sure we don't wait a connection establishment forever.
-        builder = builder.connect_timeout(DEFAULT_CONNECT_TIMEOUT);
-
-        #[cfg(feature = "trust-dns")]
-        let builder = builder.trust_dns(true);
-
+    pub fn build(builder: reqwest::ClientBuilder) -> Result<Self> {
         Ok(Self {
             client: builder.build().map_err(|err| {
-                Error::new(ErrorKind::Unexpected, "async client build 
failed").set_source(err)
+                Error::new(ErrorKind::Unexpected, "http client build 
failed").set_source(err)
             })?,
         })
     }
@@ -82,7 +67,7 @@ impl HttpClient {
     pub fn build(mut builder: reqwest::ClientBuilder) -> Result<Self> {
         Ok(Self {
             client: builder.build().map_err(|err| {
-                Error::new(ErrorKind::Unexpected, "async client build 
failed").set_source(err)
+                Error::new(ErrorKind::Unexpected, "http client build 
failed").set_source(err)
             })?,
         })
     }

Reply via email to