版本发布 8
<!-- Release notes generated using configuration in .github/release.yml at v0.54.1 --> ## What's Changed ### Added * feat: Conditional reader for cos by @pmupkin in https://github.com/apache/opendal/pull/6424 * feat: Add project layout for openval by @Xuanwo in https://github.com/apache/opendal/pull/6427 * feat: Add if-not-exists support for copy with azblob as example by @Xuanwo in https://github.com/apache/opendal/pull/6447 * feat(bindings/cpp): enhance Metadata API with comprehensive feature a… by @JackDrogon in https://github.com/apache/opendal/pull/6445 * feat: Add prefetch support for concurrent read by @Xuanwo in https://github.com/apache/opendal/pull/6449 * feat(bindings/cpp): adopt Google C++ Style Guide for API naming by @JackDrogon in https://github.com/apache/opendal/pull/6448 * feat(object_store): Implement copy, rename and return metadata after writing by @codephage2020 in https://github.com/apache/opendal/pull/6452 * feat(object_store): Implement copy_if_not_exists, put_multipart_opts and metadata in GetResult by @codephage2020 in https://github.com/apache/opendal/pull/6468 * chore(deps): add groups for nodejs by @asukaminato0721 in https://github.com/apache/opendal/pull/6469 * feat(bindings/ocaml): add more blocking api for ocaml by @asukaminato0721 in https://github.com/apache/opendal/pull/6238 * fix(bindings/cpp): Add capability to fix failed tests by @asukaminato0721 in https://github.com/apache/opendal/pull/6488 * feat(bindings/cpp): enable user-configurable features for storage services by @KinomotoMio in https://github.com/apache/opendal/pull/6503 * feat(services/oss): add support for security token for Aliyun OSS by @cavivie in https://github.com/apache/opendal/pull/6511 * feat(services/azblob): Add compatibility aliases for Apache Arrow object_store by @jackye1995 in https://github.com/apache/opendal/pull/6527 * feat(services/gcs): add configuration aliases for better Arrow object_store compatibility by @jackye1995 in https://github.com/apache/opendal/pull/6526 * feat(services/s3): add configuration aliases for better Arrow object_store compatibility by @jackye1995 in https://github.com/apache/opendal/pull/6524 * feat: allow using object_store as opendal's backend by @flaneur2020 in https://github.com/apache/opendal/pull/6283 * feat(services/opfs): Add `create_dir` support for OPFS by @crwen in https://github.com/apache/opendal/pull/6542 * feat(bindings/ruby): support file open options by @erickguan in https://github.com/apache/opendal/pull/6538 ### Changed * refactor(website): remove unused dependencies and update node engine requirement by @kingsword09 in https://github.com/apache/opendal/pull/6421 * refacrtor: Reduce usage of scheme inside raw by @Xuanwo in https://github.com/apache/opendal/pull/6457 * refactor: Migrate etcd service to implement Access directly by @kingsword09 in https://github.com/apache/opendal/pull/6420 ### Fixed * fix(bin/oli): Fix tests when TMPDIR is not /tmp by @XYenon in https://github.com/apache/opendal/pull/6429 * fix: patch futures buffer concurrent by @tisonkun in https://github.com/apache/opendal/pull/6442 * fix(services/oss): unnecessary header 'content-type' are included in the get_object request by @honsunrise in https://github.com/apache/opendal/pull/6455 * fix(services/moka): prevent the weigher from being overwritten by @koushiro in https://github.com/apache/opendal/pull/6498 * fix(services/azblob): Fix azblob base64 validation by @kenwoodjw in https://github.com/apache/opendal/pull/6500 * fix(bindings/nodejs): use value.prefetch instead of value.concurrent for prefetch option by @kingsword09 in https://github.com/apache/opendal/pull/6502 * fix(integrations/object_store): remove redundant into_iter() call by @KinomotoMio in https://github.com/apache/opendal/pull/6509 * fix(bindings/cpp): correct cxx_async namespace attribute by @kingsword09 in https://github.com/apache/opendal/pull/6514 * Fix: make cpp binding build robust by @devillove084 in https://github.com/apache/opendal/pull/6460 * fix: Do not trim trailing slash of name_node by @wForget in https://github.com/apache/opendal/pull/6556 ### Docs * docs(release): fix CI workflow links for bindings by @kingsword09 in https://github.com/apache/opendal/pull/6437 * docs: Update RFC-5444 Operator From Uri by @Xuanwo in https://github.com/apache/opendal/pull/6453 * docs(core): update docs of building a storage service by @crwen in https://github.com/apache/opendal/pull/6554 ### CI * ci: remove docker-compose version top-level elements by @kingsword09 in https://github.com/apache/opendal/pull/6436 * ci: Update ci_bindings_zig.yml by @tisonkun in https://github.com/apache/opendal/pull/6444 * ci: enable trust publishing for rust crates by @kingsword09 in https://github.com/apache/opendal/pull/6454 * ci(bindings/cpp): cpp test framework by @asukaminato0721 in https://github.com/apache/opendal/pull/6296 * ci: Use ubuntu-24.04-arm for java release to address glibc issues by @Xuanwo in https://github.com/apache/opendal/pull/6486 * ci: refactor nodejs ci workflow by @kingsword09 in https://github.com/apache/opendal/pull/6491 * ci: update workflow nodejs version and remove corepack by @kingsword09 in https://github.com/apache/opendal/pull/6495 * chore(ci): upgrade 1password/load-secrets-action v3 by @kingsword09 in https://github.com/apache/opendal/pull/6517 * chore: adjust CI workflow names for bindings by @erickguan in https://github.com/apache/opendal/pull/6540 * chore(ci): migrate etcd, memcached, redis, and redis-cluster images to new sources by @kingsword09 in https://github.com/apache/opendal/pull/6435 ### Chore * chore(deps): bump quick-xml from 0.37.5 to 0.38.0 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6416 * chore(deps): bump the http-serialization-utils group in /core with 6 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6414 * chore: Fix clippy for object_store by @Xuanwo in https://github.com/apache/opendal/pull/6422 * chore(deps): bump the others group across 1 directory with 17 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6432 * chore(website): upgrade prism-react-renderer to v2.4.1 by @kingsword09 in https://github.com/apache/opendal/pull/6433 * chore(deps): bump tokio from 1.46.1 to 1.47.0 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6466 * chore(deps): bump tokio from 1.46.1 to 1.47.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6464 * chore(deps): bump tokio from 1.46.1 to 1.47.0 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6463 * chore(deps): bump the others group in /core with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6478 * chore(deps): bump indicatif from 0.17.11 to 0.18.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6474 * chore(deps): bump the http-serialization-utils group in /core with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6476 * chore(deps): bump tokio from 1.46.1 to 1.47.1 in /core in the async-runtime group by @dependabot[bot] in https://github.com/apache/opendal/pull/6477 * chore(bindings/nodejs): upgrade deps napi-rs to 3.0 by @kingsword09 in https://github.com/apache/opendal/pull/6482 * chore: make clippy happy again by @kingsword09 in https://github.com/apache/opendal/pull/6493 * chore(bindings/nodejs): update generated code comments style due to napi-derive indentation fix by @kingsword09 in https://github.com/apache/opendal/pull/6501 * feat: expose APIs for ErrorStatus by @tisonkun in https://github.com/apache/opendal/pull/6513 * chore(layers/fastmetrics): upgrade fastmetrics dependency to v0.4 by @koushiro in https://github.com/apache/opendal/pull/6534 * chore(deps-dev): bump crates-llms-txt from 0.0.8 to 0.1.1 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6548 * chore(deps): bump logforth from 0.26.1 to 0.27.0 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6546 * chore(deps): bump tempfile from 3.20.0 to 3.21.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6544 * chore(deps): update datafusion requirement from 48.0.0 to 49.0.2 in /integrations/object_store by @dependabot[bot] in https://github.com/apache/opendal/pull/6545 * chore(deps): bump logforth from 0.26.1 to 0.27.0 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6547 * Bump version to 0.54.1 by @Xuanwo in https://github.com/apache/opendal/pull/6558 ## New Contributors * @pmupkin made their first contribution in https://github.com/apache/opendal/pull/6424 * @XYenon made their first contribution in https://github.com/apache/opendal/pull/6429 * @codephage2020 made their first contribution in https://github.com/apache/opendal/pull/6452 * @honsunrise made their first contribution in https://github.com/apache/opendal/pull/6455 * @kenwoodjw made their first contribution in https://github.com/apache/opendal/pull/6500 * @KinomotoMio made their first contribution in https://github.com/apache/opendal/pull/6503 * @cavivie made their first contribution in https://github.com/apache/opendal/pull/6511 * @devillove084 made their first contribution in https://github.com/apache/opendal/pull/6460 * @jackye1995 made their first contribution in https://github.com/apache/opendal/pull/6527 * @crwen made their first contribution in https://github.com/apache/opendal/pull/6542 * @wForget made their first contribution in https://github.com/apache/opendal/pull/6556 **Full Changelog**: https://github.com/apache/opendal/compare/v0.54.0...v0.54.1
# Upgrade Notes ## Rust Core Public API ### RFC-6189: Remove Native Blocking Support OpenDAL v0.54 implements [RFC-6189](https://opendal.apache.org/docs/rust/opendal/docs/rfcs/rfc_6189_remove_native_blocking/index.html), which removes all native blocking support in favor of using `block_on` from async runtimes. The following breaking changes have been made: - `blocking::Operator` can no longer be used within async contexts - Using blocking APIs now requires an async runtime - All `Blocking*` types have been moved to the `opendal::blocking` module To migrate: ```diff - use opendal::BlockingOperator; + use opendal::blocking::Operator; ``` ### RFC-6213: Options Based API OpenDAL v0.54 implements [RFC-6213](https://opendal.apache.org/docs/rust/opendal/docs/rfcs/rfc_6213_options_api/index.html), which introduces options-based APIs for more structured and extensible operation configuration. New APIs added: - `read_options(path, ReadOptions)` - `write_options(path, data, WriteOptions)` - `list_options(path, ListOptions)` - `stat_options(path, StatOptions)` - `delete_options(path, DeleteOptions)` Example usage: ```rust // Read with options let options = ReadOptions::new() .range(0..1024) .if_match("etag"); let data = op.read_options("path/to/file", options).await?; // Write with options let options = WriteOptions::new() .content_type("text/plain") .cache_control("max-age=3600"); op.write_options("path/to/file", data, options).await?; ``` ### Remove `stat_has_xxx` and `list_has_xxx` APIs All `stat_has_*` and `list_has_*` capability check APIs have been removed. Instead, check capabilities directly on the `Capability` struct: ```diff - if op.info().full_capability().stat_has_content_length() { + if op.info().full_capability().stat.content_length { // ... } ``` ### Fix `with_user_metadata` signature The signature of `with_user_metadata` has been changed. Please update your code accordingly if you use this method. ### Services removed due to lack of maintainer The following services have been removed due to lack of maintainers: - `atomicserver` - `icloud` - `nebula_graph` If you need these services, please consider maintaining them or use alternative services. ### HttpClientLayer replaces `update_http_client` The `Operator::update_http_client()` method has been replaced by `HttpClientLayer`: ```diff - op.update_http_client(client); + op = op.layer(HttpClientLayer::new(client)); ``` ### Expose `presign_xxx_options` API New options-based presign APIs have been exposed: ```rust let options = PresignOptions::new() .expire(Duration::from_secs(3600)); let url = op.presign_read_options("path/to/file", options).await?; ``` ## Rust Core Raw API ### Remove native blocking support All native blocking implementations have been removed from the raw API. Services and layers no longer need to implement blocking-specific methods. ## Bindings Java Breaking changes ### Removed services The following services have been removed: - **Chainsafe** service has been removed ([PR-5744](https://github.com/apache/opendal/pull/5744/)) - The service has been sunset. - **libsql** service has been removed ([PR-5616](https://github.com/apache/opendal/pull/5616/)) - Dead service removal. ### Batch operations removed [PR-5393](https://github.com/apache/opendal/pull/5393/) removes the batch concept from OpenDAL. All batch-related operations and capabilities have been removed. ### Capability changes - `write_multi_align_size` capability has been removed ([PR-5322](https://github.com/apache/opendal/pull/5322/)) - Added new `shared` capability ([PR-5328](https://github.com/apache/opendal/pull/5328/)) ### Options-based API New options classes have been introduced for structured operation configuration: - `ReadOptions` - for read operations - `WriteOptions` - for write operations - `ListOptions` - for list operations - `StatOptions` - for stat operations Example usage: ```java // Read with options ReadOptions options = ReadOptions.builder() .range(0, 1024) .ifMatch("etag") .build(); byte[] data = operator.read("path/to/file", options); // Write with options WriteOptions options = WriteOptions.builder() .contentType("text/plain") .cacheControl("max-age=3600") .build(); operator.write("path/to/file", data, options); ``` ## Bindings Python ### Breaking change: Native blocking API removed OpenDAL has removed the native blocking API in the core. The Python binding's blocking API now uses an async runtime internally. This is a transparent change and should not affect most users, but: - The blocking API now requires an async runtime to be available - Performance characteristics may be slightly different - All blocking operations are now implemented as async operations running in a tokio runtime ### Breaking change: Removed services The following services have been removed due to lack of maintainers and users: - `atomicserver` - This service is no longer supported - `icloud` - This service is no longer supported - `nebula_graph` - This service is no longer supported If you were using any of these services, you'll need to migrate to an alternative storage backend. ### Breaking change: Chainsafe service removed The Chainsafe service has been sunset and is no longer available. <!-- Release notes generated using configuration in .github/release.yml at v0.54.0 --> ## What's Changed ### Added * RFC-6213: Options API by @Xuanwo in https://github.com/apache/opendal/pull/6213 * feat(core): Expose xxx_options API by @Xuanwo in https://github.com/apache/opendal/pull/6215 * RFC-6209: Glob Support by @asukaminato0721 in https://github.com/apache/opendal/pull/6209 * feat(bindings/java): Add WriteOptions support for new options API by @geruh in https://github.com/apache/opendal/pull/6219 * feat(services/azdls): Support parsing Azure Storage configs from connection strings by @DerGut in https://github.com/apache/opendal/pull/6212 * feat(bindings/java): Add ListOptions support for new options API by @geruh in https://github.com/apache/opendal/pull/6246 * feat(bindings/python): Enhance Reader and Writer by @chitralverma in https://github.com/apache/opendal/pull/6086 * feat(bindings/java): Add StatOptions support for new options API by @geruh in https://github.com/apache/opendal/pull/6255 * feat(website): Auto-generate llms.txt and llms-full.txt by @kingsword09 in https://github.com/apache/opendal/pull/6247 * oli: support dropbox by @Kinchkun in https://github.com/apache/opendal/pull/6265 * feat(bindings/python): Enhance Stat, Lister, Metadata & Entry by @chitralverma in https://github.com/apache/opendal/pull/6232 * feat(layers): add fastmetrics layer by @koushiro in https://github.com/apache/opendal/pull/6269 * feat(bindings/haskell): add more api by @asukaminato0721 in https://github.com/apache/opendal/pull/6264 * feat(core): Expose presign_xxx_options API by @geruh in https://github.com/apache/opendal/pull/6273 * feat: Add HttpClientLayer to replace `Operator::update_http_client()` by @Xuanwo in https://github.com/apache/opendal/pull/6290 * feat(bin/oli): support oli edit by @asukaminato0721 in https://github.com/apache/opendal/pull/6229 * feat(bindings/cpp): cpp async op && reader, lister by @asukaminato0721 in https://github.com/apache/opendal/pull/6228 * feat(services/moka): expose more moka configurations by @koushiro in https://github.com/apache/opendal/pull/6285 * feat(bindings/nodejs): Add StatOptions support for new options API by @kingsword09 in https://github.com/apache/opendal/pull/6282 * feat: implement --tree option for oli ls subcommand by @waynexia in https://github.com/apache/opendal/pull/6311 * feat(bindings/nodejs): Add ReadOptions and ReaderOptions support for new options API by @kingsword09 in https://github.com/apache/opendal/pull/6312 * feat(bindings/nodejs): Add ListOptions support for new options API by @kingsword09 in https://github.com/apache/opendal/pull/6320 * feat(bindings/go): add benchmark by @yuchanns in https://github.com/apache/opendal/pull/6341 * feat(services/azdls): Implement write returns metadata by @jonathanc-n in https://github.com/apache/opendal/pull/6368 * feat(bindings/cpp): remove Boost dependency by @JackDrogon in https://github.com/apache/opendal/pull/6376 * feat(bindings/nodejs): Add DeleteOptions support for new options API by @kingsword09 in https://github.com/apache/opendal/pull/6349 * feat(bindings/nodejs): Add WriteOptions support for new options API by @kingsword09 in https://github.com/apache/opendal/pull/6322 * feat(services/vercel_blob): add delete operator by @kingsword09 in https://github.com/apache/opendal/pull/6396 ### Changed * refactor(core/types)!: fix `with_user_metadata` signature by @meteorgan in https://github.com/apache/opendal/pull/5960 * refactor(!): Remove services lack of maintainers and users by @Xuanwo in https://github.com/apache/opendal/pull/6263 * refactor(services/moka)!: replace `sync::Cache` with `future::Cache` by @koushiro in https://github.com/apache/opendal/pull/6270 * refactor(bindings/go): Restructure FFI system with type-safe wrapper by @yuchanns in https://github.com/apache/opendal/pull/6268 * refactor: Migrate redis from adapter::kv to Access instead by @Xuanwo in https://github.com/apache/opendal/pull/6291 * refactor: Migrate moka from adapter::typed_kv to Access instead by @Xuanwo in https://github.com/apache/opendal/pull/6300 * refactor: Migrate memory service to implment Access directly by @Xuanwo in https://github.com/apache/opendal/pull/6301 * refactor: Migrate services cacache to implement Access by @Xuanwo in https://github.com/apache/opendal/pull/6303 * refactor!: Remove stat_has_xxx and list_has_xxx by @Xuanwo in https://github.com/apache/opendal/pull/6313 * refactor(services/fs): extract implementation to core by @erickguan in https://github.com/apache/opendal/pull/6317 * refactor: Migrate mini_moka service to implement Access directly by @meteorgan in https://github.com/apache/opendal/pull/6316 * refactor: remove uuid dependency when creating a temp path by @erickguan in https://github.com/apache/opendal/pull/6324 * refactor(layers/logging): Don't trigger logigng in heavy IO path by @Xuanwo in https://github.com/apache/opendal/pull/6343 * refactor: Migrate dashmap service to implement Access directly by @meteorgan in https://github.com/apache/opendal/pull/6344 ### Fixed * fix: java bug in list with delete option test by @geruh in https://github.com/apache/opendal/pull/6257 * fix(nodejs): esmodule and commonjs support by @kingsword09 in https://github.com/apache/opendal/pull/6266 * fix(gcs): headers missing in XML multipart API and incorrect x-goog-acl header values in XML API by @wlinna in https://github.com/apache/opendal/pull/6275 * fix(bindings/nodejs): update nodejs and deno bench by @kingsword09 in https://github.com/apache/opendal/pull/6286 * fix(hdfs): fix infinite loop in write for HDFS failure by @oven-yang in https://github.com/apache/opendal/pull/6295 * fix(nodejs): test stat with version by @kingsword09 in https://github.com/apache/opendal/pull/6307 * fix(bindings/python): Fix Writer doesn't throw correct error code by @Xuanwo in https://github.com/apache/opendal/pull/6315 * fix(python): correctly calculate end bound using offset + size instead of size directly by @kingsword09 in https://github.com/apache/opendal/pull/6314 * fix(fs/ftp/hdfs): correct tmp_path generation for append operations by @kingsword09 in https://github.com/apache/opendal/pull/6327 * fix(dav-server): Fix create_dir to create nested directories by @sqlpxc in https://github.com/apache/opendal/pull/6321 * fix(service/fs): handle if_not_exists flag to raise ConditionNotMatch error by @kingsword09 in https://github.com/apache/opendal/pull/6326 * fix(services/fs): Avoid creating partial files by @Xuanwo in https://github.com/apache/opendal/pull/6336 * fix(bindings/nodejs): ListOptions test list with deleted by @kingsword09 in https://github.com/apache/opendal/pull/6335 * fix(bindings/go): ffi calls use after free by @yuchanns in https://github.com/apache/opendal/pull/6380 * fix(services/azdls): Fix append not handled correctly while offset==0 by @Xuanwo in https://github.com/apache/opendal/pull/6393 ### Docs * docs: Remove deprecated APIs and polish docs for public APIs by @Xuanwo in https://github.com/apache/opendal/pull/6220 * docs(services/hdfs_native): fix outdated capabilities and config option name by @kezhuw in https://github.com/apache/opendal/pull/6224 * docs: Add CLAUDE docs to make AI Agents happy by @Xuanwo in https://github.com/apache/opendal/pull/6299 * docs: Polish claude file after some experiments by @Xuanwo in https://github.com/apache/opendal/pull/6302 * docs: Add upgrade guide for opendal's 0.54 release by @Xuanwo in https://github.com/apache/opendal/pull/6382 ### CI * ci: Use expression syntax to avoid VS Code warnings. by @kingsword09 in https://github.com/apache/opendal/pull/6284 * ci: Disable failed CI until #6305 been fixed by @Xuanwo in https://github.com/apache/opendal/pull/6306 * chore(ci): use mlugg/setup-zig instead of archvied action by @assignUser in https://github.com/apache/opendal/pull/6310 * ci(bindings/go): simplify and improve Go bindings test infrastructure by @yuchanns in https://github.com/apache/opendal/pull/6293 * ci(services/compfs): add integrtation tests for compfs service by @meteorgan in https://github.com/apache/opendal/pull/6319 * chore(dependabot): update CI for dependabot PRs by @erickguan in https://github.com/apache/opendal/pull/6411 ### Chore * chore: add deepwiki badge into readme to enable auto-refresh by @koushiro in https://github.com/apache/opendal/pull/6200 * chore: upgrade opentelemetry to 0.30.0 by @tisonkun in https://github.com/apache/opendal/pull/6259 * chore: Update bb8 to version 0.9.0 by @cryptomilk in https://github.com/apache/opendal/pull/6127 * chore(deps): bump uuid from 1.16.0 to 1.17.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6245 * chore(bindings/go): update Go dependencies by @yuchanns in https://github.com/apache/opendal/pull/6280 * chore(deps): bump tokio from 1.45.0 to 1.45.1 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6240 * chore(metrics): add more docs about global instance of PrometheusLayer and FastmetricsLayer by @koushiro in https://github.com/apache/opendal/pull/6308 * chore: Add npm to dependabot by @shaonianche in https://github.com/apache/opendal/pull/6318 * chore(deps): bump astral-sh/setup-uv from 5 to 6 by @dependabot[bot] in https://github.com/apache/opendal/pull/6241 * chore(deps): update datafusion requirement from 47.0.0 to 48.0.0 in /integrations/object_store by @dependabot[bot] in https://github.com/apache/opendal/pull/6332 * chore(deps): bump @docusaurus/core from 3.6.1 to 3.8.1 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6334 * chore(deps): bump compio from 0.14.0 to 0.15.0 in /core by @dependabot[bot] in https://github.com/apache/opendal/pull/6331 * chore(deps): bump clap from 4.5.38 to 4.5.40 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6330 * chore(deps): bump dirs from 5.0.1 to 6.0.0 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6329 * chore: fix clippy warnings when using rust 1.88 by @koushiro in https://github.com/apache/opendal/pull/6339 * chore(dav-server): Add a test for creating nested directories by @sqlpxc in https://github.com/apache/opendal/pull/6338 * chore: bump msrv to v1.82.0 by @MrCroxx in https://github.com/apache/opendal/pull/6348 * chore(deps): bump crate-ci/typos from 1.31.1 to 1.34.0 by @dependabot[bot] in https://github.com/apache/opendal/pull/6351 * chore(deps): bump tokio from 1.45.0 to 1.45.1 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6353 * chore(deps): bump quick-xml from 0.36.2 to 0.37.5 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6350 * chore(deps): bump actions/checkout from 3 to 4 by @dependabot[bot] in https://github.com/apache/opendal/pull/6356 * chore(deps): bump semver from 7.6.3 to 7.7.2 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6352 * chore(deps): bump toml from 0.8.22 to 0.8.23 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6361 * chore(deps): bump mlugg/setup-zig from 2.0.1 to 2.0.3 by @dependabot[bot] in https://github.com/apache/opendal/pull/6359 * chore(deps): bump axios from 1.8.2 to 1.10.0 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6363 * chore(deps): bump tokio from 1.45.0 to 1.45.1 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6358 * chore(deps): bump logforth from 0.24.0 to 0.26.1 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6355 * chore(deps): bump the pyo3-dependencies group in /bindings/python with 2 updates by @dependabot[bot] in https://github.com/apache/opendal/pull/6360 * chore(deps): bump hdfs-native from 0.10.4 to 0.11.2 in /core by @dependabot[bot] in https://github.com/apache/opendal/pull/6362 * chore: update DEPENDENCIES and fater dependencies.py generate by @yihong0618 in https://github.com/apache/opendal/pull/6374 * chore(dependabot): update OpenDAL dependencies less frequently by @erickguan in https://github.com/apache/opendal/pull/6384 * chore(deps): bump tokio from 1.45.1 to 1.46.1 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6387 * chore(deps): bump tokio from 1.45.1 to 1.46.1 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6386 * chore(deps): bump logforth from 0.24.0 to 0.26.1 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6385 * chore(deps): bump clsx from 1.2.1 to 2.1.1 in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6388 * chore(deps): bump tokio from 1.45.0 to 1.46.1 in /core in the async-runtime group by @dependabot[bot] in https://github.com/apache/opendal/pull/6390 * chore(dependabot): exclude rand and getrandom crates by @erickguan in https://github.com/apache/opendal/pull/6397 * chore(github-actions): update 1password by @erickguan in https://github.com/apache/opendal/pull/6405 * chore(github-actions): revert 1password action update by @erickguan in https://github.com/apache/opendal/pull/6406 * chore(deps): bump nix from 0.29.0 to 0.30.1 in /bin/ofs by @dependabot[bot] in https://github.com/apache/opendal/pull/6399 * chore(deps): bump toml from 0.8.22 to 0.9.2 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6398 * chore(deps): bump toml from 0.8.23 to 0.9.2 in /bin/oli by @dependabot[bot] in https://github.com/apache/opendal/pull/6400 * chore(deps): bump react and react-dom in /website by @dependabot[bot] in https://github.com/apache/opendal/pull/6401 * chore(deps): bump tower from 0.4.13 to 0.5.2 in /bin/oay by @dependabot[bot] in https://github.com/apache/opendal/pull/6407 * chore: Disable openssh build to allow python release by @Xuanwo in https://github.com/apache/opendal/pull/6412 ## New Contributors * @kezhuw made their first contribution in https://github.com/apache/opendal/pull/6224 * @DerGut made their first contribution in https://github.com/apache/opendal/pull/6212 * @chitralverma made their first contribution in https://github.com/apache/opendal/pull/6086 * @Kinchkun made their first contribution in https://github.com/apache/opendal/pull/6265 * @oven-yang made their first contribution in https://github.com/apache/opendal/pull/6295 * @assignUser made their first contribution in https://github.com/apache/opendal/pull/6310 * @sqlpxc made their first contribution in https://github.com/apache/opendal/pull/6321 * @MrCroxx made their first contribution in https://github.com/apache/opendal/pull/6348 * @jonathanc-n made their first contribution in https://github.com/apache/opendal/pull/6368 **Full Changelog**: https://github.com/apache/opendal/compare/v0.53.3...v0.54.0
<!-- Release notes generated using configuration in .github/release.yml at v0.53.3 --> ## What's Changed ### Added * feat(java): add ReadOptions for read methods by @liamzwbao in https://github.com/apache/opendal/pull/6157 * feat(core): support sharing one redb database between different Operators by @TD-Sky in https://github.com/apache/opendal/pull/6173 * feat(bin/oli): support cp to dir by @asukaminato0721 in https://github.com/apache/opendal/pull/6140 * feat(bin/oli): support tee by @asukaminato0721 in https://github.com/apache/opendal/pull/6194 * feat: expose `Error::backtrace()` by @xxchan in https://github.com/apache/opendal/pull/6196 * feat(bindings/c)!: Make features configurable via CMakeLists by @asukaminato0721 in https://github.com/apache/opendal/pull/6143 * feat: ADLS Client Credential Authentication by @c-thiel in https://github.com/apache/opendal/pull/6205 ### Changed * refactor(bindings/java): deprecate append in favor of write with append=true by @kingsword09 in https://github.com/apache/opendal/pull/6169 * refactor(core): Put Backtrace in a box to reduce error size by @Xuanwo in https://github.com/apache/opendal/pull/6193 ### Fixed * fix(bindings/go): update dependencies by @JupiterRider in https://github.com/apache/opendal/pull/6175 * fix(integrations/object_store): fix double percent encoding by @Colerar in https://github.com/apache/opendal/pull/6166 * fix(services/fs): Make fs services work on our MSRV by @Xuanwo in https://github.com/apache/opendal/pull/6183 * fix(services/s3): Remove not needed check for batch delete by @Xuanwo in https://github.com/apache/opendal/pull/6206 ### Docs * fix: typo error in 0429_init_from_iter.md by @warjiang in https://github.com/apache/opendal/pull/6203 * doc: case-police Ocaml to OCaml by @yihong0618 in https://github.com/apache/opendal/pull/6204 ### CI * ci: uses taiki-e/install-action to replace cargo insatll by @xxchan in https://github.com/apache/opendal/pull/6168 * ci(bindings/node): Add contents permissions for nodejs release by @Xuanwo in https://github.com/apache/opendal/pull/6182 * ci(bindings/java): Enable zig build for java by @Xuanwo in https://github.com/apache/opendal/pull/6181 * ci: Fix behavior tests for go bindings by @Xuanwo in https://github.com/apache/opendal/pull/6199 ### Chore * Bump opendal to v0.53.3 (Round 1) by @Xuanwo in https://github.com/apache/opendal/pull/6186 * chore: remove useless labeler.yml by @koushiro in https://github.com/apache/opendal/pull/6192 ## New Contributors * @liamzwbao made their first contribution in https://github.com/apache/opendal/pull/6157 * @kingsword09 made their first contribution in https://github.com/apache/opendal/pull/6169 * @JupiterRider made their first contribution in https://github.com/apache/opendal/pull/6175 * @TD-Sky made their first contribution in https://github.com/apache/opendal/pull/6173 * @Colerar made their first contribution in https://github.com/apache/opendal/pull/6166 * @warjiang made their first contribution in https://github.com/apache/opendal/pull/6203 * @c-thiel made their first contribution in https://github.com/apache/opendal/pull/6205 **Full Changelog**: https://github.com/apache/opendal/compare/v0.53.2...v0.53.3
<!-- Release notes generated using configuration in .github/release.yml at v0.53.1 --> ## What's Changed ### Added * feat(services/gcs): implement write returns metadata by @meteorgan in https://github.com/apache/opendal/pull/5933 * feat(bindings/ruby): support layers by @erickguan in https://github.com/apache/opendal/pull/5874 * feat(gridfs): implement GridfsCore for GridFS service by @uruemu in https://github.com/apache/opendal/pull/5966 * feat(bindings/nodejs): add check in js by @asukaminato0721 in https://github.com/apache/opendal/pull/5996 * feat(core): Use Buffer as http_body::Body directly by @Xuanwo in https://github.com/apache/opendal/pull/6026 ### Changed * refactor: Remove dead code ConcurrentFutures by @Xuanwo in https://github.com/apache/opendal/pull/5939 * refactor(layers/tracing): Ensure the entire async function been traced by @Xuanwo in https://github.com/apache/opendal/pull/6000 ### Fixed * fix(core): Fix head-of-line blocking in concurrent tasks by @Xuanwo in https://github.com/apache/opendal/pull/5941 * fix(services/ipmfs): fix Ipmfs behavior tests by @miroim in https://github.com/apache/opendal/pull/5969 * chore(core): Fix clippy for services azfile by @asukaminato0721 in https://github.com/apache/opendal/pull/5994 ### Docs * docs(bindings/nodejs): fix broken links by @miroim in https://github.com/apache/opendal/pull/6017 * doc(chore): update copyright date in NOTICE by @caicancai in https://github.com/apache/opendal/pull/6023 ### CI * ci: add test for cpp example by @silver-ymz in https://github.com/apache/opendal/pull/5952 * ci(bindings/go): include go binding into behavior tests by @yuchanns in https://github.com/apache/opendal/pull/6018 ### Chore * chore: rm in favor of dosubot by @asukaminato0721 in https://github.com/apache/opendal/pull/5946 * chore: Fix clippy for rust 1.86 by @Xuanwo in https://github.com/apache/opendal/pull/5951 * chore: sync cpp example by @silver-ymz in https://github.com/apache/opendal/pull/5944 * chore: update typos version by @yihong0618 in https://github.com/apache/opendal/pull/5954 * chore(core): fix typos for the QueryPairsWriter by @kemingy in https://github.com/apache/opendal/pull/5978 * chore(service/azdls): use QueryPairsWriter for url write by @kemingy in https://github.com/apache/opendal/pull/5988 * chore(services/obs): Use QueryPairsWriter for url write by @asukaminato0721 in https://github.com/apache/opendal/pull/5985 ## New Contributors * @uruemu made their first contribution in https://github.com/apache/opendal/pull/5949 **Full Changelog**: https://github.com/apache/opendal/compare/v0.53.0...v0.53.1
# Upgrade to Rust Core v0.53 ## Public API ### Supabase service is now an S3-compatible servcice Supabase Storage is now an S3-compatible service instead: https://github.com/supabase/storage. We removed the supabase native service support in OpenDAL v0.53. Users who want to access Supabase Storage can use the S3 service instead. ### All metrics related layers have been refactored All metrics layers have been refactored: - `PrometheusLayer` - `PrometheusClientLayer` - `MetricsLayer` They are now provides more metrics and more detailed information. All their public API have been redesigned. For more details, please refer to `opendal::layers::observe`'s module documentation. ### `Operator::default_executor` has been replaced by `Operator::executor` In opendal v0.53, we introduced a new concept of `Context` which is used to store the context of the current operator. Thanks to this design, we can now get and set the `executor` and `http_client` for given Operator instead. All services `http_client` API has been deprecated and replaced by `Operator::update_http_client` API. ### OpenDAL MSRV bumped to `1.80` Since v0.53, OpenDAL will require Rust 1.80.0 or later to build. ## Raw API ### Operation enum merge To reduce the complexity of the `Operation`, we have merged the duplicated `Operation`. For example: - `Operation::ReaderRead` has been merged into `Operation::Read` - `Operation::BlockingRead` has been merged into `Operation::Read` # Upgrade to Nodejs Binding v0.48 ## Breaking change ### Public API Now, nodejs binding `op.is_exist` changed to `op.exists` to align with nodejs API style. <!-- Release notes generated using configuration in .github/release.yml at v0.53.0 --> ## What's Changed ### Added * feat(core): implement if_modified_since and if_unmodified_since for stat_with by @meteorgan in https://github.com/apache/opendal/pull/5528 * feat(layer/otelmetrics): add OtelMetricsLayer by @andylokandy in https://github.com/apache/opendal/pull/5524 * feat(integrations/object_store): implement put_opts and get_opts by @meteorgan in https://github.com/apache/opendal/pull/5513 * feat: Conditional reader for azblob, gcs, oss by @geetanshjuneja in https://github.com/apache/opendal/pull/5531 * feat(core): Add correctness check for read with if_xxx headers by @Xuanwo in https://github.com/apache/opendal/pull/5538 * feat(services/cos): Added user metadata support for cos service by @geetanshjuneja in https://github.com/apache/opendal/pull/5510 * feat(core): Implement list with deleted and versions for oss by @hoslo in https://github.com/apache/opendal/pull/5527 * feat(layer/otelmetrics): take meter when register by @andylokandy in https://github.com/apache/opendal/pull/5547 * feat(gcs): Convert TOO_MANY_REQUESTS to retryable Ratelimited by @Xuanwo in https://github.com/apache/opendal/pull/5551 * feat(services/webdfs): Add user.name support for webhdfs by @Xuanwo in https://github.com/apache/opendal/pull/5567 * feat: disable backtrace for NotFound error by @xxchan in https://github.com/apache/opendal/pull/5577 * feat(services/s3): Added crc64nvme for s3 by @geetanshjuneja in https://github.com/apache/opendal/pull/5580 * feat(services-fs): Support write-if-not-exists in fs backend by @SergeiPatiakin in https://github.com/apache/opendal/pull/5605 * feat(services/gcs): Impl content-encoding support for GCS stat, write and presign by @wlinna in https://github.com/apache/opendal/pull/5610 * feat(bindings/ruby): add lister by @erickguan in https://github.com/apache/opendal/pull/5600 * feat(services/swift): Added user metadata support for swift service by @zhaohaidao in https://github.com/apache/opendal/pull/5601 * feat: Implement github actions cache service v2 support by @Xuanwo in https://github.com/apache/opendal/pull/5633 * feat(core)!: implement write returns metadata by @meteorgan in https://github.com/apache/opendal/pull/5562 * feat(bindings/python): let path can be PathLike by @asukaminato0721 in https://github.com/apache/opendal/pull/5636 * feat(bindings/python): add exists by @asukaminato0721 in https://github.com/apache/opendal/pull/5637 * feat(bindings/python) detailed error message by @asukaminato0721 in https://github.com/apache/opendal/pull/5646 * feat(bindings/python): Add user metadata support for write by @Xuanwo in https://github.com/apache/opendal/pull/5654 * feat(services/s3): add append support by @Frank-III in https://github.com/apache/opendal/pull/5428 * feat(core): Add presign delete support by @asukaminato0721 in https://github.com/apache/opendal/pull/5647 * feat(bindings/python): add python presign_delete by @asukaminato0721 in https://github.com/apache/opendal/pull/5661 * feat(core): Sharing context between layers and service by @Xuanwo in https://github.com/apache/opendal/pull/5662 * feat(!): Bump arrow version of parquet_opendal to 54.x by @erickguan in https://github.com/apache/opendal/pull/5665 * feat: Polish context related APIs by @Xuanwo in https://github.com/apache/opendal/pull/5673 * feat(services/onedrive): List dir shows metadata by @erickguan in https://github.com/apache/opendal/pull/5632 * feat(java): add WriteOptions for write methods by @geruh in https://github.com/apache/opendal/pull/5664 * feat(bindings/ruby): add operator info by @erickguan in https://github.com/apache/opendal/pull/5584 * feat(services/oss): Implement `Write Returns Metadata` for oss by @meteorgan in https://github.com/apache/opendal/pull/5688 * feat(core): Expose Reader::into_stream and Writer::into_sink by @Xuanwo in https://github.com/apache/opendal/pull/5698 * feat: adopt uv for python binding by @kemingy in https://github.com/apache/opendal/pull/5711 * feat(services/gcs): Implement multipart/related and use it with Gcs by @wlinna in https://github.com/apache/opendal/pull/5691 * feat(bindings/dart): Add dart binding by @asukaminato0721 in https://github.com/apache/opendal/pull/5591 * fix(binding/dart): pin version to avoid generator/runtime version mismatch by @asukaminato0721 in https://github.com/apache/opendal/pull/5734 * feat(binding/dart): add examples, tests by @asukaminato0721 in https://github.com/apache/opendal/pull/5740 * feat(services/onedrive): add signer to utilize the refresh token by @erickguan in https://github.com/apache/opendal/pull/5733 * feat(binding/dart): hide init && change to init by @asukaminato0721 in https://github.com/apache/opendal/pull/5742 * feat(core): Implement write returns metadata for b2 by @hoslo in https://github.com/apache/opendal/pull/5750 * feat(services/hdfs_native): implement write/read/list methods by @zhaohaidao in https://github.com/apache/opendal/pull/5617 * feat(website): Adding a WIP to the list of bingdings by @shaonianche in https://github.com/apache/opendal/pull/5769 * feat(services/onedrive): implement read_with_if_none_match by @erickguan in https://github.com/apache/opendal/pull/5763 * feat(binding/dart): add pubspec info by @asukaminato0721 in https://github.com/apache/opendal/pull/5751 * feat(services/s3): Add operation in http context by @Xuanwo in https://github.com/apache/opendal/pull/5791 * feat(bindings/python): Add repr for metadata by @yihong0618 in https://github.com/apache/opendal/pull/5783 * feat: Add origin private file system scaffold by @Eason0729 in https://github.com/apache/opendal/pull/5758 * feat(core): Implement http related metrics support for prom client by @Xuanwo in https://github.com/apache/opendal/pull/5798 * feat(core): Implement http related metrics support for otel by @leiysky in https://github.com/apache/opendal/pull/5800 * feat(services/lakefs): Add operation in http context by @liugddx in https://github.com/apache/opendal/pull/5809 * feat(github): Auto generate weekly summary by @Xuanwo in https://github.com/apache/opendal/pull/5818 * feat(binding/java): Add list with recursive support by @cuichenli in https://github.com/apache/opendal/pull/5718 * feat(services/huggingface): Add operation in http context by @liugddx in https://github.com/apache/opendal/pull/5810 * feat(core/layers): implement http related metrics support for prometheus by @koushiro in https://github.com/apache/opendal/pull/5847 * feat(core/layers): implement http related metrics support for metrics by @koushiro in https://github.com/apache/opendal/pull/5848 * feat(services/onedrive): implement additional OneDrive features by @erickguan in https://github.com/apache/opendal/pull/5784 * feat(bindings/c): add opendal_operator_check by @asukaminato0721 in https://github.com/apache/opendal/pull/5851 * feat(services/aliyun_drive): Add operation in http context by @sunheyi6 in https://github.com/apache/opendal/pull/5880 ### Changed * refactor: refactor some unnecessary clone and use next_back to make clippy happy by @yihong0618 in https://github.com/apache/opendal/pull/5554 * refactor: refactor all body.copy_to_bytes(body.remaining()) by @yihong0618 in https://github.com/apache/opendal/pull/5561 * refactor: Remove dead services libsql by @Xuanwo in https://github.com/apache/opendal/pull/5616 * refactor(!): Supabase is now an S3-compatible servcices by @Xuanwo in https://github.com/apache/opendal/pull/5663 * refactor: Migrate s3 services to context based http client by @Xuanwo in https://github.com/apache/opendal/pull/5676 * refactor: Migrate oss services to context based http client by @Ziy1-Tan in https://github.com/apache/opendal/pull/5681 * refactor: Migrate obs services to context based http client by @Ziy1-Tan in https://github.com/apache/opendal/pull/5682 * refactor: Migrate cos services to context based http client by @Ziy1-Tan in https://github.com/apache/opendal/pull/5683 * refactor(bindings/node)!: Change `is_exist` to `exists` to align with nodejs API style by @yihong0618 in https://github.com/apache/opendal/pull/5731 * refactor(services/redis): Implement ConnectionLike for RedisConnection by @Xuanwo in https://github.com/apache/opendal/pull/5748 * refactor!: Remove opendal-compat which is not maintained by @Xuanwo in https://github.com/apache/opendal/pull/5754 * refactor: Migrate github services to context based http client by @miroim in https://github.com/apache/opendal/pull/5764 * refactor(gcs): Migrate to context based http client by @leiysky in https://github.com/apache/opendal/pull/5778 * refactor(core/raw)!: Merge blocking and async operations by @Xuanwo in https://github.com/apache/opendal/pull/5789 * refactor(core/raw)!: Use AccessorInfo instead of seperate fields by @Xuanwo in https://github.com/apache/opendal/pull/5796 * refactor: Migrate aliyun_drive services to context based http client by @miroim in https://github.com/apache/opendal/pull/5815 * refactor: Migrate azfile services to context based http client by @miroim in https://github.com/apache/opendal/pull/5816 * refactor: Migrate dropbox services to context based http client by @miroim in https://github.com/apache/opendal/pull/5827 * refactor: Migrate upyun services to context based http client by @miroim in https://github.com/apache/opendal/pull/5829 * refactor(core): Migrate BlockWriter to use executor from context by @Xuanwo in https://github.com/apache/opendal/pull/5834 * refactor(core): Migrate MultipartWrite Executor to context based by @Xuanwo in https://github.com/apache/opendal/pull/5835 * refactor(core): Migrate PositionWrite Executor to context based by @Xuanwo in https://github.com/apache/opendal/pull/5836 * refactor(core)!: Migrate to context based executor by @Xuanwo in https://github.com/apache/opendal/pull/5838 * refactor: tidy binding java code by @tisonkun in https://github.com/apache/opendal/pull/5840 * refactor: Migrate yandex_disk services to context based http client by @miroim in https://github.com/apache/opendal/pull/5841 * refactor: Migrate alluxio services to context based http client by @miroim in https://github.com/apache/opendal/pull/5842 * refactor: Migrate b2 service to context based http client by @miroim in https://github.com/apache/opendal/pull/5843 * refactor: migrate azblob services to context based http client by @Ziy1-Tan in https://github.com/apache/opendal/pull/5845 * refactor: Migrate gdrive service to context based http client by @miroim in https://github.com/apache/opendal/pull/5861 * refactor: Migrate pcloud service to context based http client by @miroim in https://github.com/apache/opendal/pull/5866 * refactor!: Bump OpenDAL MSRV to 1.80 by @Xuanwo in https://github.com/apache/opendal/pull/5868 * refactor: Introduce VercelArtifactsCore for improved service structure by @miroim in https://github.com/apache/opendal/pull/5873 * refactor: Migrate vercel_artifacts service to context based http client by @miroim in https://github.com/apache/opendal/pull/5877 * refactor: Migrate http service to context based http client by @miroim in https://github.com/apache/opendal/pull/5879 * refactor: Migrate services to context based http client by @miroim in https://github.com/apache/opendal/pull/5882 * refactor: Polishing IO metrics by adding more useful metrics by @Xuanwo in https://github.com/apache/opendal/pull/5883 * refactor(core): Add good default histogram buckets for metrics by @Xuanwo in https://github.com/apache/opendal/pull/5886 * refactor: Migrate icloud service to context based http client by @miroim in https://github.com/apache/opendal/pull/5891 * refactor(bindings/dart)!: support macos and use exists api by @yihong0618 in https://github.com/apache/opendal/pull/5884 * refactor: Migrate PrometheusClientLayer to support IO metrics by @Xuanwo in https://github.com/apache/opendal/pull/5887 * refactor(core)!: Merge operations to build more clean metrics by @Xuanwo in https://github.com/apache/opendal/pull/5892 * refactor: Migrate WebHDFS service to context based http client by @miroim in https://github.com/apache/opendal/pull/5893 * refactor(layer/metrics): Migrate MetricsLayer to support IO metrics by @koushiro in https://github.com/apache/opendal/pull/5900 * refactor(layer/prometheus): Migrate PrometheusLayer to support IO metrics by @koushiro in https://github.com/apache/opendal/pull/5899 * refactor(layer/otelmetrics): Migrate OtelMetricsLayer to support IO metrics by @koushiro in https://github.com/apache/opendal/pull/5901 * refactor: Introduce SftpCore for improved service structure by @miroim in https://github.com/apache/opendal/pull/5902 * refactor(observe): remove duplicated observation by @koushiro in https://github.com/apache/opendal/pull/5894 * refactor: refine RetryLayer type signature by @tisonkun in https://github.com/apache/opendal/pull/5905 * refactor(core): Remove all `write_has_xxx` capabilities by @Ziy1-Tan in https://github.com/apache/opendal/pull/5908 * refactor(services/obs): Implement Write Returns Metadata for obs by @Ziy1-Tan in https://github.com/apache/opendal/pull/5912 ### Fixed * fix(integrations/object_store) `object_store_opendal` now compiles on wasm32-unknown-unknown by @XiangpengHao in https://github.com/apache/opendal/pull/5530 * fix(serivces/gcs): Gcs doesn't support read with if_(un)modified_since by @Xuanwo in https://github.com/apache/opendal/pull/5537 * fix(logging): remove additional space by @xxchan in https://github.com/apache/opendal/pull/5568 * fix(services/gcs): Fix content encoding can't be used alone by @Xuanwo in https://github.com/apache/opendal/pull/5614 * fix: ghac doesn't support delete anymore by @Xuanwo in https://github.com/apache/opendal/pull/5628 * fix(services/gdrive): skip the trailing slash when creating and querying the directory by @meteorgan in https://github.com/apache/opendal/pull/5631 * fix(integrations/dav-server): handle encoded path correctly. by @rick-200 in https://github.com/apache/opendal/pull/5650 * fix(services/onedrive): fix OneDrive behavior tests by @erickguan in https://github.com/apache/opendal/pull/5652 * fix(services/gcs): Advertise `write_with_cache_control` in Gcs by @wlinna in https://github.com/apache/opendal/pull/5658 * fix(services/gcs): Fix cache control not present in object meta by @Xuanwo in https://github.com/apache/opendal/pull/5660 * fix(services/s3): fix batch delete with version by @meteorgan in https://github.com/apache/opendal/pull/5684 * fix(services/oss): fix batch delete with version for oss by @meteorgan in https://github.com/apache/opendal/pull/5687 * fix(services/onedrive): remove @odata.type field by @erickguan in https://github.com/apache/opendal/pull/5696 * fix: drop useless clone for py binding and make clippy happy by @yihong0618 in https://github.com/apache/opendal/pull/5708 * fix: drop useless file by @yihong0618 in https://github.com/apache/opendal/pull/5714 * fix: make build_abs_path to build_rooted_abs_path for chainsafe by @yihong0618 in https://github.com/apache/opendal/pull/5715 * fix: mac can not build lua binding by @yihong0618 in https://github.com/apache/opendal/pull/5719 * fix(website): Handling svg image correctly by @Xuanwo in https://github.com/apache/opendal/pull/5725 * fix(website): Handling badges click behavior correctly by @miroim in https://github.com/apache/opendal/pull/5741 * fix(core)!: chainsafe services has been sunset by @yihong0618 in https://github.com/apache/opendal/pull/5744 * fix: sqlite may dead lock in ci by @yihong0618 in https://github.com/apache/opendal/pull/5738 * fix: drop useless import and clippy happy for java binding by @yihong0618 in https://github.com/apache/opendal/pull/5746 * fix(bindings/java): bring back false delete code by @yihong0618 in https://github.com/apache/opendal/pull/5752 * fix(core): fix list with recursive when the object doesn't exist by @meteorgan in https://github.com/apache/opendal/pull/5732 * fix(website): docusaurus build on windows by @shaonianche in https://github.com/apache/opendal/pull/5770 * fix: make php binding happy again by @yihong0618 in https://github.com/apache/opendal/pull/5761 * fix(services/onedrive): add scope for the refresh token by @erickguan in https://github.com/apache/opendal/pull/5776 * fix: py binding benchmark can not run by @yihong0618 in https://github.com/apache/opendal/pull/5786 * fix: add missing last_modified for python binding by @yihong0618 in https://github.com/apache/opendal/pull/5767 * doc: fix README root wrong for example close issue #5871 by correct README by @yihong0618 in https://github.com/apache/opendal/pull/5782 * fix(services/compfs): behavior async write by @Berrysoft in https://github.com/apache/opendal/pull/5803 * fix(services/onedrive): chunk PUT upload remove auth header by @emliunix in https://github.com/apache/opendal/pull/5812 * fix(services/compfs): read, delete, copy, rename by @Berrysoft in https://github.com/apache/opendal/pull/5807 * fix(github): Fix discussion create by @Xuanwo in https://github.com/apache/opendal/pull/5821 * fix(bindings/python): open python3.13t release for windows since upstream had fixed by @yihong0618 in https://github.com/apache/opendal/pull/5826 * fix: better ocaml binding and happy clippy by @yihong0618 in https://github.com/apache/opendal/pull/5839 * fix(bindings/python): sort imports, fix template, fix bench by @kemingy in https://github.com/apache/opendal/pull/5844 * fix: make haskell binding happier by @yihong0618 in https://github.com/apache/opendal/pull/5849 * doc: fix all fs env tmp file dir in doc by @yihong0618 in https://github.com/apache/opendal/pull/5855 * fix: drop fixme in py binding since upstream fixed by @yihong0618 in https://github.com/apache/opendal/pull/5862 * fix: drop fixme in etcd tls since upstream fixed by @yihong0618 in https://github.com/apache/opendal/pull/5863 * fix: todo list since MSRV is 1.80 by @yihong0618 in https://github.com/apache/opendal/pull/5870 * fix: close issue #5910 by @yihong0618 in https://github.com/apache/opendal/pull/5911 ### Docs * docs: Fix opendal rust core's README not align with new vision by @Xuanwo in https://github.com/apache/opendal/pull/5541 * docs(integration/object_store): add example for datafusion by @meteorgan in https://github.com/apache/opendal/pull/5543 * docs: Add docs on how to pronounce opendal by @Xuanwo in https://github.com/apache/opendal/pull/5552 * docs(bindings/java): better javadoc by @tisonkun in https://github.com/apache/opendal/pull/5572 * docs(bindings/ruby): add documentation for Ruby binding by @erickguan in https://github.com/apache/opendal/pull/5629 * docs: Add upgrade docs for upcoming 0.52 by @Xuanwo in https://github.com/apache/opendal/pull/5634 * doc: add the most famous Python binding by @yihong0618 in https://github.com/apache/opendal/pull/5707 * doc: py binding version is wrong for now by @yihong0618 in https://github.com/apache/opendal/pull/5709 * docs: Better ways to users showcase by @Xuanwo in https://github.com/apache/opendal/pull/5720 * docs: Add useful links by @Xuanwo in https://github.com/apache/opendal/pull/5735 * docs: QuestDB is not using opendal java by @Xuanwo in https://github.com/apache/opendal/pull/5736 * doc: more users for python binding by @yihong0618 in https://github.com/apache/opendal/pull/5756 * docs: Update nominate-committer.md by @tisonkun in https://github.com/apache/opendal/pull/5765 * docs: Fix rustic users entry by @QazCetelic in https://github.com/apache/opendal/pull/5790 * docs(services/onedrive): add how to get tokens by @emliunix in https://github.com/apache/opendal/pull/5792 * doc: fix typo in RFC md by @yihong0618 in https://github.com/apache/opendal/pull/5813 * doc: dotnet binding wip doc by @yihong0618 in https://github.com/apache/opendal/pull/5850 * doc: add oli bench command doc by @yihong0618 in https://github.com/apache/opendal/pull/5854 * doc: docker installation guide for behaviour test by @zhaohaidao in https://github.com/apache/opendal/pull/5876 * docs: Add docs on how to upgrade to opendal rust core 0.53 by @Xuanwo in https://github.com/apache/opendal/pull/5918 * docs: Update changelogs for v0.53.0 by @Xuanwo in https://github.com/apache/opendal/pull/5934 ### CI * ci(integration/object_store): add integration tests for object_store_opendal by @meteorgan in https://github.com/apache/opendal/pull/5536 * ci: Pin the nightly version to rust 1.84 for fuzz by @Xuanwo in https://github.com/apache/opendal/pull/5546 * ci: skip running behavior tests when adding or modifying documentation by @meteorgan in https://github.com/apache/opendal/pull/5558 * build: fix Cargo.lock and pass --locked in CI by @xxchan in https://github.com/apache/opendal/pull/5565 * build: implement release process in odev by @tisonkun in https://github.com/apache/opendal/pull/5592 * ci: upgrade upload and download artifact actions by @tisonkun in https://github.com/apache/opendal/pull/5598 * ci: Fix bad corepack cannot find matching keyid by @Xuanwo in https://github.com/apache/opendal/pull/5603 * ci(website): avoid including rc when calculate the latest version by @tisonkun in https://github.com/apache/opendal/pull/5608 * build: upgrade opentelemetry dependencies to 0.28.0 by @tisonkun in https://github.com/apache/opendal/pull/5625 * ci: Try fix nodejs CI by @Xuanwo in https://github.com/apache/opendal/pull/5643 * ci: Skip corepack checks until next nodejs version by @Xuanwo in https://github.com/apache/opendal/pull/5644 * ci(bindings/zig): update to zig version 0.14.0 by @kassane in https://github.com/apache/opendal/pull/5700 * ci: add clippy to some of the binding check ci by @yihong0618 in https://github.com/apache/opendal/pull/5717 * build: bump opentelemetry dependency to 0.29.0 by @tisonkun in https://github.com/apache/opendal/pull/5856 * build(deps): bump actions/setup-python from 4 to 5 by @dependabot in https://github.com/apache/opendal/pull/5926 * build(deps): update datafusion requirement from 45.0.0 to 46.0.1 in /integrations/object_store by @dependabot in https://github.com/apache/opendal/pull/5928 * build(deps): bump governor from 0.6.3 to 0.10.0 in /core by @dependabot in https://github.com/apache/opendal/pull/5923 * build(deps): bump log from 0.4.25 to 0.4.27 in /bin/oay by @dependabot in https://github.com/apache/opendal/pull/5927 * build(deps): bump humantime from 2.1.0 to 2.2.0 in /bin/oli by @dependabot in https://github.com/apache/opendal/pull/5925 * build(deps): bump test-context from 0.3.0 to 0.4.1 in /bin/ofs by @dependabot in https://github.com/apache/opendal/pull/5924 * build(deps): update pyo3 requirement from 0.23.3 to 0.24.1 in /bindings/python by @dependabot in https://github.com/apache/opendal/pull/5922 * ci: Disable zigbuild to workaround undefined symbol by @Xuanwo in https://github.com/apache/opendal/pull/5936 ### Chore * chore: Update CODEOWNERS by @Xuanwo in https://github.com/apache/opendal/pull/5542 * chore(layer/otelmetrics): take meter by reference by @andylokandy in https://github.com/apache/opendal/pull/5553 * chore(core): Avoid using mongodb 3.2.0 by @Xuanwo in https://github.com/apache/opendal/pull/5560 * chore: add oli/oay/ofs to rust-analyzer.linkedProjects by @xxchan in https://github.com/apache/opendal/pull/5564 * chore: try use logforth by @tisonkun in https://github.com/apache/opendal/pull/5573 * chore: bump version 0.51.2 by @tisonkun in https://github.com/apache/opendal/pull/5595 * chore: add changelog for 0.51.2 by @tisonkun in https://github.com/apache/opendal/pull/5597 * chore(deps): bump uuid from 1.11.0 to 1.12.1 in /bin/oli by @dependabot in https://github.com/apache/opendal/pull/5589 * chore(deps): bump uuid from 1.11.0 to 1.12.1 in /core by @dependabot in https://github.com/apache/opendal/pull/5588 * chore(deps): bump log from 0.4.22 to 0.4.25 in /bin/oay by @dependabot in https://github.com/apache/opendal/pull/5590 * chore(deps): bump tempfile from 3.15.0 to 3.16.0 in /bin/ofs by @dependabot in https://github.com/apache/opendal/pull/5586 * chore(deps): update libtest-mimic requirement from 0.7.3 to 0.8.1 in /integrations/object_store by @dependabot in https://github.com/apache/opendal/pull/5587 * chore(layers/prometheus-client): upgrade prometheus-client dependency to v0.23.1 by @koushiro in https://github.com/apache/opendal/pull/5576 * chore(ci): remove benchmark report by @dqhl76 in https://github.com/apache/opendal/pull/5626 * chore: Fix clippy for rust edition 2024 by @Xuanwo in https://github.com/apache/opendal/pull/5648 * chore: update mongodb version drop the fixme comments by @yihong0618 in https://github.com/apache/opendal/pull/5706 * chore: revert "services/cos: Implement Write Returns Metadata for cos" by @Xuanwo in https://github.com/apache/opendal/pull/5713 * chore(core): Fix BufferStream not exported by @Xuanwo in https://github.com/apache/opendal/pull/5730 * chore: update flate2 version by @yihong0618 in https://github.com/apache/opendal/pull/5759 * chore(services/hdfs_native): enable create_dir capability by @meteorgan in https://github.com/apache/opendal/pull/5817 * chore(github): Fix uv not installed in weekly-update by @Xuanwo in https://github.com/apache/opendal/pull/5819 * chore(github): Fix dateutil not installed by @Xuanwo in https://github.com/apache/opendal/pull/5820 * chore(github): Avoid ping all contributors by @Xuanwo in https://github.com/apache/opendal/pull/5823 * chore: make ruby clippy happy by @yihong0618 in https://github.com/apache/opendal/pull/5830 * chore: update py binding api just by @yihong0618 in https://github.com/apache/opendal/pull/5898 * chore: Polish IO metric buckets by @Xuanwo in https://github.com/apache/opendal/pull/5903 * chore(layer/observe): cleanup useless metric metadata by @koushiro in https://github.com/apache/opendal/pull/5904 * chore: update cpp example by @yihong0618 in https://github.com/apache/opendal/pull/5907 * chore: chore some version like logforth by @yihong0618 in https://github.com/apache/opendal/pull/5921 ## New Contributors * @XiangpengHao made their first contribution in https://github.com/apache/opendal/pull/5530 * @SergeiPatiakin made their first contribution in https://github.com/apache/opendal/pull/5605 * @wlinna made their first contribution in https://github.com/apache/opendal/pull/5610 * @zhaohaidao made their first contribution in https://github.com/apache/opendal/pull/5601 * @rick-200 made their first contribution in https://github.com/apache/opendal/pull/5650 * @Ziy1-Tan made their first contribution in https://github.com/apache/opendal/pull/5681 * @geruh made their first contribution in https://github.com/apache/opendal/pull/5664 * @shaonianche made their first contribution in https://github.com/apache/opendal/pull/5769 * @leiysky made their first contribution in https://github.com/apache/opendal/pull/5778 * @QazCetelic made their first contribution in https://github.com/apache/opendal/pull/5790 * @emliunix made their first contribution in https://github.com/apache/opendal/pull/5792 * @Eason0729 made their first contribution in https://github.com/apache/opendal/pull/5758 * @Berrysoft made their first contribution in https://github.com/apache/opendal/pull/5803 **Full Changelog**: https://github.com/apache/opendal/compare/v0.51.1...v0.53.0
# Upgrade to v0.52 ## Public API ### RFC-5556: Write Returns Metadata Since v0.52, all write APIs in OpenDAL have been updated to return `Metadata` instead of `()`. This metadata includes useful information provided by the service, such as `content-length`, `etag`, `version`, and `last-modified`. This feature is not fully ready yet, and many available metadata fields are still not returned. Please visit [Tracking Issues of RFC-5556: Write Returns Metadata](https://github.com/apache/opendal/issues/5557) for progress and contributions. Affected API: - `opendal::Operator::write` - `opendal::Operator::write_with` - `opendal::Operator::writer::close` - `opendal::raw::oio::Write::close` ### Github Actions Cache (ghac) service v2 As [requested](https://github.com/apache/opendal/issues/5620) by GitHub, we have upgraded our GHAC service to ensure compatibility with the latest GitHub Actions cache API. By upgrading to OpenDAL v0.52, your services will continue functioning after the deprecation of the legacy service (2025/03/01). GHES does not yet support GHAC v2, but OpenDAL has handled this properly to prevent any disruptions. ghac service doesn't support `delete` anymore, please use github's API to delete cache instead. This upgrade is mandatory and enabled by default using an environment variable in the GitHub CI environment. No changes are required at the code level. ### Breaking Changes in Dependencies - `OtelTraceLayer` and `OtelMetricsLayer`'s dependence `opentelemetry` bumped to `0.28` - `PrometheusClientLayer`'s dependence `prometheus-client` bumped to `0.23.1` --- ## v0.52.0 ### Added * feat(services/s3): Added crc64nvme for s3 by @geetanshjuneja in https://github.com/apache/opendal/pull/5580 * feat(services-fs): Support write-if-not-exists in fs backend by @SergeiPatiakin in https://github.com/apache/opendal/pull/5605 * feat(services/gcs): Impl content-encoding support for GCS stat, write and presign by @wlinna in https://github.com/apache/opendal/pull/5610 * feat(bindings/ruby): add lister by @erickguan in https://github.com/apache/opendal/pull/5600 * feat(services/swift): Added user metadata support for swift service by @zhaohaidao in https://github.com/apache/opendal/pull/5601 * feat: Implement github actions cache service v2 support by @Xuanwo in https://github.com/apache/opendal/pull/5633 * feat(core)!: implement write returns metadata by @meteorgan in https://github.com/apache/opendal/pull/5562 * feat(bindings/python): let path can be PathLike by @asukaminato0721 in https://github.com/apache/opendal/pull/5636 * feat(bindings/python): add exists by @asukaminato0721 in https://github.com/apache/opendal/pull/5637 ### Changed * refactor: Remove dead services libsql by @Xuanwo in https://github.com/apache/opendal/pull/5616 ### Fixed * fix(services/gcs): Fix content encoding can't be used alone by @Xuanwo in https://github.com/apache/opendal/pull/5614 * fix: ghac doesn't support delete anymore by @Xuanwo in https://github.com/apache/opendal/pull/5628 * fix(services/gdrive): skip the trailing slash when creating and querying the directory by @meteorgan in https://github.com/apache/opendal/pull/5631 ### Docs * docs(bindings/ruby): add documentation for Ruby binding by @erickguan in https://github.com/apache/opendal/pull/5629 * docs: Add upgrade docs for upcoming 0.52 by @Xuanwo in https://github.com/apache/opendal/pull/5634 ### CI * ci: Fix bad corepack cannot find matching keyid by @Xuanwo in https://github.com/apache/opendal/pull/5603 * ci(website): avoid including rc when calculate the latest version by @tisonkun in https://github.com/apache/opendal/pull/5608 * build: upgrade opentelemetry dependencies to 0.28.0 by @tisonkun in https://github.com/apache/opendal/pull/5625 * ci: Try fix nodejs CI by @Xuanwo in https://github.com/apache/opendal/pull/5643 * ci: Skip corepack checks until next nodejs version by @Xuanwo in https://github.com/apache/opendal/pull/5644 ### Chore * chore(deps): bump uuid from 1.11.0 to 1.12.1 in /bin/oli by @dependabot in https://github.com/apache/opendal/pull/5589 * chore(deps): bump uuid from 1.11.0 to 1.12.1 in /core by @dependabot in https://github.com/apache/opendal/pull/5588 * chore(deps): bump log from 0.4.22 to 0.4.25 in /bin/oay by @dependabot in https://github.com/apache/opendal/pull/5590 * chore(deps): bump tempfile from 3.15.0 to 3.16.0 in /bin/ofs by @dependabot in https://github.com/apache/opendal/pull/5586 * chore(deps): update libtest-mimic requirement from 0.7.3 to 0.8.1 in /integrations/object_store by @dependabot in https://github.com/apache/opendal/pull/5587 * chore(layers/prometheus-client): upgrade prometheus-client dependency to v0.23.1 by @koushiro in https://github.com/apache/opendal/pull/5576 * chore(ci): remove benchmark report by @dqhl76 in https://github.com/apache/opendal/pull/5626 ## New Contributors * @SergeiPatiakin made their first contribution in https://github.com/apache/opendal/pull/5605 * @wlinna made their first contribution in https://github.com/apache/opendal/pull/5610 * @zhaohaidao made their first contribution in https://github.com/apache/opendal/pull/5601 **Full Changelog**: https://github.com/apache/opendal/compare/v0.51.2...v0.52.0
<!-- Release notes generated using configuration in .github/release.yml at v0.51.2 --> ## What's Changed ### Added * feat(core): implement if_modified_since and if_unmodified_since for stat_with by @meteorgan in https://github.com/apache/opendal/pull/5528 * feat(layer/otelmetrics): add OtelMetricsLayer by @andylokandy in https://github.com/apache/opendal/pull/5524 * feat(integrations/object_store): implement put_opts and get_opts by @meteorgan in https://github.com/apache/opendal/pull/5513 * feat: Conditional reader for azblob, gcs, oss by @geetanshjuneja in https://github.com/apache/opendal/pull/5531 * feat(core): Add correctness check for read with if_xxx headers by @Xuanwo in https://github.com/apache/opendal/pull/5538 * feat(services/cos): Added user metadata support for cos service by @geetanshjuneja in https://github.com/apache/opendal/pull/5510 * feat(core): Implement list with deleted and versions for oss by @hoslo in https://github.com/apache/opendal/pull/5527 * feat(layer/otelmetrics): take meter when register by @andylokandy in https://github.com/apache/opendal/pull/5547 * feat(gcs): Convert TOO_MANY_REQUESTS to retryable Ratelimited by @Xuanwo in https://github.com/apache/opendal/pull/5551 * feat(services/webdfs): Add user.name support for webhdfs by @Xuanwo in https://github.com/apache/opendal/pull/5567 * feat: disable backtrace for NotFound error by @xxchan in https://github.com/apache/opendal/pull/5577 ### Changed * refactor: refactor some unnecessary clone and use next_back to make clippy happy by @yihong0618 in https://github.com/apache/opendal/pull/5554 * refactor: refactor all body.copy_to_bytes(body.remaining()) by @yihong0618 in https://github.com/apache/opendal/pull/5561 ### Fixed * fix(integrations/object_store) `object_store_opendal` now compiles on wasm32-unknown-unknown by @XiangpengHao in https://github.com/apache/opendal/pull/5530 * fix(serivces/gcs): Gcs doesn't support read with if_(un)modified_since by @Xuanwo in https://github.com/apache/opendal/pull/5537 * fix(logging): remove additional space by @xxchan in https://github.com/apache/opendal/pull/5568 ### Docs * docs: Fix opendal rust core's README not align with new vision by @Xuanwo in https://github.com/apache/opendal/pull/5541 * docs(integration/object_store): add example for datafusion by @meteorgan in https://github.com/apache/opendal/pull/5543 * docs: Add docs on how to pronounce opendal by @Xuanwo in https://github.com/apache/opendal/pull/5552 * docs(bindings/java): better javadoc by @tisonkun in https://github.com/apache/opendal/pull/5572 ### CI * ci(integration/object_store): add integration tests for object_store_opendal by @meteorgan in https://github.com/apache/opendal/pull/5536 * ci: Pin the nightly version to rust 1.84 for fuzz by @Xuanwo in https://github.com/apache/opendal/pull/5546 * ci: skip running behavior tests when adding or modifying documentation by @meteorgan in https://github.com/apache/opendal/pull/5558 * build: fix Cargo.lock and pass --locked in CI by @xxchan in https://github.com/apache/opendal/pull/5565 * build: implement release process in odev by @tisonkun in https://github.com/apache/opendal/pull/5592 * ci: upgrade upload and download artifact actions by @tisonkun in https://github.com/apache/opendal/pull/5598 ### Chore * chore: Update CODEOWNERS by @Xuanwo in https://github.com/apache/opendal/pull/5542 * chore(layer/otelmetrics): take meter by reference by @andylokandy in https://github.com/apache/opendal/pull/5553 * chore(core): Avoid using mongodb 3.2.0 by @Xuanwo in https://github.com/apache/opendal/pull/5560 * chore: add oli/oay/ofs to rust-analyzer.linkedProjects by @xxchan in https://github.com/apache/opendal/pull/5564 * chore: try use logforth by @tisonkun in https://github.com/apache/opendal/pull/5573 * chore: bump version 0.51.2 by @tisonkun in https://github.com/apache/opendal/pull/5595 * chore: add changelog for 0.51.2 by @tisonkun in https://github.com/apache/opendal/pull/5597 ## New Contributors * @XiangpengHao made their first contribution in https://github.com/apache/opendal/pull/5530 **Full Changelog**: https://github.com/apache/opendal/compare/v0.51.1...v0.51.2