Skip to content
Merged
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: 0 additions & 2 deletions bin/oay/src/bin/webdav.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
Expand Down
3 changes: 1 addition & 2 deletions bin/oay/src/services/webdav/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Config>,
Expand Down
9 changes: 5 additions & 4 deletions bin/oay/src/services/webdav/webdav_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
7 changes: 5 additions & 2 deletions bin/oay/src/services/webdav/webdavfs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 3 additions & 1 deletion core/src/services/etcd/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion core/src/services/obs/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ use crate::*;
///
/// Ok(())
/// }
///```
/// ```

const DEFAULT_WRITE_MIN_SIZE: usize = 100 * 1024;

Expand Down
35 changes: 15 additions & 20 deletions core/src/services/s3/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -556,17 +556,14 @@ impl S3Builder {
/// use opendal::services::S3;
///
/// # async fn example() {
/// let builder = S3::default();
/// let region: Option<String> = builder
/// .detect_region("https://s3.amazonaws.com", "example")
/// .await;
/// let region: Option<String> = 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<String> {
pub async fn detect_region(endpoint: &str, bucket: &str) -> Option<String> {
let mut endpoint = if endpoint.starts_with("http") {
endpoint.to_string()
} else {
Expand Down Expand Up @@ -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
}
}

Expand Down Expand Up @@ -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);
}
}
Expand Down