This is an automated email from the ASF dual-hosted git repository. xuanwo pushed a commit to branch add-list-objects-v1-support in repository https://gitbox.apache.org/repos/asf/opendal.git
commit 9128611861e1463a5a043f33de8e5f7cc8e4be86 Author: Xuanwo <[email protected]> AuthorDate: Mon Apr 7 16:22:27 2025 +0800 Rename existing list objects to v2 Signed-off-by: Xuanwo <[email protected]> --- core/src/services/s3/backend.rs | 4 ++-- core/src/services/s3/core.rs | 9 +++++---- core/src/services/s3/lister.rs | 15 ++++++++------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs index 9ce15829a..b696793fb 100644 --- a/core/src/services/s3/backend.rs +++ b/core/src/services/s3/backend.rs @@ -43,7 +43,7 @@ use std::sync::LazyLock; use super::core::*; use super::delete::S3Deleter; use super::error::parse_error; -use super::lister::{S3Lister, S3Listers, S3ObjectVersionsLister}; +use super::lister::{S3ListerV2, S3Listers, S3ObjectVersionsLister}; use super::writer::S3Writer; use super::writer::S3Writers; use crate::raw::oio::PageLister; @@ -1095,7 +1095,7 @@ impl Access for S3Backend { args, ))) } else { - TwoWays::One(PageLister::new(S3Lister::new( + TwoWays::One(PageLister::new(S3ListerV2::new( self.core.clone(), path, args, diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs index ba7d530f8..60a2db6b4 100644 --- a/core/src/services/s3/core.rs +++ b/core/src/services/s3/core.rs @@ -676,7 +676,7 @@ impl S3Core { self.send(req).await } - pub async fn s3_list_objects( + pub async fn s3_list_objects_v2( &self, path: &str, continuation_token: &str, @@ -1070,7 +1070,7 @@ pub struct DeleteObjectsResultError { pub version_id: Option<String>, } -/// Output of ListBucket/ListObjects. +/// Output of ListBucketV2/ListObjectsV2. /// /// ## Note /// @@ -1081,7 +1081,7 @@ pub struct DeleteObjectsResultError { /// is not exist. #[derive(Default, Debug, Deserialize)] #[serde(default, rename_all = "PascalCase")] -pub struct ListObjectsOutput { +pub struct ListObjectsOutputV2 { pub is_truncated: Option<bool>, pub next_continuation_token: Option<String>, pub common_prefixes: Vec<OutputCommonPrefix>, @@ -1407,7 +1407,8 @@ mod tests { </ListBucketResult>"#, ); - let out: ListObjectsOutput = quick_xml::de::from_reader(bs.reader()).expect("must success"); + let out: ListObjectsOutputV2 = + quick_xml::de::from_reader(bs.reader()).expect("must success"); assert!(!out.is_truncated.unwrap()); assert!(out.next_continuation_token.is_none()); diff --git a/core/src/services/s3/lister.rs b/core/src/services/s3/lister.rs index f280e10e4..f1bf4b5ef 100644 --- a/core/src/services/s3/lister.rs +++ b/core/src/services/s3/lister.rs @@ -18,7 +18,7 @@ use std::sync::Arc; use super::core::S3Core; -use super::core::{ListObjectVersionsOutput, ListObjectsOutput}; +use super::core::{ListObjectVersionsOutput, ListObjectsOutputV2}; use super::error::parse_error; use crate::raw::oio::PageContext; use crate::raw::*; @@ -29,9 +29,10 @@ use crate::Result; use bytes::Buf; use quick_xml::de; -pub type S3Listers = TwoWays<oio::PageLister<S3Lister>, oio::PageLister<S3ObjectVersionsLister>>; +pub type S3Listers = TwoWays<oio::PageLister<S3ListerV2>, oio::PageLister<S3ObjectVersionsLister>>; -pub struct S3Lister { +/// S3ListerV2 implements ListObjectV2 for s3 backend. +pub struct S3ListerV2 { core: Arc<S3Core>, path: String, @@ -41,7 +42,7 @@ pub struct S3Lister { abs_start_after: Option<String>, } -impl S3Lister { +impl S3ListerV2 { pub fn new(core: Arc<S3Core>, path: &str, args: OpList) -> Self { let delimiter = if args.recursive() { "" } else { "/" }; let abs_start_after = args @@ -59,11 +60,11 @@ impl S3Lister { } } -impl oio::PageList for S3Lister { +impl oio::PageList for S3ListerV2 { async fn next_page(&self, ctx: &mut oio::PageContext) -> Result<()> { let resp = self .core - .s3_list_objects( + .s3_list_objects_v2( &self.path, &ctx.token, self.delimiter, @@ -82,7 +83,7 @@ impl oio::PageList for S3Lister { } let bs = resp.into_body(); - let output: ListObjectsOutput = de::from_reader(bs.reader()) + let output: ListObjectsOutputV2 = de::from_reader(bs.reader()) .map_err(new_xml_deserialize_error) // Allow S3 list to retry on XML deserialization errors. //
