github apache/opendal v0.55.0

12 hours ago

Rust Core Upgrade to v0.55

Public API

Timestamp types now come from jiff

All public metadata APIs that previously exposed chrono::DateTime<Utc> now use jiff::Timestamp. For example, Metadata::last_modified() and related setters return/accept Timestamp values (core/src/types/metadata.rs). Update downstream crates to depend on jiff if they manipulate these timestamps or convert them to other formats.

Scheme handling is string-based

OperatorInfo::scheme() now returns &'static str instead of Scheme, and Operator::via_iter accepts impl AsRef<str> (typically the services::*_SCHEME constants). Additionally, the deprecated constructors Operator::from_map and Operator::via_map have been removed. Migrate any code that relied on the enum variants or the removed constructors to the new string-based constants and from_iter/via_iter.

List APIs only support versions

OpList::with_version()/version() and Capability::list_with_version have been removed after a long deprecation cycle. Use with_versions()/versions() on OpList and read Capability::list_with_versions instead.

S3Builder::security_token removed

S3Builder no longer exposes the deprecated security_token() helper. Use session_token() exclusively when configuring temporary credentials.

KV-style services no longer pretend to support list

Services that never returned meaningful results for Operator::list (such as D1, FoundationDB, GridFS, Memcached, MongoDB, MySQL, Persy, PostgreSQL, Redb, Redis, SurrealDB, TiKV, etc.) now rely on the default Unsupported implementation. Those features will be implemented later.

Raw API

Deprecated KV adapters removed

The legacy opendal::raw::adapters::{kv, typed_kv} modules have been deleted. Services should directly implement Access instead of depending on the adapters. Remove the corresponding imports and shim layers from any out-of-tree services.

Bindings Python Upgrade to v0.47

Breaking change: Module exports are explicit

opendal.__init__ now only re-exports the capability, exceptions, file, layers, services, types, Operator, and AsyncOperator symbols. Imports such as:

from opendal import Metadata, Layer

no longer work. Update them to use the dedicated submodules:

from opendal.types import Metadata
from opendal.layers import Layer

The legacy helper module opendal.__base has also been removed together with _Base.

Breaking change: Capability accessors renamed

Both Operator.full_capability() and AsyncOperator.full_capability() have been renamed to capability(). Adjust your code accordingly:

-caps = op.full_capability()
+caps = op.capability()

Breaking change: Service identifiers now have typed enums

The constructors for Operator / AsyncOperator provide overloads that accept opendal.services.Scheme members. While plain strings are still accepted at runtime, type checkers (pyright/mypy) expect the new enum values. Migrate code bases that relied on importing the old Scheme enum from opendal to from opendal import services and use services.Scheme.<NAME>.

What's Changed

Added

  • feat(services/oss): allow users to specify endpoint addressing style by @howardlau1999 in #6504
  • feat(bindings/ruby): publish ruby binding by @erickguan in #6539
  • feat(services/s3): add support for HTTP 429 TooManyRequests for S3-compatible services by @justinjoseph89 in #6589
  • feat: Add Operator Registry by @Xuanwo in #6608
  • feat: Add from_uri support for more object storage services by @Xuanwo in #6665
  • feat(services/webdav): Implement write returns metadata by @yunchipang in #6660
  • feat: Add from_uri support for http/webdav/ftp/sftp by @Xuanwo in #6666
  • feat(services/swift): Implement write returns metadata by @yunchipang in #6669
  • feat(buffer): add chunk iterator for Buffer by @TennyZhuang in #6672
  • feat(services/dropbox): Implement write returns metadata by @yunchipang in #6673
  • feat: Add from_uri support for all services by @Xuanwo in #6668
  • chore(bindings/python): Add Justfile and format codebase by @chitralverma in #6677
  • feat: Introduce TailCutLayer by @Xuanwo in #6680
  • feat(services/gdrive): Implement write returns metadata by @yunchipang in #6683
  • feat(bindings/python): Add stubs for Exception and Capability by @chitralverma in #6690
  • feat(bindings/python): Add stubs for some more types by @chitralverma in #6703
  • feat(bindings/python)!: Add stubs for remaining types by @chitralverma in #6720
  • feat(bindings/python)!: Stubs fix for operator and version by @chitralverma in #6728
  • RFC-6707: Capability Override Layer by @Xuanwo in #6707
  • feat(bindings/python)!: Generate stubs for Operator overloads and Scheme by @chitralverma in #6729
  • feat(bindings/nodejs): add concurrent limit layer by @kingsword09 in #6739
  • feat(bindings/python): Enable ftp/hdfs_native/sftp for python by @chitralverma in #6745
  • feat: implement content-md5 for s3 by @waynexia in #6508
  • feat(services/compfs): implement IoVectoredBuf for Buffer by @meteorgan in #6762
  • feat(services/lakefs): Implement write returns metadata by @kingsword09 in #6770
  • Add connection_pool_max_size option to memcached and redis builders by @trxcllnt in #6759
  • fix:(bindings/python) Gate service-sftp on windows targets by @chitralverma in #6777
  • feat(binding/nodejs): add TimeoutLayer, LoggingLayer and ThrottleLayer in nodejs binding by @Kilerd in #6772

Changed

  • refactor: Migrate cloudflare_kv from adapter::kv to Access instead by @kingsword09 in #6340
  • refactor: Centralize date/time handling with Timestamp wrapper by @dami0806 in #6650
  • refactor: Move Config related back to config.rs instead by @Xuanwo in #6667
  • refactor: Remove deprecated project virtiofs by @Xuanwo in #6682
  • refactor(core): remove conditional compilation in PageList trait by @crwen in #6715
  • refactor: migrate tikv service from adapter::kv to impl Access directly by @koushiro in #6713
  • refactor: migrate memcached service from adapter::kv to impl Access directly by @koushiro in #6714
  • refactor: migrate mysql service from adapter::kv to impl Access directly by @koushiro in #6716
  • refactor: migrate postgresql service from adapter::kv to impl Access directly by @koushiro in #6718
  • refactor: migrate persy service from adapter::kv to impl Access directly by @koushiro in #6721
  • refactor: migrate foundationdb service from adapter::kv to impl Access directly by @koushiro in #6722
  • refactor: migrate surrealdb service from adapter::kv to impl Access directly by @koushiro in #6723
  • refactor: migrate mongodb service from adapter::kv to impl Access directly by @koushiro in #6724
  • refactor: migrate d1 service from adapter::kv to impl Access directly by @koushiro in #6725
  • refactor: migrate gridfs service from adapter::kv to impl Access directly by @koushiro in #6726
  • refactor: Migrate sqlite from adapter::kv to Access instead by @NoxTav in #6328
  • refactor: migrate sled service from adapter::kv to impl Access directly by @koushiro in #6731
  • refactor: migrate rocksdb service from adapter::kv to impl Access directly by @koushiro in #6732
  • refactor: migrate redb service from adapter::kv to impl Access directly by @koushiro in #6733
  • refactor: Remove deprecated kv and typed_kv adapters by @kingsword09 in #6734
  • refactor(hdfs): restructure HdfsBackend and introduce HdfsCore by @kingsword09 in #6736
  • refactor(hdfs-native): restructure HdfsNativeBackend and introduce HdfsNativeCore by @kingsword09 in #6737
  • refactor(services): impl Debug for all service builders by @koushiro in #6756
  • refactor(types)!: use string-based scheme over enum-based approach by @koushiro in #6765

Fixed

Docs

CI

Chore

  • ci: switches etcd image to official etcd image by @kingsword09 in #6562
  • chore(bindings/nodejs): replace custom sleep with setTimeout in tests by @kingsword09 in #6563
  • chore(layers/prometheus-client): upgrade prometheus-client dependency to v0.24 by @koushiro in #6523
  • chore(core): typo: update comments on BytesRange::new by @TheR1sing3un in #6570
  • chore(website): update The ASF logo by @suyanhanx in #6575
  • chore: fix website build by @tisonkun in #6579
  • chore: make clippy happy when using rust 1.90.0 by @kingsword09 in #6590
  • chore: apache project provides code under ALv2 by @tisonkun in #6598
  • chore: remove dead project openval by @Xuanwo in #6604
  • chore: upgrade opentelemetry to 0.31.0 by @tisonkun in #6623
  • chore(deps): bump tempfile from 3.20.0 to 3.23.0 in /bin/ofs by @dependabot[bot] in #6611
  • chore(deps): bump tempfile from 3.21.0 to 3.23.0 in /bin/oli by @dependabot[bot] in #6610
  • chore(deps): update datafusion requirement from 49.0.2 to 50.0.0 in /integrations/object_store by @dependabot[bot] in #6613
  • chore(deps): bump @docusaurus/plugin-client-redirects from 3.8.1 to 3.9.1 in /website by @dependabot[bot] in #6614
  • chore: avoid build warning by @tisonkun in #6627
  • build: update docusaurus together by @asukaminato0721 in #6626
  • chore(deps): bump the github-actions group with 8 updates by @dependabot[bot] in #6633
  • chore(deps): bump logforth from 0.27.0 to 0.28.1 in /bin/ofs by @dependabot[bot] in #6629
  • chore(deps): bump the http-serialization-utils group in /core with 7 updates by @dependabot[bot] in #6634
  • chore(deps): bump clap from 4.5.38 to 4.5.41 in /bin/oli by @dependabot[bot] in #6630
  • chore(deps): bump the logs-errors-checksums group in /core with 2 updates by @dependabot[bot] in #6635
  • chore(deps): bump the pyo3 group in /bindings/python with 2 updates by @dependabot[bot] in #6631
  • chore(deps): bump the third-party-actions group with 2 updates by @dependabot[bot] in #6636
  • chore(deps): bump axum from 0.7.9 to 0.8.6 in /bin/oay by @dependabot[bot] in #6612
  • chore(deps): bump the others group in /core with 15 updates by @dependabot[bot] in #6637
  • chore: OpenDAL MSRV to 1.85 and edition 2024 by @fatelei in #6615
  • refactor!: migrate chrono to jiff by @tisonkun in #6643
  • chore: support more error codes for S3-compatible services by @leiysky in #6651
  • chore: fixup timestamp refactor by @tisonkun in #6663
  • chore: remove oay: delete bin/oay; drop CI; update release/dev tooling, dependabot, docs by @tao12345666333 in #6691
  • chore: cleanup for moving oli/ofs and removing oay (#6689) by @tao12345666333 in #6700
  • chore(deps): bump actions/setup-node from 5 to 6 in the github-actions group by @dependabot[bot] in #6695
  • chore(deps): bump the http-serialization-utils group across 1 directory with 3 updates by @dependabot[bot] in #6717
  • chore(deps): bump the others group in /core with 2 updates by @dependabot[bot] in #6698
  • chore(deps): bump tokio from 1.47.1 to 1.48.0 in /core in the async-runtime group by @dependabot[bot] in #6696
  • chore: remove integrations cloud_filter and fuse3; update CI/docs/README by @tao12345666333 in #6727
  • chore: fixup README render and broken links by @tisonkun in #6735
  • chore: apply suggestions from clippy 1.91.0 by @kingsword09 in #6754
  • chore: cleanup some useless code related to services that were removed due to lack of maintenance by @koushiro in #6763
  • chore: rename delete module => deleter module; ServiceAccessor => ServiceBackend by @koushiro in #6757
  • chore(services): unify scheme usage by @koushiro in #6764
  • chore(services): remove empty list operation and update docs of all services by @koushiro in #6768
  • Bump to version 0.55.0 by @Xuanwo in #6771
  • chore(types)!: remove deprecated Operator::from_map and Operator::via_map by @koushiro in #6775
  • chore(types)!: remove deprecated list_with_version capability by @koushiro in #6781
  • chore(services/s3)!: remove deprecated S3::security_token by @koushiro in #6779
  • chore(services/fs): use NotADirectory directly by @meteorgan in #6786
  • chore: Fix build by @Xuanwo in #6789
  • chore: Don't introduce openssl for python binding by @Xuanwo in #6790

New Contributors

Full Changelog: v0.54.1...v0.55.0

Don't miss a new opendal release

NewReleases is sending notifications on new releases.