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/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new a2db7f2f1 feat(core): add new cap shared (#5328)
a2db7f2f1 is described below

commit a2db7f2f1bb4f8148a2ed31ecf1038988b103483
Author: TennyZhuang <[email protected]>
AuthorDate: Sat Nov 16 23:09:38 2024 +0800

    feat(core): add new cap shared (#5328)
---
 bindings/c/include/opendal.h                                   | 4 ++++
 bindings/c/src/operator_info.rs                                | 4 ++++
 bindings/go/operator_info.go                                   | 4 ++++
 bindings/go/types.go                                           | 2 ++
 bindings/java/src/lib.rs                                       | 3 ++-
 bindings/java/src/main/java/org/apache/opendal/Capability.java | 9 ++++++++-
 bindings/nodejs/generated.d.ts                                 | 2 ++
 bindings/nodejs/src/capability.rs                              | 6 ++++++
 bindings/python/python/opendal/__init__.pyi                    | 1 +
 bindings/python/src/capability.rs                              | 4 ++++
 bindings/ruby/src/capability.rs                                | 3 ++-
 core/src/raw/adapters/typed_kv/api.rs                          | 5 +++++
 core/src/raw/adapters/typed_kv/backend.rs                      | 4 ++++
 core/src/services/aliyun_drive/backend.rs                      | 2 +-
 core/src/services/alluxio/backend.rs                           | 2 ++
 core/src/services/atomicserver/backend.rs                      | 1 +
 core/src/services/azblob/backend.rs                            | 2 ++
 core/src/services/azdls/backend.rs                             | 2 ++
 core/src/services/azfile/backend.rs                            | 2 ++
 core/src/services/b2/backend.rs                                | 2 ++
 core/src/services/cacache/backend.rs                           | 1 +
 core/src/services/chainsafe/backend.rs                         | 2 ++
 core/src/services/cloudflare_kv/backend.rs                     | 1 +
 core/src/services/compfs/backend.rs                            | 2 ++
 core/src/services/cos/backend.rs                               | 2 ++
 core/src/services/d1/backend.rs                                | 1 +
 core/src/services/dashmap/backend.rs                           | 1 +
 core/src/services/dbfs/backend.rs                              | 2 ++
 core/src/services/dropbox/backend.rs                           | 2 ++
 core/src/services/etcd/backend.rs                              | 1 +
 core/src/services/foundationdb/backend.rs                      | 1 +
 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                            | 3 +++
 core/src/services/ghac/backend.rs                              | 2 ++
 core/src/services/github/backend.rs                            | 2 ++
 core/src/services/gridfs/backend.rs                            | 1 +
 core/src/services/hdfs/backend.rs                              | 2 ++
 core/src/services/hdfs_native/backend.rs                       | 2 ++
 core/src/services/http/backend.rs                              | 2 ++
 core/src/services/huggingface/backend.rs                       | 2 ++
 core/src/services/icloud/backend.rs                            | 1 +
 core/src/services/ipfs/backend.rs                              | 2 ++
 core/src/services/ipmfs/backend.rs                             | 2 ++
 core/src/services/koofr/backend.rs                             | 2 ++
 core/src/services/lakefs/backend.rs                            | 1 +
 core/src/services/libsql/backend.rs                            | 1 +
 core/src/services/memcached/backend.rs                         | 1 +
 core/src/services/memory/backend.rs                            | 1 +
 core/src/services/mini_moka/backend.rs                         | 1 +
 core/src/services/moka/backend.rs                              | 1 +
 core/src/services/mongodb/backend.rs                           | 1 +
 core/src/services/monoiofs/backend.rs                          | 1 +
 core/src/services/mysql/backend.rs                             | 1 +
 core/src/services/nebula_graph/backend.rs                      | 1 +
 core/src/services/obs/backend.rs                               | 2 ++
 core/src/services/onedrive/backend.rs                          | 1 +
 core/src/services/oss/backend.rs                               | 2 ++
 core/src/services/pcloud/backend.rs                            | 2 ++
 core/src/services/persy/backend.rs                             | 1 +
 core/src/services/postgresql/backend.rs                        | 1 +
 core/src/services/redb/backend.rs                              | 1 +
 core/src/services/redis/backend.rs                             | 1 +
 core/src/services/rocksdb/backend.rs                           | 1 +
 core/src/services/s3/backend.rs                                | 2 ++
 core/src/services/seafile/backend.rs                           | 2 ++
 core/src/services/sftp/backend.rs                              | 2 ++
 core/src/services/sled/backend.rs                              | 1 +
 core/src/services/sqlite/backend.rs                            | 1 +
 core/src/services/supabase/backend.rs                          | 2 ++
 core/src/services/surrealdb/backend.rs                         | 1 +
 core/src/services/swift/backend.rs                             | 2 ++
 core/src/services/tikv/backend.rs                              | 1 +
 core/src/services/upyun/backend.rs                             | 2 ++
 core/src/services/vercel_artifacts/backend.rs                  | 2 ++
 core/src/services/vercel_blob/backend.rs                       | 2 ++
 core/src/services/webdav/backend.rs                            | 2 ++
 core/src/services/webhdfs/backend.rs                           | 2 ++
 core/src/services/yandex_disk/backend.rs                       | 2 ++
 core/src/types/capability.rs                                   | 6 ++++++
 81 files changed, 159 insertions(+), 4 deletions(-)

diff --git a/bindings/c/include/opendal.h b/bindings/c/include/opendal.h
index 76f84f933..3560737dd 100644
--- a/bindings/c/include/opendal.h
+++ b/bindings/c/include/opendal.h
@@ -585,6 +585,10 @@ typedef struct opendal_capability {
    * If it is not set, this will be zero
    */
   uintptr_t batch_max_operations;
+  /**
+   * If operator supports shared.
+   */
+  bool shared;
   /**
    * If operator supports blocking.
    */
diff --git a/bindings/c/src/operator_info.rs b/bindings/c/src/operator_info.rs
index db96e99fe..e08becbc6 100644
--- a/bindings/c/src/operator_info.rs
+++ b/bindings/c/src/operator_info.rs
@@ -135,6 +135,9 @@ pub struct opendal_capability {
     /// If it is not set, this will be zero
     pub batch_max_operations: usize,
 
+    /// If operator supports shared.
+    pub shared: bool,
+
     /// If operator supports blocking.
     pub blocking: bool,
 }
@@ -263,6 +266,7 @@ impl From<core::Capability> for opendal_capability {
             batch: value.batch,
             batch_delete: value.batch_delete,
             batch_max_operations: value.batch_max_operations.unwrap_or(0),
+            shared: value.shared,
             blocking: value.blocking,
         }
     }
diff --git a/bindings/go/operator_info.go b/bindings/go/operator_info.go
index d9264b6c8..70f5c1e55 100644
--- a/bindings/go/operator_info.go
+++ b/bindings/go/operator_info.go
@@ -240,6 +240,10 @@ func (c *Capability) BatchMaxOperations() uint {
        return c.inner.batchMaxOperations
 }
 
+func (c *Capability) Shared() bool {
+       return c.inner.shared == 1
+}
+
 func (c *Capability) Blocking() bool {
        return c.inner.blocking == 1
 }
diff --git a/bindings/go/types.go b/bindings/go/types.go
index d5bd92495..79a4f3fa8 100644
--- a/bindings/go/types.go
+++ b/bindings/go/types.go
@@ -163,6 +163,7 @@ var (
                        &ffi.TypeUint8,   // batch
                        &ffi.TypeUint8,   // batch_delete
                        &ffi.TypePointer, // batch_max_operations
+                       &ffi.TypeUint8,   // shared
                        &ffi.TypeUint8,   // blocking
                        nil,
                }[0],
@@ -204,6 +205,7 @@ type opendalCapability struct {
        batch                              uint8
        batchDelete                        uint8
        batchMaxOperations                 uint
+       shared                             uint8
        blocking                           uint8
 }
 
diff --git a/bindings/java/src/lib.rs b/bindings/java/src/lib.rs
index a9fef7e65..d19da1fb2 100644
--- a/bindings/java/src/lib.rs
+++ b/bindings/java/src/lib.rs
@@ -94,7 +94,7 @@ fn make_operator_info<'a>(env: &mut JNIEnv<'a>, info: 
OperatorInfo) -> Result<JO
 fn make_capability<'a>(env: &mut JNIEnv<'a>, cap: Capability) -> 
Result<JObject<'a>> {
     let capability = env.new_object(
         "org/apache/opendal/Capability",
-        "(ZZZZZZZZZZZZZZZJJZZZZZZZZZZZZZZJZ)V",
+        "(ZZZZZZZZZZZZZZZJJZZZZZZZZZZZZZZJZZ)V",
         &[
             JValue::Bool(cap.stat as jboolean),
             JValue::Bool(cap.stat_with_if_match as jboolean),
@@ -128,6 +128,7 @@ fn make_capability<'a>(env: &mut JNIEnv<'a>, cap: 
Capability) -> Result<JObject<
             JValue::Bool(cap.batch as jboolean),
             JValue::Bool(cap.batch_delete as jboolean),
             JValue::Long(convert::usize_to_jlong(cap.batch_max_operations)),
+            JValue::Bool(cap.shared as jboolean),
             JValue::Bool(cap.blocking as jboolean),
         ],
     )?;
diff --git a/bindings/java/src/main/java/org/apache/opendal/Capability.java 
b/bindings/java/src/main/java/org/apache/opendal/Capability.java
index 30404d636..9a7487ff8 100644
--- a/bindings/java/src/main/java/org/apache/opendal/Capability.java
+++ b/bindings/java/src/main/java/org/apache/opendal/Capability.java
@@ -185,6 +185,11 @@ public class Capability {
      */
     public final long batchMaxOperations;
 
+    /**
+     * If operator supports shared.
+     */
+    public final boolean shared;
+
     /**
      * If operator supports blocking.
      */
@@ -223,7 +228,8 @@ public class Capability {
             boolean batch,
             boolean batchDelete,
             long batchMaxOperations,
-            boolean blocking) {
+            boolean blocking,
+            boolean shared) {
         this.stat = stat;
         this.statWithIfMatch = statWithIfMatch;
         this.statWithIfNoneMatch = statWithIfNoneMatch;
@@ -257,5 +263,6 @@ public class Capability {
         this.batchDelete = batchDelete;
         this.batchMaxOperations = batchMaxOperations;
         this.blocking = blocking;
+        this.shared = shared;
     }
 }
diff --git a/bindings/nodejs/generated.d.ts b/bindings/nodejs/generated.d.ts
index 7b5ade3c8..fb95a8b58 100644
--- a/bindings/nodejs/generated.d.ts
+++ b/bindings/nodejs/generated.d.ts
@@ -192,6 +192,8 @@ export class Capability {
   get batchDelete(): boolean
   /** The max operations that operator supports in batch. */
   get batchMaxOperations(): bigint | null
+  /** If operator supports shared. */
+  get shared(): boolean
   /** If operator supports blocking. */
   get blocking(): boolean
 }
diff --git a/bindings/nodejs/src/capability.rs 
b/bindings/nodejs/src/capability.rs
index 66fcb5c64..f057b1779 100644
--- a/bindings/nodejs/src/capability.rs
+++ b/bindings/nodejs/src/capability.rs
@@ -245,6 +245,12 @@ impl Capability {
         self.0.batch_max_operations
     }
 
+    /// If operator supports shared.
+    #[napi(getter)]
+    pub fn shared(&self) -> bool {
+        self.0.shared
+    }
+
     /// If operator supports blocking.
     #[napi(getter)]
     pub fn blocking(&self) -> bool {
diff --git a/bindings/python/python/opendal/__init__.pyi 
b/bindings/python/python/opendal/__init__.pyi
index 2a2ae246b..418d8841a 100644
--- a/bindings/python/python/opendal/__init__.pyi
+++ b/bindings/python/python/opendal/__init__.pyi
@@ -204,4 +204,5 @@ class Capability:
     batch_delete: bool
     batch_max_operations: Optional[int]
 
+    shared: bool
     blocking: bool
diff --git a/bindings/python/src/capability.rs 
b/bindings/python/src/capability.rs
index 6cc76e153..ac424ba69 100644
--- a/bindings/python/src/capability.rs
+++ b/bindings/python/src/capability.rs
@@ -105,6 +105,9 @@ pub struct Capability {
     /// The max operations that operator supports in batch.
     pub batch_max_operations: Option<usize>,
 
+    /// If operator supports shared.
+    pub shared: bool,
+
     /// If operator supports blocking.
     pub blocking: bool,
 }
@@ -147,6 +150,7 @@ impl Capability {
             batch: capability.batch,
             batch_delete: capability.batch_delete,
             batch_max_operations: capability.batch_max_operations,
+            shared: capability.shared,
             blocking: capability.blocking,
         }
     }
diff --git a/bindings/ruby/src/capability.rs b/bindings/ruby/src/capability.rs
index a2402dceb..32166bc0c 100644
--- a/bindings/ruby/src/capability.rs
+++ b/bindings/ruby/src/capability.rs
@@ -97,7 +97,8 @@ define_accessors!(Capability, {
     batch: bool,
     batch_delete: bool,
     batch_max_operations: Option<usize>,
-    blocking: bool
+    shared: bool,
+    blocking: bool,
 });
 
 // includes class into the Ruby module
diff --git a/core/src/raw/adapters/typed_kv/api.rs 
b/core/src/raw/adapters/typed_kv/api.rs
index f1e4a95fc..a3d049084 100644
--- a/core/src/raw/adapters/typed_kv/api.rs
+++ b/core/src/raw/adapters/typed_kv/api.rs
@@ -130,6 +130,8 @@ pub struct Capability {
     pub delete: bool,
     /// If typed_kv operator supports scan natively.
     pub scan: bool,
+    /// If typed_kv operator supports shared access.
+    pub shared: bool,
 }
 
 impl Debug for Capability {
@@ -148,6 +150,9 @@ impl Debug for Capability {
         if self.scan {
             s.push("Scan");
         }
+        if self.shared {
+            s.push("Shared");
+        }
 
         write!(f, "{{ {} }}", s.join(" | "))
     }
diff --git a/core/src/raw/adapters/typed_kv/backend.rs 
b/core/src/raw/adapters/typed_kv/backend.rs
index 59d10a47e..fca684772 100644
--- a/core/src/raw/adapters/typed_kv/backend.rs
+++ b/core/src/raw/adapters/typed_kv/backend.rs
@@ -87,6 +87,10 @@ impl<S: Adapter> Access for Backend<S> {
             cap.list_with_recursive = true;
         }
 
+        if kv_cap.shared {
+            cap.shared = true;
+        }
+
         cap.blocking = true;
 
         am.set_native_capability(cap);
diff --git a/core/src/services/aliyun_drive/backend.rs 
b/core/src/services/aliyun_drive/backend.rs
index 95cf1b754..c9103cc14 100644
--- a/core/src/services/aliyun_drive/backend.rs
+++ b/core/src/services/aliyun_drive/backend.rs
@@ -230,7 +230,7 @@ impl Access for AliyunDriveBackend {
                 rename: true,
                 list: true,
                 list_with_limit: true,
-
+                shared: true,
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/alluxio/backend.rs 
b/core/src/services/alluxio/backend.rs
index a5882c291..bea21a364 100644
--- a/core/src/services/alluxio/backend.rs
+++ b/core/src/services/alluxio/backend.rs
@@ -169,6 +169,8 @@ impl Access for AlluxioBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/atomicserver/backend.rs 
b/core/src/services/atomicserver/backend.rs
index 546e6d259..5683cfea0 100644
--- a/core/src/services/atomicserver/backend.rs
+++ b/core/src/services/atomicserver/backend.rs
@@ -361,6 +361,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 delete: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/azblob/backend.rs 
b/core/src/services/azblob/backend.rs
index 820cfcec0..e2ab452dd 100644
--- a/core/src/services/azblob/backend.rs
+++ b/core/src/services/azblob/backend.rs
@@ -537,6 +537,8 @@ impl Access for AzblobBackend {
                 batch_delete: true,
                 batch_max_operations: Some(self.core.batch_max_operations),
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/azdls/backend.rs 
b/core/src/services/azdls/backend.rs
index 534c7c190..8710077e3 100644
--- a/core/src/services/azdls/backend.rs
+++ b/core/src/services/azdls/backend.rs
@@ -242,6 +242,8 @@ impl Access for AzdlsBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/azfile/backend.rs 
b/core/src/services/azfile/backend.rs
index 31ca40308..1f68439b5 100644
--- a/core/src/services/azfile/backend.rs
+++ b/core/src/services/azfile/backend.rs
@@ -253,6 +253,8 @@ impl Access for AzfileBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/b2/backend.rs b/core/src/services/b2/backend.rs
index 2e613a81f..b785af8bd 100644
--- a/core/src/services/b2/backend.rs
+++ b/core/src/services/b2/backend.rs
@@ -259,6 +259,8 @@ impl Access for B2Backend {
                 presign_write: true,
                 presign_stat: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/cacache/backend.rs 
b/core/src/services/cacache/backend.rs
index 1ef193a68..71d4c3f83 100644
--- a/core/src/services/cacache/backend.rs
+++ b/core/src/services/cacache/backend.rs
@@ -96,6 +96,7 @@ impl kv::Adapter for Adapter {
                 write: true,
                 delete: true,
                 blocking: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/chainsafe/backend.rs 
b/core/src/services/chainsafe/backend.rs
index 64832841f..e5373f4c3 100644
--- a/core/src/services/chainsafe/backend.rs
+++ b/core/src/services/chainsafe/backend.rs
@@ -187,6 +187,8 @@ impl Access for ChainsafeBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/cloudflare_kv/backend.rs 
b/core/src/services/cloudflare_kv/backend.rs
index c2be1ddd1..5d4a65a4b 100644
--- a/core/src/services/cloudflare_kv/backend.rs
+++ b/core/src/services/cloudflare_kv/backend.rs
@@ -191,6 +191,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 list: true,
+                shared: true,
 
                 ..Default::default()
             },
diff --git a/core/src/services/compfs/backend.rs 
b/core/src/services/compfs/backend.rs
index f24fd54e5..9c43a82d4 100644
--- a/core/src/services/compfs/backend.rs
+++ b/core/src/services/compfs/backend.rs
@@ -130,6 +130,8 @@ impl Access for CompfsBackend {
                 copy: true,
                 rename: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/cos/backend.rs b/core/src/services/cos/backend.rs
index df297d196..1e27d7f6d 100644
--- a/core/src/services/cos/backend.rs
+++ b/core/src/services/cos/backend.rs
@@ -284,6 +284,8 @@ impl Access for CosBackend {
                 presign_read: true,
                 presign_write: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/d1/backend.rs b/core/src/services/d1/backend.rs
index 643617431..a86d47ab8 100644
--- a/core/src/services/d1/backend.rs
+++ b/core/src/services/d1/backend.rs
@@ -270,6 +270,7 @@ impl kv::Adapter for Adapter {
                 // Cloudflare D1 supports 1MB as max in write_total.
                 // refer to 
https://developers.cloudflare.com/d1/platform/limits/
                 write_total_max_size: Some(1000 * 1000),
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/dashmap/backend.rs 
b/core/src/services/dashmap/backend.rs
index 1f4ea285e..09889b4a5 100644
--- a/core/src/services/dashmap/backend.rs
+++ b/core/src/services/dashmap/backend.rs
@@ -94,6 +94,7 @@ impl typed_kv::Adapter for Adapter {
                 set: true,
                 scan: true,
                 delete: true,
+                shared: false,
             },
         )
     }
diff --git a/core/src/services/dbfs/backend.rs 
b/core/src/services/dbfs/backend.rs
index ee2cc2ac0..f3ae33993 100644
--- a/core/src/services/dbfs/backend.rs
+++ b/core/src/services/dbfs/backend.rs
@@ -163,6 +163,8 @@ impl Access for DbfsBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/dropbox/backend.rs 
b/core/src/services/dropbox/backend.rs
index 9cc96b0dd..2544ac3ac 100644
--- a/core/src/services/dropbox/backend.rs
+++ b/core/src/services/dropbox/backend.rs
@@ -68,6 +68,8 @@ impl Access for DropboxBackend {
                 batch: true,
                 batch_delete: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         ma.into()
diff --git a/core/src/services/etcd/backend.rs 
b/core/src/services/etcd/backend.rs
index 4a6e94f13..836590809 100644
--- a/core/src/services/etcd/backend.rs
+++ b/core/src/services/etcd/backend.rs
@@ -282,6 +282,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 list: true,
+                shared: true,
 
                 ..Default::default()
             },
diff --git a/core/src/services/foundationdb/backend.rs 
b/core/src/services/foundationdb/backend.rs
index b9c70946b..c72099cb1 100644
--- a/core/src/services/foundationdb/backend.rs
+++ b/core/src/services/foundationdb/backend.rs
@@ -120,6 +120,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 delete: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/fs/backend.rs b/core/src/services/fs/backend.rs
index 2572361e3..ae3ad891d 100644
--- a/core/src/services/fs/backend.rs
+++ b/core/src/services/fs/backend.rs
@@ -191,6 +191,8 @@ impl Access for FsBackend {
                 rename: true,
                 blocking: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/ftp/backend.rs b/core/src/services/ftp/backend.rs
index 144ba9aff..85bb39468 100644
--- a/core/src/services/ftp/backend.rs
+++ b/core/src/services/ftp/backend.rs
@@ -281,6 +281,8 @@ impl Access for FtpBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/gcs/backend.rs b/core/src/services/gcs/backend.rs
index 5c35abf66..a2c7ed910 100644
--- a/core/src/services/gcs/backend.rs
+++ b/core/src/services/gcs/backend.rs
@@ -395,6 +395,8 @@ impl Access for GcsBackend {
                 presign_read: true,
                 presign_write: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/gdrive/backend.rs 
b/core/src/services/gdrive/backend.rs
index 09c51fd2c..9809d741f 100644
--- a/core/src/services/gdrive/backend.rs
+++ b/core/src/services/gdrive/backend.rs
@@ -64,6 +64,9 @@ impl Access for GdriveBackend {
                 delete: true,
                 rename: true,
                 copy: true,
+
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/ghac/backend.rs 
b/core/src/services/ghac/backend.rs
index 1cd2bafd1..7035d6835 100644
--- a/core/src/services/ghac/backend.rs
+++ b/core/src/services/ghac/backend.rs
@@ -248,6 +248,8 @@ impl Access for GhacBackend {
                 write_can_multi: true,
                 delete: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/github/backend.rs 
b/core/src/services/github/backend.rs
index 23dfee60b..867879010 100644
--- a/core/src/services/github/backend.rs
+++ b/core/src/services/github/backend.rs
@@ -199,6 +199,8 @@ impl Access for GithubBackend {
                 list: true,
                 list_with_recursive: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/gridfs/backend.rs 
b/core/src/services/gridfs/backend.rs
index f2bb23415..ad31fcc3c 100644
--- a/core/src/services/gridfs/backend.rs
+++ b/core/src/services/gridfs/backend.rs
@@ -221,6 +221,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/hdfs/backend.rs 
b/core/src/services/hdfs/backend.rs
index 4d87d24a1..403c78957 100644
--- a/core/src/services/hdfs/backend.rs
+++ b/core/src/services/hdfs/backend.rs
@@ -230,6 +230,8 @@ impl Access for HdfsBackend {
                 rename: true,
                 blocking: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/hdfs_native/backend.rs 
b/core/src/services/hdfs_native/backend.rs
index 31ae8ed70..131d93f81 100644
--- a/core/src/services/hdfs_native/backend.rs
+++ b/core/src/services/hdfs_native/backend.rs
@@ -161,6 +161,8 @@ impl Access for HdfsNativeBackend {
                 rename: true,
                 blocking: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/http/backend.rs 
b/core/src/services/http/backend.rs
index ff739014f..e6b913d93 100644
--- a/core/src/services/http/backend.rs
+++ b/core/src/services/http/backend.rs
@@ -218,6 +218,8 @@ impl Access for HttpBackend {
                 presign_read: !self.has_authorization(),
                 presign_stat: !self.has_authorization(),
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/huggingface/backend.rs 
b/core/src/services/huggingface/backend.rs
index 2a893b4bc..f70bdd655 100644
--- a/core/src/services/huggingface/backend.rs
+++ b/core/src/services/huggingface/backend.rs
@@ -209,6 +209,8 @@ impl Access for HuggingfaceBackend {
                 list: true,
                 list_with_recursive: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/icloud/backend.rs 
b/core/src/services/icloud/backend.rs
index e0531fca3..270870360 100644
--- a/core/src/services/icloud/backend.rs
+++ b/core/src/services/icloud/backend.rs
@@ -239,6 +239,7 @@ impl Access for IcloudBackend {
             .set_native_capability(Capability {
                 stat: true,
                 read: true,
+                shared: true,
                 ..Default::default()
             });
         ma.into()
diff --git a/core/src/services/ipfs/backend.rs 
b/core/src/services/ipfs/backend.rs
index a63afce88..5ef62a1e4 100644
--- a/core/src/services/ipfs/backend.rs
+++ b/core/src/services/ipfs/backend.rs
@@ -179,6 +179,8 @@ impl Access for IpfsBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/ipmfs/backend.rs 
b/core/src/services/ipmfs/backend.rs
index 86cd6f949..97f6a0789 100644
--- a/core/src/services/ipmfs/backend.rs
+++ b/core/src/services/ipmfs/backend.rs
@@ -82,6 +82,8 @@ impl Access for IpmfsBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/koofr/backend.rs 
b/core/src/services/koofr/backend.rs
index 59016ee71..948226c96 100644
--- a/core/src/services/koofr/backend.rs
+++ b/core/src/services/koofr/backend.rs
@@ -224,6 +224,8 @@ impl Access for KoofrBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/lakefs/backend.rs 
b/core/src/services/lakefs/backend.rs
index dc913e252..d3086b378 100644
--- a/core/src/services/lakefs/backend.rs
+++ b/core/src/services/lakefs/backend.rs
@@ -211,6 +211,7 @@ impl Access for LakefsBackend {
                 write: true,
                 delete: true,
                 copy: true,
+                shared: true,
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/libsql/backend.rs 
b/core/src/services/libsql/backend.rs
index 233580c78..1867d3bbb 100644
--- a/core/src/services/libsql/backend.rs
+++ b/core/src/services/libsql/backend.rs
@@ -315,6 +315,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 delete: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/memcached/backend.rs 
b/core/src/services/memcached/backend.rs
index 2b772f713..5ddfa4b9c 100644
--- a/core/src/services/memcached/backend.rs
+++ b/core/src/services/memcached/backend.rs
@@ -206,6 +206,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
 
                 ..Default::default()
             },
diff --git a/core/src/services/memory/backend.rs 
b/core/src/services/memory/backend.rs
index e9b423889..a6475ab8a 100644
--- a/core/src/services/memory/backend.rs
+++ b/core/src/services/memory/backend.rs
@@ -84,6 +84,7 @@ impl typed_kv::Adapter for Adapter {
                 set: true,
                 delete: true,
                 scan: true,
+                shared: false,
             },
         )
     }
diff --git a/core/src/services/mini_moka/backend.rs 
b/core/src/services/mini_moka/backend.rs
index 1fed62b31..23587e1e3 100644
--- a/core/src/services/mini_moka/backend.rs
+++ b/core/src/services/mini_moka/backend.rs
@@ -143,6 +143,7 @@ impl typed_kv::Adapter for Adapter {
                 set: true,
                 delete: true,
                 scan: true,
+                shared: false,
             },
         )
     }
diff --git a/core/src/services/moka/backend.rs 
b/core/src/services/moka/backend.rs
index 4a2e34e5f..608bc902b 100644
--- a/core/src/services/moka/backend.rs
+++ b/core/src/services/moka/backend.rs
@@ -166,6 +166,7 @@ impl typed_kv::Adapter for Adapter {
                 set: true,
                 delete: true,
                 scan: true,
+                shared: false,
             },
         )
     }
diff --git a/core/src/services/mongodb/backend.rs 
b/core/src/services/mongodb/backend.rs
index ed5f26a41..a3edd88df 100644
--- a/core/src/services/mongodb/backend.rs
+++ b/core/src/services/mongodb/backend.rs
@@ -235,6 +235,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/monoiofs/backend.rs 
b/core/src/services/monoiofs/backend.rs
index 76f6880dc..8fc139386 100644
--- a/core/src/services/monoiofs/backend.rs
+++ b/core/src/services/monoiofs/backend.rs
@@ -121,6 +121,7 @@ impl Access for MonoiofsBackend {
                 rename: true,
                 create_dir: true,
                 copy: true,
+                shared: true,
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/mysql/backend.rs 
b/core/src/services/mysql/backend.rs
index ada294d26..ad4ad4374 100644
--- a/core/src/services/mysql/backend.rs
+++ b/core/src/services/mysql/backend.rs
@@ -198,6 +198,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 delete: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/nebula_graph/backend.rs 
b/core/src/services/nebula_graph/backend.rs
index 4d70e3210..37275cf41 100644
--- a/core/src/services/nebula_graph/backend.rs
+++ b/core/src/services/nebula_graph/backend.rs
@@ -283,6 +283,7 @@ impl kv::Adapter for Adapter {
                 write_can_empty: true,
                 delete: true,
                 list: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/obs/backend.rs b/core/src/services/obs/backend.rs
index 3c4383134..82a41a192 100644
--- a/core/src/services/obs/backend.rs
+++ b/core/src/services/obs/backend.rs
@@ -291,6 +291,8 @@ impl Access for ObsBackend {
                 presign_read: true,
                 presign_write: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/onedrive/backend.rs 
b/core/src/services/onedrive/backend.rs
index a89df094d..ca2b34c9a 100644
--- a/core/src/services/onedrive/backend.rs
+++ b/core/src/services/onedrive/backend.rs
@@ -80,6 +80,7 @@ impl Access for OnedriveBackend {
                 delete: true,
                 create_dir: true,
                 list: true,
+                shared: true,
                 ..Default::default()
             });
 
diff --git a/core/src/services/oss/backend.rs b/core/src/services/oss/backend.rs
index 1ed309e4e..47018795f 100644
--- a/core/src/services/oss/backend.rs
+++ b/core/src/services/oss/backend.rs
@@ -478,6 +478,8 @@ impl Access for OssBackend {
                 batch: true,
                 batch_max_operations: Some(self.core.batch_max_operations),
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/pcloud/backend.rs 
b/core/src/services/pcloud/backend.rs
index a4ea74c3d..07078f8d2 100644
--- a/core/src/services/pcloud/backend.rs
+++ b/core/src/services/pcloud/backend.rs
@@ -213,6 +213,8 @@ impl Access for PcloudBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/persy/backend.rs 
b/core/src/services/persy/backend.rs
index c9234f187..8ff8bad67 100644
--- a/core/src/services/persy/backend.rs
+++ b/core/src/services/persy/backend.rs
@@ -163,6 +163,7 @@ impl kv::Adapter for Adapter {
                 write: true,
                 delete: true,
                 blocking: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/postgresql/backend.rs 
b/core/src/services/postgresql/backend.rs
index 72993c3af..ab4570909 100644
--- a/core/src/services/postgresql/backend.rs
+++ b/core/src/services/postgresql/backend.rs
@@ -196,6 +196,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/redb/backend.rs 
b/core/src/services/redb/backend.rs
index b0722f824..b8951ac18 100644
--- a/core/src/services/redb/backend.rs
+++ b/core/src/services/redb/backend.rs
@@ -121,6 +121,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 blocking: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/redis/backend.rs 
b/core/src/services/redis/backend.rs
index 19afe34c7..c9eb20426 100644
--- a/core/src/services/redis/backend.rs
+++ b/core/src/services/redis/backend.rs
@@ -336,6 +336,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
 
                 ..Default::default()
             },
diff --git a/core/src/services/rocksdb/backend.rs 
b/core/src/services/rocksdb/backend.rs
index 8dc3c6d2a..3092bddef 100644
--- a/core/src/services/rocksdb/backend.rs
+++ b/core/src/services/rocksdb/backend.rs
@@ -119,6 +119,7 @@ impl kv::Adapter for Adapter {
                 write: true,
                 list: true,
                 blocking: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/s3/backend.rs b/core/src/services/s3/backend.rs
index 5b523fc72..65dca0f44 100644
--- a/core/src/services/s3/backend.rs
+++ b/core/src/services/s3/backend.rs
@@ -959,6 +959,8 @@ impl Access for S3Backend {
                 batch: true,
                 batch_max_operations: Some(self.core.batch_max_operations),
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/seafile/backend.rs 
b/core/src/services/seafile/backend.rs
index fe7806913..77581a4d7 100644
--- a/core/src/services/seafile/backend.rs
+++ b/core/src/services/seafile/backend.rs
@@ -232,6 +232,8 @@ impl Access for SeafileBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/sftp/backend.rs 
b/core/src/services/sftp/backend.rs
index 8e3c103f7..552845ba3 100644
--- a/core/src/services/sftp/backend.rs
+++ b/core/src/services/sftp/backend.rs
@@ -344,6 +344,8 @@ impl Access for SftpBackend {
                 copy: self.copyable,
                 rename: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/sled/backend.rs 
b/core/src/services/sled/backend.rs
index 64c4c3675..308859945 100644
--- a/core/src/services/sled/backend.rs
+++ b/core/src/services/sled/backend.rs
@@ -148,6 +148,7 @@ impl kv::Adapter for Adapter {
                 write: true,
                 list: true,
                 blocking: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/sqlite/backend.rs 
b/core/src/services/sqlite/backend.rs
index 6f9c1aa15..a6bfeb35d 100644
--- a/core/src/services/sqlite/backend.rs
+++ b/core/src/services/sqlite/backend.rs
@@ -233,6 +233,7 @@ impl kv::Adapter for Adapter {
                 write: true,
                 delete: true,
                 list: true,
+                shared: false,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/supabase/backend.rs 
b/core/src/services/supabase/backend.rs
index c6923217d..623ec87b4 100644
--- a/core/src/services/supabase/backend.rs
+++ b/core/src/services/supabase/backend.rs
@@ -166,6 +166,8 @@ impl Access for SupabaseBackend {
                 write: true,
                 delete: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/surrealdb/backend.rs 
b/core/src/services/surrealdb/backend.rs
index d7de77252..3026a9c4e 100644
--- a/core/src/services/surrealdb/backend.rs
+++ b/core/src/services/surrealdb/backend.rs
@@ -292,6 +292,7 @@ impl kv::Adapter for Adapter {
             Capability {
                 read: true,
                 write: true,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/swift/backend.rs 
b/core/src/services/swift/backend.rs
index a436eff22..adadbf46c 100644
--- a/core/src/services/swift/backend.rs
+++ b/core/src/services/swift/backend.rs
@@ -196,6 +196,8 @@ impl Access for SwiftBackend {
                 list: true,
                 list_with_recursive: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/tikv/backend.rs 
b/core/src/services/tikv/backend.rs
index 5d37b526d..e6f343943 100644
--- a/core/src/services/tikv/backend.rs
+++ b/core/src/services/tikv/backend.rs
@@ -195,6 +195,7 @@ impl kv::Adapter for Adapter {
                 read: true,
                 write: true,
                 blocking: false,
+                shared: true,
                 ..Default::default()
             },
         )
diff --git a/core/src/services/upyun/backend.rs 
b/core/src/services/upyun/backend.rs
index ae8e23765..36598d53f 100644
--- a/core/src/services/upyun/backend.rs
+++ b/core/src/services/upyun/backend.rs
@@ -223,6 +223,8 @@ impl Access for UpyunBackend {
                 list: true,
                 list_with_limit: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/vercel_artifacts/backend.rs 
b/core/src/services/vercel_artifacts/backend.rs
index c56555988..923f9d3ba 100644
--- a/core/src/services/vercel_artifacts/backend.rs
+++ b/core/src/services/vercel_artifacts/backend.rs
@@ -61,6 +61,8 @@ impl Access for VercelArtifactsBackend {
 
                 write: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/vercel_blob/backend.rs 
b/core/src/services/vercel_blob/backend.rs
index 0742e8463..635e7533b 100644
--- a/core/src/services/vercel_blob/backend.rs
+++ b/core/src/services/vercel_blob/backend.rs
@@ -171,6 +171,8 @@ impl Access for VercelBlobBackend {
                 list: true,
                 list_with_limit: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/webdav/backend.rs 
b/core/src/services/webdav/backend.rs
index 7bf50888d..6fd4b8567 100644
--- a/core/src/services/webdav/backend.rs
+++ b/core/src/services/webdav/backend.rs
@@ -231,6 +231,8 @@ impl Access for WebdavBackend {
                 list: true,
                 // We already support recursive list but some details still 
need to polish.
                 // list_with_recursive: true,
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/services/webhdfs/backend.rs 
b/core/src/services/webhdfs/backend.rs
index 660abc266..4149a6986 100644
--- a/core/src/services/webhdfs/backend.rs
+++ b/core/src/services/webhdfs/backend.rs
@@ -539,6 +539,8 @@ impl Access for WebhdfsBackend {
 
                 list: true,
 
+                shared: true,
+
                 ..Default::default()
             });
         am.into()
diff --git a/core/src/services/yandex_disk/backend.rs 
b/core/src/services/yandex_disk/backend.rs
index 230066c59..7dbd42b46 100644
--- a/core/src/services/yandex_disk/backend.rs
+++ b/core/src/services/yandex_disk/backend.rs
@@ -173,6 +173,8 @@ impl Access for YandexDiskBackend {
                 list: true,
                 list_with_limit: true,
 
+                shared: true,
+
                 ..Default::default()
             });
 
diff --git a/core/src/types/capability.rs b/core/src/types/capability.rs
index b30cbf880..b3a9e3af9 100644
--- a/core/src/types/capability.rs
+++ b/core/src/types/capability.rs
@@ -205,6 +205,9 @@ pub struct Capability {
     /// Maximum number of operations supported in a single batch.
     pub batch_max_operations: Option<usize>,
 
+    /// Indicate if the operator supports shared access.
+    pub shared: bool,
+
     /// Indicates if blocking operations are supported.
     pub blocking: bool,
 }
@@ -224,6 +227,9 @@ impl Debug for Capability {
         if self.presign {
             f.write_str("| Presign")?;
         }
+        if self.shared {
+            f.write_str("| Shared")?;
+        }
         if self.blocking {
             f.write_str("| Blocking")?;
         }


Reply via email to