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 27d5677d4 feat(services/azdls): Implement write returns metadata 
(#6368)
27d5677d4 is described below

commit 27d5677d4526519313cbce00cd28f8fbcc099642
Author: Jonathan Chen <[email protected]>
AuthorDate: Sat Jul 5 23:48:55 2025 -0400

    feat(services/azdls): Implement write returns metadata (#6368)
---
 core/src/services/azdls/core.rs   |  9 ++++++++-
 core/src/services/azdls/writer.rs | 30 +++++++++++++++++++++++++++---
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/core/src/services/azdls/core.rs b/core/src/services/azdls/core.rs
index f13a64b2d..1f6d0cae1 100644
--- a/core/src/services/azdls/core.rs
+++ b/core/src/services/azdls/core.rs
@@ -39,6 +39,7 @@ use crate::*;
 
 const X_MS_RENAME_SOURCE: &str = "x-ms-rename-source";
 const X_MS_VERSION: &str = "x-ms-version";
+pub const X_MS_VERSION_ID: &str = "x-ms-version-id";
 pub const DIRECTORY: &str = "directory";
 pub const FILE: &str = "file";
 
@@ -272,7 +273,13 @@ impl AzdlsCore {
             return Err(parse_error(resp));
         }
 
-        let meta = parse_into_metadata(path, resp.headers())?;
+        let headers = resp.headers();
+        let mut meta = parse_into_metadata(path, headers)?;
+
+        if let Some(version_id) = parse_header_to_str(headers, 
X_MS_VERSION_ID)? {
+            meta.set_version(version_id);
+        }
+
         let resource = resp
             .headers()
             .get("x-ms-resource-type")
diff --git a/core/src/services/azdls/writer.rs 
b/core/src/services/azdls/writer.rs
index 45f68e2fd..d2d8ea0af 100644
--- a/core/src/services/azdls/writer.rs
+++ b/core/src/services/azdls/writer.rs
@@ -21,6 +21,7 @@ use http::StatusCode;
 
 use super::core::AzdlsCore;
 use super::core::FILE;
+use super::core::X_MS_VERSION_ID;
 use super::error::parse_error;
 use crate::raw::*;
 use crate::*;
@@ -38,6 +39,24 @@ impl AzdlsWriter {
     pub fn new(core: Arc<AzdlsCore>, op: OpWrite, path: String) -> Self {
         AzdlsWriter { core, op, path }
     }
+
+    fn parse_metadata(headers: &http::HeaderMap) -> Result<Metadata> {
+        let mut metadata = Metadata::default();
+
+        if let Some(last_modified) = parse_last_modified(headers)? {
+            metadata.set_last_modified(last_modified);
+        }
+        let etag = parse_etag(headers)?;
+        if let Some(etag) = etag {
+            metadata.set_etag(etag);
+        }
+        let version_id = parse_header_to_str(headers, X_MS_VERSION_ID)?;
+        if let Some(version_id) = version_id {
+            metadata.set_version(version_id);
+        }
+
+        Ok(metadata)
+    }
 }
 
 impl oio::OneShotWrite for AzdlsWriter {
@@ -82,10 +101,10 @@ impl oio::AppendWrite for AzdlsWriter {
     async fn append(&self, offset: u64, size: u64, body: Buffer) -> 
Result<Metadata> {
         if offset == 0 {
             let resp = self.core.azdls_create(&self.path, FILE, 
&self.op).await?;
-
+            let meta = AzdlsWriter::parse_metadata(resp.headers())?;
             let status = resp.status();
             match status {
-                StatusCode::CREATED | StatusCode::OK => {}
+                StatusCode::CREATED | StatusCode::OK => return Ok(meta),
                 _ => {
                     return 
Err(parse_error(resp).with_operation("Backend::azdls_create_request"));
                 }
@@ -97,9 +116,14 @@ impl oio::AppendWrite for AzdlsWriter {
             .azdls_update(&self.path, Some(size), offset, body)
             .await?;
 
+        let mut meta = AzdlsWriter::parse_metadata(resp.headers())?;
+        let md5 = parse_content_md5(resp.headers())?;
+        if let Some(md5) = md5 {
+            meta.set_content_md5(md5);
+        }
         let status = resp.status();
         match status {
-            StatusCode::OK | StatusCode::ACCEPTED => Ok(Metadata::default()),
+            StatusCode::OK | StatusCode::ACCEPTED => Ok(meta),
             _ => 
Err(parse_error(resp).with_operation("Backend::azdls_update_request")),
         }
     }

Reply via email to