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?;