diff --git a/bin/oay/src/bin/webdav.rs b/bin/oay/src/bin/webdav.rs index 3250dffcba79..acaf9161b5e7 100644 --- a/bin/oay/src/bin/webdav.rs +++ b/bin/oay/src/bin/webdav.rs @@ -18,11 +18,9 @@ use std::sync::Arc; use anyhow::Result; - use oay::services::WebdavService; use oay::Config; use opendal::services::Fs; - use opendal::Operator; use tracing_subscriber::fmt; use tracing_subscriber::prelude::*; diff --git a/bin/oay/src/services/webdav/service.rs b/bin/oay/src/services/webdav/service.rs index dc3045f9683f..6a1bcf55269b 100644 --- a/bin/oay/src/services/webdav/service.rs +++ b/bin/oay/src/services/webdav/service.rs @@ -25,9 +25,8 @@ use axum::Router; use dav_server::DavHandler; use opendal::Operator; -use crate::Config; - use super::webdavfs::WebdavFs; +use crate::Config; pub struct WebdavService { cfg: Arc, diff --git a/bin/oay/src/services/webdav/webdav_file.rs b/bin/oay/src/services/webdav/webdav_file.rs index ed9ac1ba6507..5128c246d990 100644 --- a/bin/oay/src/services/webdav/webdav_file.rs +++ b/bin/oay/src/services/webdav/webdav_file.rs @@ -17,10 +17,11 @@ use std::io::SeekFrom; -use dav_server::{ - davpath::DavPath, - fs::{DavFile, DavMetaData, FsFuture, OpenOptions}, -}; +use dav_server::davpath::DavPath; +use dav_server::fs::DavFile; +use dav_server::fs::DavMetaData; +use dav_server::fs::FsFuture; +use dav_server::fs::OpenOptions; use futures::FutureExt; use opendal::Operator; diff --git a/bin/oay/src/services/webdav/webdavfs.rs b/bin/oay/src/services/webdav/webdavfs.rs index 7c5709aaff99..22f51df97506 100644 --- a/bin/oay/src/services/webdav/webdavfs.rs +++ b/bin/oay/src/services/webdav/webdavfs.rs @@ -15,11 +15,14 @@ // specific language governing permissions and limitations // under the License. -use dav_server::fs::{DavFile, DavFileSystem, DavMetaData}; +use dav_server::fs::DavFile; +use dav_server::fs::DavFileSystem; +use dav_server::fs::DavMetaData; use futures::FutureExt; use opendal::Operator; -use super::{webdav_file::WebdavFile, webdav_metadata::WebdavMetaData}; +use super::webdav_file::WebdavFile; +use super::webdav_metadata::WebdavMetaData; #[derive(Clone)] pub struct WebdavFs { diff --git a/core/src/services/etcd/backend.rs b/core/src/services/etcd/backend.rs index 035e9a58bd21..0181aeaa507a 100644 --- a/core/src/services/etcd/backend.rs +++ b/core/src/services/etcd/backend.rs @@ -21,10 +21,12 @@ use std::fmt::Formatter; use async_trait::async_trait; use etcd_client::Certificate; +use etcd_client::Client; +use etcd_client::ConnectOptions; use etcd_client::Error as EtcdError; +use etcd_client::GetOptions; use etcd_client::Identity; use etcd_client::TlsOptions; -use etcd_client::{Client, ConnectOptions, GetOptions}; use tokio::sync::OnceCell; use crate::raw::adapters::kv; diff --git a/core/src/services/obs/backend.rs b/core/src/services/obs/backend.rs index cd7811abd957..aeb7b5bcdb4c 100644 --- a/core/src/services/obs/backend.rs +++ b/core/src/services/obs/backend.rs @@ -91,7 +91,7 @@ use crate::*; /// /// Ok(()) /// } -///``` +/// ``` const DEFAULT_WRITE_MIN_SIZE: usize = 100 * 1024; diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs index 2a12a2b29ba0..8a2d46fc9095 100644 --- a/core/src/services/s3/backend.rs +++ b/core/src/services/s3/backend.rs @@ -556,17 +556,14 @@ impl S3Builder { /// use opendal::services::S3; /// /// # async fn example() { - /// let builder = S3::default(); - /// let region: Option = builder - /// .detect_region("https://s3.amazonaws.com", "example") - /// .await; + /// let region: Option = S3::detect_region("https://s3.amazonaws.com", "example").await; /// # } /// ``` /// /// # Reference /// /// - [Amazon S3 HeadBucket API](https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_HeadBucket.html) - pub async fn detect_region(&self, endpoint: &str, bucket: &str) -> Option { + pub async fn detect_region(endpoint: &str, bucket: &str) -> Option { let mut endpoint = if endpoint.starts_with("http") { endpoint.to_string() } else { @@ -626,19 +623,19 @@ impl S3Builder { res.headers() ); - match res.status() { - StatusCode::OK | StatusCode::MOVED_PERMANENTLY => { - let region = res.headers().get("x-amz-bucket-region")?; - if let Ok(regin) = region.to_str() { - Some(regin.to_string()) - } else { - None - } - } - StatusCode::FORBIDDEN => Some("us-east-1".to_string()), - // Unexpected status code - _ => None, + // Get region from response header no matter status code. + let region = res.headers().get("x-amz-bucket-region")?; + if let Ok(regin) = region.to_str() { + return Some(regin.to_string()); } + + // Status code is 403 or 200 means we already visit the correct + // region, we can use the default region directly. + if res.status() == StatusCode::FORBIDDEN || res.status() == StatusCode::OK { + return Some("us-east-1".to_string()); + } + + None } } @@ -1249,10 +1246,8 @@ mod tests { ), ]; - let b = S3Builder::default(); - for (name, endpoint, bucket, expected) in cases { - let region = b.detect_region(endpoint, bucket).await; + let region = S3Builder::detect_region(endpoint, bucket).await; assert_eq!(region.as_deref(), expected, "{}", name); } }