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,

Reply via email to