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")),
}
}