This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 1507b6def fix(core): Fix capability of services is not set correctly
(#2968)
1507b6def is described below
commit 1507b6def2cfebee6a016ef893ef13cf05897a6d
Author: Xuanwo <[email protected]>
AuthorDate: Tue Aug 29 15:29:29 2023 +0800
fix(core): Fix capability of services is not set correctly (#2968)
* Save work
Signed-off-by: Xuanwo <[email protected]>
* Remove bench
Signed-off-by: Xuanwo <[email protected]>
* FIx typo
Signed-off-by: Xuanwo <[email protected]>
* Fix test
Signed-off-by: Xuanwo <[email protected]>
---------
Signed-off-by: Xuanwo <[email protected]>
---
core/src/layers/complete.rs | 4 ++--
core/src/layers/madsim.rs | 2 +-
core/src/layers/retry.rs | 2 +-
core/src/raw/accessor.rs | 18 ++++++++++++------
core/src/raw/adapters/kv/api.rs | 2 +-
core/src/raw/adapters/kv/backend.rs | 4 +++-
core/src/raw/adapters/typed_kv/backend.rs | 6 ++++--
core/src/raw/oio/read/into_seekable_read_by_range.rs | 2 +-
core/src/services/azblob/backend.rs | 2 +-
core/src/services/azdfs/backend.rs | 2 +-
core/src/services/cos/backend.rs | 2 +-
core/src/services/dropbox/backend.rs | 2 +-
core/src/services/fs/backend.rs | 2 +-
core/src/services/ftp/backend.rs | 2 +-
core/src/services/gcs/backend.rs | 2 +-
core/src/services/gdrive/backend.rs | 2 +-
core/src/services/ghac/backend.rs | 2 +-
core/src/services/hdfs/backend.rs | 2 +-
core/src/services/http/backend.rs | 2 +-
core/src/services/ipfs/backend.rs | 2 +-
core/src/services/ipmfs/backend.rs | 2 +-
core/src/services/obs/backend.rs | 2 +-
core/src/services/onedrive/backend.rs | 2 +-
core/src/services/oss/backend.rs | 2 +-
core/src/services/s3/backend.rs | 2 +-
core/src/services/sftp/backend.rs | 2 +-
core/src/services/supabase/backend.rs | 2 +-
core/src/services/vercel_artifacts/backend.rs | 2 +-
core/src/services/wasabi/backend.rs | 2 +-
core/src/services/webdav/backend.rs | 2 +-
core/src/services/webhdfs/backend.rs | 2 +-
31 files changed, 48 insertions(+), 38 deletions(-)
diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs
index f95ba0851..4c58b6e30 100644
--- a/core/src/layers/complete.rs
+++ b/core/src/layers/complete.rs
@@ -156,7 +156,7 @@ impl<A: Accessor> CompleteReaderAccessor<A> {
path: &str,
args: OpRead,
) -> Result<(RpRead, CompleteReader<A, A::Reader>)> {
- let capability = self.meta.full_capability();
+ let capability = self.meta.native_capability();
if !capability.read {
return new_capability_unsupported_error(Operation::Read);
}
@@ -899,7 +899,7 @@ mod tests {
fn info(&self) -> AccessorInfo {
let mut info = AccessorInfo::default();
- info.set_full_capability(self.capability);
+ info.set_native_capability(self.capability);
info
}
diff --git a/core/src/layers/madsim.rs b/core/src/layers/madsim.rs
index d7d483989..fdf0ec5de 100644
--- a/core/src/layers/madsim.rs
+++ b/core/src/layers/madsim.rs
@@ -160,7 +160,7 @@ impl LayeredAccessor for MadsimAccessor {
let mut info = AccessorInfo::default();
info.set_name("madsim");
- info.set_full_capability(Capability {
+ info.set_native_capability(Capability {
read: true,
write: true,
..Default::default()
diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs
index bd56fa42c..7517c2c21 100644
--- a/core/src/layers/retry.rs
+++ b/core/src/layers/retry.rs
@@ -1151,7 +1151,7 @@ mod tests {
fn info(&self) -> AccessorInfo {
let mut am = AccessorInfo::default();
- am.set_full_capability(Capability {
+ am.set_native_capability(Capability {
read: true,
list: true,
list_with_delimiter_slash: true,
diff --git a/core/src/raw/accessor.rs b/core/src/raw/accessor.rs
index 9c8905482..6fed93b58 100644
--- a/core/src/raw/accessor.rs
+++ b/core/src/raw/accessor.rs
@@ -534,6 +534,18 @@ impl AccessorInfo {
self.native_capability
}
+ /// Set native capabilities for service.
+ ///
+ /// # NOTES
+ ///
+ /// Set native capability will also flush the full capability. The only
way to change
+ /// full_capability is via `full_capability_mut`.
+ pub fn set_native_capability(&mut self, capability: Capability) -> &mut
Self {
+ self.native_capability = capability;
+ self.full_capability = capability;
+ self
+ }
+
/// Get service's full capabilities.
pub fn full_capability(&self) -> Capability {
self.full_capability
@@ -543,10 +555,4 @@ impl AccessorInfo {
pub fn full_capability_mut(&mut self) -> &mut Capability {
&mut self.full_capability
}
-
- /// Set full capabilities for service.
- pub fn set_full_capability(&mut self, capability: Capability) -> &mut Self
{
- self.full_capability = capability;
- self
- }
}
diff --git a/core/src/raw/adapters/kv/api.rs b/core/src/raw/adapters/kv/api.rs
index 7ae2fe97e..9adaabae6 100644
--- a/core/src/raw/adapters/kv/api.rs
+++ b/core/src/raw/adapters/kv/api.rs
@@ -169,7 +169,7 @@ impl From<Metadata> for AccessorInfo {
let mut am = AccessorInfo::default();
am.set_name(m.name());
am.set_scheme(m.scheme());
- am.set_full_capability(m.capabilities());
+ am.set_native_capability(m.capabilities());
am
}
diff --git a/core/src/raw/adapters/kv/backend.rs
b/core/src/raw/adapters/kv/backend.rs
index 94b110a18..41c4c6a7d 100644
--- a/core/src/raw/adapters/kv/backend.rs
+++ b/core/src/raw/adapters/kv/backend.rs
@@ -69,7 +69,7 @@ impl<S: Adapter> Accessor for Backend<S> {
let mut am: AccessorInfo = self.kv.metadata().into();
am.set_root(&self.root);
- let cap = am.full_capability_mut();
+ let mut cap = Capability::default();
if cap.read {
cap.read_can_seek = true;
cap.read_can_next = true;
@@ -94,6 +94,8 @@ impl<S: Adapter> Accessor for Backend<S> {
cap.list_without_delimiter = true;
}
+ am.set_native_capability(cap);
+
am
}
diff --git a/core/src/raw/adapters/typed_kv/backend.rs
b/core/src/raw/adapters/typed_kv/backend.rs
index 990629553..9f6186a38 100644
--- a/core/src/raw/adapters/typed_kv/backend.rs
+++ b/core/src/raw/adapters/typed_kv/backend.rs
@@ -67,8 +67,9 @@ impl<S: Adapter> Accessor for Backend<S> {
am.set_root(&self.root);
am.set_scheme(kv_info.scheme());
am.set_name(kv_info.name());
+
let kv_cap = kv_info.capabilities();
- let cap = am.full_capability_mut();
+ let mut cap = Capability::default();
if kv_cap.get {
cap.read = true;
cap.read_can_seek = true;
@@ -98,9 +99,10 @@ impl<S: Adapter> Accessor for Backend<S> {
if cap.read && cap.write && cap.delete {
cap.rename = true;
}
-
cap.blocking = true;
+ am.set_native_capability(cap);
+
am
}
diff --git a/core/src/raw/oio/read/into_seekable_read_by_range.rs
b/core/src/raw/oio/read/into_seekable_read_by_range.rs
index 052b300ec..9f623d010 100644
--- a/core/src/raw/oio/read/into_seekable_read_by_range.rs
+++ b/core/src/raw/oio/read/into_seekable_read_by_range.rs
@@ -420,7 +420,7 @@ mod tests {
fn info(&self) -> AccessorInfo {
let mut am = AccessorInfo::default();
- am.set_full_capability(Capability {
+ am.set_native_capability(Capability {
read: true,
..Default::default()
});
diff --git a/core/src/services/azblob/backend.rs
b/core/src/services/azblob/backend.rs
index e773d4199..fbd480de6 100644
--- a/core/src/services/azblob/backend.rs
+++ b/core/src/services/azblob/backend.rs
@@ -516,7 +516,7 @@ impl Accessor for AzblobBackend {
am.set_scheme(Scheme::Azblob)
.set_root(&self.core.root)
.set_name(&self.core.container)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/azdfs/backend.rs
b/core/src/services/azdfs/backend.rs
index 0d567266b..3882f4fe2 100644
--- a/core/src/services/azdfs/backend.rs
+++ b/core/src/services/azdfs/backend.rs
@@ -240,7 +240,7 @@ impl Accessor for AzdfsBackend {
am.set_scheme(Scheme::Azdfs)
.set_root(&self.core.root)
.set_name(&self.core.filesystem)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/cos/backend.rs b/core/src/services/cos/backend.rs
index 66aa65449..3360d9dd5 100644
--- a/core/src/services/cos/backend.rs
+++ b/core/src/services/cos/backend.rs
@@ -259,7 +259,7 @@ impl Accessor for CosBackend {
am.set_scheme(Scheme::Cos)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/dropbox/backend.rs
b/core/src/services/dropbox/backend.rs
index e24f0b36f..ebb468728 100644
--- a/core/src/services/dropbox/backend.rs
+++ b/core/src/services/dropbox/backend.rs
@@ -58,7 +58,7 @@ impl Accessor for DropboxBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Dropbox)
.set_root(&self.core.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/fs/backend.rs b/core/src/services/fs/backend.rs
index b8fac1813..f94f59d96 100644
--- a/core/src/services/fs/backend.rs
+++ b/core/src/services/fs/backend.rs
@@ -254,7 +254,7 @@ impl Accessor for FsBackend {
let mut am = AccessorInfo::default();
am.set_scheme(Scheme::Fs)
.set_root(&self.root.to_string_lossy())
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/ftp/backend.rs b/core/src/services/ftp/backend.rs
index 0c9d27557..ed960c5f7 100644
--- a/core/src/services/ftp/backend.rs
+++ b/core/src/services/ftp/backend.rs
@@ -273,7 +273,7 @@ impl Accessor for FtpBackend {
let mut am = AccessorInfo::default();
am.set_scheme(Scheme::Ftp)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/gcs/backend.rs b/core/src/services/gcs/backend.rs
index d7d7941b3..b4a844ea6 100644
--- a/core/src/services/gcs/backend.rs
+++ b/core/src/services/gcs/backend.rs
@@ -346,7 +346,7 @@ impl Accessor for GcsBackend {
am.set_scheme(Scheme::Gcs)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
create_dir: true,
stat: true,
diff --git a/core/src/services/gdrive/backend.rs
b/core/src/services/gdrive/backend.rs
index 7886b7daa..da6f950b3 100644
--- a/core/src/services/gdrive/backend.rs
+++ b/core/src/services/gdrive/backend.rs
@@ -49,7 +49,7 @@ impl Accessor for GdriveBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Gdrive)
.set_root(&self.core.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/ghac/backend.rs
b/core/src/services/ghac/backend.rs
index 396b14000..8adce69a3 100644
--- a/core/src/services/ghac/backend.rs
+++ b/core/src/services/ghac/backend.rs
@@ -303,7 +303,7 @@ impl Accessor for GhacBackend {
am.set_scheme(Scheme::Ghac)
.set_root(&self.root)
.set_name(&self.version)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/hdfs/backend.rs
b/core/src/services/hdfs/backend.rs
index 0888589c7..a6078c89e 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -171,7 +171,7 @@ impl Accessor for HdfsBackend {
let mut am = AccessorInfo::default();
am.set_scheme(Scheme::Hdfs)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/http/backend.rs
b/core/src/services/http/backend.rs
index 76b98fb73..37048748f 100644
--- a/core/src/services/http/backend.rs
+++ b/core/src/services/http/backend.rs
@@ -214,7 +214,7 @@ impl Accessor for HttpBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Http)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/ipfs/backend.rs
b/core/src/services/ipfs/backend.rs
index 7fd9b4eab..ebf1e327e 100644
--- a/core/src/services/ipfs/backend.rs
+++ b/core/src/services/ipfs/backend.rs
@@ -172,7 +172,7 @@ impl Accessor for IpfsBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Ipfs)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/ipmfs/backend.rs
b/core/src/services/ipmfs/backend.rs
index 95163f2c2..aebab57e5 100644
--- a/core/src/services/ipmfs/backend.rs
+++ b/core/src/services/ipmfs/backend.rs
@@ -74,7 +74,7 @@ impl Accessor for IpmfsBackend {
let mut am = AccessorInfo::default();
am.set_scheme(Scheme::Ipmfs)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/obs/backend.rs b/core/src/services/obs/backend.rs
index 123f5b818..6600ddd9b 100644
--- a/core/src/services/obs/backend.rs
+++ b/core/src/services/obs/backend.rs
@@ -266,7 +266,7 @@ impl Accessor for ObsBackend {
am.set_scheme(Scheme::Obs)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/onedrive/backend.rs
b/core/src/services/onedrive/backend.rs
index 5590a7a37..09ef04765 100644
--- a/core/src/services/onedrive/backend.rs
+++ b/core/src/services/onedrive/backend.rs
@@ -73,7 +73,7 @@ impl Accessor for OnedriveBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Onedrive)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
read: true,
write: true,
stat: true,
diff --git a/core/src/services/oss/backend.rs b/core/src/services/oss/backend.rs
index 1aef92b77..ee1131ee1 100644
--- a/core/src/services/oss/backend.rs
+++ b/core/src/services/oss/backend.rs
@@ -391,7 +391,7 @@ impl Accessor for OssBackend {
am.set_scheme(Scheme::Oss)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs
index a773da3a8..600fac3f3 100644
--- a/core/src/services/s3/backend.rs
+++ b/core/src/services/s3/backend.rs
@@ -902,7 +902,7 @@ impl Accessor for S3Backend {
am.set_scheme(Scheme::S3)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/sftp/backend.rs
b/core/src/services/sftp/backend.rs
index c27e0f1e4..931edcb23 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -235,7 +235,7 @@ impl Accessor for SftpBackend {
let mut am = AccessorInfo::default();
am.set_root(self.root.as_str())
.set_scheme(Scheme::Sftp)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/supabase/backend.rs
b/core/src/services/supabase/backend.rs
index 2ace7385c..89996fa8c 100644
--- a/core/src/services/supabase/backend.rs
+++ b/core/src/services/supabase/backend.rs
@@ -169,7 +169,7 @@ impl Accessor for SupabaseBackend {
am.set_scheme(Scheme::Supabase)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/vercel_artifacts/backend.rs
b/core/src/services/vercel_artifacts/backend.rs
index 34501827b..70cd9048b 100644
--- a/core/src/services/vercel_artifacts/backend.rs
+++ b/core/src/services/vercel_artifacts/backend.rs
@@ -54,7 +54,7 @@ impl Accessor for VercelArtifactsBackend {
fn info(&self) -> AccessorInfo {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::VercelArtifacts)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/wasabi/backend.rs
b/core/src/services/wasabi/backend.rs
index a08381616..f2aedab2a 100644
--- a/core/src/services/wasabi/backend.rs
+++ b/core/src/services/wasabi/backend.rs
@@ -680,7 +680,7 @@ impl Accessor for WasabiBackend {
am.set_scheme(Scheme::Wasabi)
.set_root(&self.core.root)
.set_name(&self.core.bucket)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: true,
diff --git a/core/src/services/webdav/backend.rs
b/core/src/services/webdav/backend.rs
index bdf8e9ce4..0010cd2c5 100644
--- a/core/src/services/webdav/backend.rs
+++ b/core/src/services/webdav/backend.rs
@@ -230,7 +230,7 @@ impl Accessor for WebdavBackend {
let mut ma = AccessorInfo::default();
ma.set_scheme(Scheme::Webdav)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,
diff --git a/core/src/services/webhdfs/backend.rs
b/core/src/services/webhdfs/backend.rs
index 4167e1aee..db8e0490a 100644
--- a/core/src/services/webhdfs/backend.rs
+++ b/core/src/services/webhdfs/backend.rs
@@ -408,7 +408,7 @@ impl Accessor for WebhdfsBackend {
let mut am = AccessorInfo::default();
am.set_scheme(Scheme::Webhdfs)
.set_root(&self.root)
- .set_full_capability(Capability {
+ .set_native_capability(Capability {
stat: true,
read: true,