diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3d02e9d94740..ce48f5b4bf50 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
* feat(core): Add `content_encoding` to `MetaData` by @Frank-III in https://github.com/apache/opendal/pull/5400
* feat:(core): add `content encoding` to `Opwrite` by @Frank-III in https://github.com/apache/opendal/pull/5390
* feat(services/obs): support user defined metadata by @Frank-III in https://github.com/apache/opendal/pull/5405
+* feat: impl configurable OperatorOutputStream maxBytes by @tisonkun in https://github.com/apache/opendal/pull/5422
### Changed
* refactor (bindings/zig): Improvements by @kassane in https://github.com/apache/opendal/pull/5247
* refactor: Remove metakey concept by @Xuanwo in https://github.com/apache/opendal/pull/5319
@@ -52,12 +53,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
* fix: oli clippy and CI file by @waynexia in https://github.com/apache/opendal/pull/5389
* fix(services/obs): support huawei.com by @FayeSpica in https://github.com/apache/opendal/pull/5399
* fix(integrations/cloud_filter): use explicit `stat` instead of `Entry::metadata` in `fetch_placeholders` by @ho-229 in https://github.com/apache/opendal/pull/5416
+* fix(core): S3 multipart uploads does not set file metadata by @catcatmu in https://github.com/apache/opendal/pull/5430
+* fix: always contains path label if configured by @waynexia in https://github.com/apache/opendal/pull/5433
### Docs
* docs: Enable force_orphan to reduce clone size by @Xuanwo in https://github.com/apache/opendal/pull/5289
* docs: Establish VISION for "One Layer, All Storage" by @Xuanwo in https://github.com/apache/opendal/pull/5309
* docs: Polish docs for write with if not exists by @Xuanwo in https://github.com/apache/opendal/pull/5320
* docs(core): add the description of version parameter for operator by @meteorgan in https://github.com/apache/opendal/pull/5144
* docs(core): Add upgrade to v0.51 by @Xuanwo in https://github.com/apache/opendal/pull/5406
+* docs: Update release.md by @tisonkun in https://github.com/apache/opendal/pull/5431
### CI
* ci: Remove the token of codspeed by @Xuanwo in https://github.com/apache/opendal/pull/5283
* ci: Allow force push for `gh-pages` by @Xuanwo in https://github.com/apache/opendal/pull/5290
diff --git a/bindings/haskell/opendal.cabal b/bindings/haskell/opendal.cabal
index f6d0abc666b5..5270379a19a0 100644
--- a/bindings/haskell/opendal.cabal
+++ b/bindings/haskell/opendal.cabal
@@ -17,7 +17,7 @@ cabal-version: 3.0
-- under the License.
name: opendal
-version: 0.44.11.0
+version: 0.44.14.0
license: Apache-2.0
synopsis: Apache OpenDALâ„¢ Haskell Binding
description:
diff --git a/bindings/java/pom.xml b/bindings/java/pom.xml
index 55b6f3dacaaf..a9e719a36344 100644
--- a/bindings/java/pom.xml
+++ b/bindings/java/pom.xml
@@ -32,7 +32,7 @@
org.apache.opendal
opendal
- 0.47.4
+ 0.47.6
Apache OpenDALâ„¢
diff --git a/bindings/nodejs/npm/darwin-arm64/package.json b/bindings/nodejs/npm/darwin-arm64/package.json
index 3621846d29d9..9b3623e26553 100644
--- a/bindings/nodejs/npm/darwin-arm64/package.json
+++ b/bindings/nodejs/npm/darwin-arm64/package.json
@@ -1,7 +1,7 @@
{
"name": "@opendal/lib-darwin-arm64",
"repository": "git@github.com/apache/opendal.git",
- "version": "0.47.7",
+ "version": "0.47.8",
"os": [
"darwin"
],
diff --git a/bindings/nodejs/npm/darwin-x64/package.json b/bindings/nodejs/npm/darwin-x64/package.json
index e1fefdb75ab9..d7af8a5043df 100644
--- a/bindings/nodejs/npm/darwin-x64/package.json
+++ b/bindings/nodejs/npm/darwin-x64/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-darwin-x64",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"darwin"
diff --git a/bindings/nodejs/npm/linux-arm64-gnu/package.json b/bindings/nodejs/npm/linux-arm64-gnu/package.json
index 72ebc4d56844..288893e28a26 100644
--- a/bindings/nodejs/npm/linux-arm64-gnu/package.json
+++ b/bindings/nodejs/npm/linux-arm64-gnu/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-linux-arm64-gnu",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"linux"
diff --git a/bindings/nodejs/npm/linux-arm64-musl/package.json b/bindings/nodejs/npm/linux-arm64-musl/package.json
index e68dca0fc2dc..77aef5c5a6c6 100644
--- a/bindings/nodejs/npm/linux-arm64-musl/package.json
+++ b/bindings/nodejs/npm/linux-arm64-musl/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-linux-arm64-musl",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"linux"
diff --git a/bindings/nodejs/npm/linux-x64-gnu/package.json b/bindings/nodejs/npm/linux-x64-gnu/package.json
index bb6ae4610504..2013c68c2cda 100644
--- a/bindings/nodejs/npm/linux-x64-gnu/package.json
+++ b/bindings/nodejs/npm/linux-x64-gnu/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-linux-x64-gnu",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"linux"
diff --git a/bindings/nodejs/npm/win32-arm64-msvc/package.json b/bindings/nodejs/npm/win32-arm64-msvc/package.json
index a54c4b8c72b0..e161a8442952 100644
--- a/bindings/nodejs/npm/win32-arm64-msvc/package.json
+++ b/bindings/nodejs/npm/win32-arm64-msvc/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-win32-arm64-msvc",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"win32"
diff --git a/bindings/nodejs/npm/win32-x64-msvc/package.json b/bindings/nodejs/npm/win32-x64-msvc/package.json
index a2ccd2f1722f..dca3da72517d 100644
--- a/bindings/nodejs/npm/win32-x64-msvc/package.json
+++ b/bindings/nodejs/npm/win32-x64-msvc/package.json
@@ -1,6 +1,6 @@
{
"name": "@opendal/lib-win32-x64-msvc",
- "version": "0.47.7",
+ "version": "0.47.8",
"repository": "git@github.com/apache/opendal.git",
"os": [
"win32"
diff --git a/bindings/nodejs/package.json b/bindings/nodejs/package.json
index 8b1c692b109f..aa3f22a6d48f 100644
--- a/bindings/nodejs/package.json
+++ b/bindings/nodejs/package.json
@@ -1,7 +1,7 @@
{
"name": "opendal",
"author": "Apache OpenDAL ",
- "version": "0.47.7",
+ "version": "0.47.8",
"license": "Apache-2.0",
"main": "index.js",
"types": "index.d.ts",
diff --git a/core/src/layers/observe/mod.rs b/core/src/layers/observe/mod.rs
index dcbe059a43ef..5465bcd0a3c4 100644
--- a/core/src/layers/observe/mod.rs
+++ b/core/src/layers/observe/mod.rs
@@ -51,11 +51,11 @@ pub use metrics::METRIC_OPERATION_ERRORS_TOTAL;
/// - level > 0: the path label will be the path split by "/" and get the last n level,
/// if n=1 and input path is "abc/def/ghi", and then we'll use "abc/" as the path label.
pub fn path_label_value(path: &str, level: usize) -> Option<&str> {
- if path.is_empty() {
- return None;
- }
-
if level > 0 {
+ if path.is_empty() {
+ return Some("");
+ }
+
let label_value = path
.char_indices()
.filter(|&(_, c)| c == '/')
@@ -80,6 +80,7 @@ mod tests {
assert_eq!(path_label_value(path, 3), Some("abc/def/ghi"));
assert_eq!(path_label_value(path, usize::MAX), Some("abc/def/ghi"));
- assert_eq!(path_label_value("", 1), None);
+ assert_eq!(path_label_value("", 0), None);
+ assert_eq!(path_label_value("", 1), Some(""));
}
}
diff --git a/core/src/services/s3/core.rs b/core/src/services/s3/core.rs
index 19bdbfdf7209..2f9a359c770d 100644
--- a/core/src/services/s3/core.rs
+++ b/core/src/services/s3/core.rs
@@ -666,6 +666,13 @@ impl S3Core {
req = req.header(HeaderName::from_static(constants::X_AMZ_STORAGE_CLASS), v);
}
+ // Set user metadata headers.
+ if let Some(user_metadata) = args.user_metadata() {
+ for (key, value) in user_metadata {
+ req = req.header(format!("{X_AMZ_META_PREFIX}{key}"), value)
+ }
+ }
+
// Set SSE headers.
let req = self.insert_sse_headers(req, true);
diff --git a/website/community/release/release.md b/website/community/release/release.md
index 7e113d94bb2c..9be8cc7eb589 100644
--- a/website/community/release/release.md
+++ b/website/community/release/release.md
@@ -139,11 +139,10 @@ For example:
Bump all components' version in the project to the new opendal version.
Please note that this version is the exact version of the release, not the release candidate version.
-- rust core: bump version in `Cargo.toml`
-- cpp binding: bump version in `bindings/cpp/CMakeLists.txt`
-- haskell binding: bump version and update the `tag` field of `source-repository this` in `bindings/haskell/opendal.cabal`
-- java binding: bump version in `bindings/java/pom.xml`
-- node.js binding: bump version in `bindings/nodejs/package.json` and `bindings/nodejs/npm/*/package.json`
+- Rust core: Bump version in `Cargo.toml`
+- Haskell binding: Bump version and update the `tag` field of `source-repository this` in `bindings/haskell/opendal.cabal`
+- Java binding: Bump version in `bindings/java/pom.xml`
+- Node.js binding: Bump version in `bindings/nodejs/package.json` and `bindings/nodejs/npm/*/package.json`
### Update docs