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 5ae1a765a feat(services/cos): Added user metadata support for cos 
service (#5510)
5ae1a765a is described below

commit 5ae1a765ad21ec18b70d955f71e23e05d44afbf5
Author: Geetansh Juneja <[email protected]>
AuthorDate: Mon Jan 13 16:18:59 2025 +0530

    feat(services/cos): Added user metadata support for cos service (#5510)
    
    Co-authored-by: Xuanwo <[email protected]>
---
 core/src/services/cos/backend.rs |  7 +++++++
 core/src/services/cos/core.rs    | 14 ++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/core/src/services/cos/backend.rs b/core/src/services/cos/backend.rs
index 4bbb658c8..b0542a33a 100644
--- a/core/src/services/cos/backend.rs
+++ b/core/src/services/cos/backend.rs
@@ -268,6 +268,7 @@ impl Access for CosBackend {
                 stat_has_last_modified: true,
                 stat_has_content_disposition: true,
                 stat_has_version: true,
+                stat_has_user_metadata: true,
 
                 read: true,
 
@@ -296,6 +297,7 @@ impl Access for CosBackend {
                 } else {
                     Some(usize::MAX)
                 },
+                write_with_user_metadata: true,
 
                 delete: true,
                 delete_with_version: self.core.enable_versioning,
@@ -330,6 +332,11 @@ impl Access for CosBackend {
                 let headers = resp.headers();
                 let mut meta = parse_into_metadata(path, headers)?;
 
+                let user_meta = parse_prefixed_headers(headers, "x-cos-meta-");
+                if !user_meta.is_empty() {
+                    meta.with_user_metadata(user_meta);
+                }
+
                 if let Some(v) = parse_header_to_str(headers, 
"x-cos-version-id")? {
                     meta.set_version(v);
                 }
diff --git a/core/src/services/cos/core.rs b/core/src/services/cos/core.rs
index 020b57bab..cb5808637 100644
--- a/core/src/services/cos/core.rs
+++ b/core/src/services/cos/core.rs
@@ -202,6 +202,13 @@ impl CosCore {
             req = req.header("x-cos-forbid-overwrite", "true")
         }
 
+        // Set user metadata headers.
+        if let Some(user_metadata) = args.user_metadata() {
+            for (key, value) in user_metadata {
+                req = req.header(format!("x-cos-meta-{key}"), value)
+            }
+        }
+
         let req = req.body(body).map_err(new_request_build_error)?;
 
         Ok(req)
@@ -387,6 +394,13 @@ impl CosCore {
             req = req.header(CACHE_CONTROL, cache_control)
         }
 
+        // Set user metadata headers.
+        if let Some(user_metadata) = args.user_metadata() {
+            for (key, value) in user_metadata {
+                req = req.header(format!("x-cos-meta-{key}"), value)
+            }
+        }
+
         let mut req = 
req.body(Buffer::new()).map_err(new_request_build_error)?;
 
         self.sign(&mut req).await?;

Reply via email to