Releases: apache/opendal
v0.51.1 - Look, a new day has begun
This release's subtitle is "v0.51.1 - Look, a new day has begun".
Look, a new day has begun is the ending of Memory song.
It was written for the 1981 musical Cats, where it is sung primarily by the character Grizabella as a melancholic remembrance of her glamorous past and as a plea for acceptance. "Memory" is the climax of the musical and by far its best-known song, having achieved mainstream success outside of the musical.
I watched the live performance of Cats and was deeply moved. I hope every member of the OpenDAL community will also "understand what happiness is." The most important thing is that "a new day has begun." Let’s move forward and carry on.
Here are links to Memory, hoping you will love it too:
- Youtube: https://www.youtube.com/watch?v=8gd_ohoPzYc
- Bilibili: https://www.bilibili.com/video/BV1U5aSebE1i
What's Changed
Added
- feat(bin/oli): implement oli bench by @tisonkun in #5443
- feat(dev): Add config parse and generate support by @Xuanwo in #5454
- feat(bindings/python): generate python operator constructor types by @trim21 in #5457
- feat(dev): Parse comments from config by @Xuanwo in #5467
- feat(services/core): Implement stat_has_* and list_has_* correctly for services by @geetanshjuneja in #5472
- feat: Add if-match & if-none-match support for reader by @XmchxUp in #5492
- feat(core): Add is_current to metadata by @Wenbin1002 in #5493
- feat(core): Implement list with deleted for s3 service by @Xuanwo in #5498
- feat: generate java configs by @tisonkun in #5503
- feat: Return hinted error for S3 wildcard if-none-match by @gruuya in #5506
- feat(core): implement if_modified_since and if_unmodified_since for read_with and reader_with by @meteorgan in #5500
- feat(core): Implement list with deleted and versions for cos by @hoslo in #5514
Changed
- refactor: tidy up oli build by @tisonkun in #5438
- refactor(core): Deprecate OpList::version and add versions instead by @geetanshjuneja in #5481
- refactor(dev): use minijinja by @tisonkun in #5494
Fixed
- fix: exception name in python by @trim21 in #5453
- fix rust warning in python binding by @trim21 in #5459
- fix: python binding kwargs parsing by @trim21 in #5458
- fix(bindings/python): add py.typed marker file by @trim21 in #5464
- fix(services/ghac): Fix stat_with_if_none_match been set in wrong by @Xuanwo in #5477
- fix(ci): Correctly upgrade upload-artifact to v4 by @Xuanwo in #5484
- fix(integration/object_store): object_store requires metadata in list by @Xuanwo in #5501
- fix(services/s3): List with deleted should contain latest by @Xuanwo in #5518
Docs
- docs: Fix links to vision by @Xuanwo in #5466
- docs(golang): remove unused pkg by @fyqtian in #5473
- docs(core): Polish API docs for
Metadataby @Xuanwo in #5497 - docs: Polish docs for Operator, Reader and Writer by @Xuanwo in #5516
- docs: Reorganize docs for xxx_with for better reading by @Xuanwo in #5517
CI
- ci: disable windows free-thread build by @trim21 in #5449
- ci: Upgrade and fix typos by @Xuanwo in #5468
Chore
- chore(dev): Try just instead of xtasks methods by @Xuanwo in #5461
- chore: pretty gen javadoc by @tisonkun in #5508
- chore(ci): upgrade to manylinux_2_28 for aarch64 Python wheels by @messense in #5522
New Contributors
- @fyqtian made their first contribution in #5473
- @Wenbin1002 made their first contribution in #5493
- @gruuya made their first contribution in #5506
Full Changelog: v0.51.0...v0.51.1
v0.51.0 - 本当の僕らをありがとう
Upgrade
Rust Core Public API
New VISION: One Layer, All Storage
OpenDAL has refined its vision to One Layer, All Storage, driven by the following core principles: Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture.
Explore the detailed vision at OpenDAL Vision.
RFC-5313: Remove Metakey
OpenDAL v0.51 implements RFC-5313, which removes the concept of metakey.
The following structs have been removed:
Metakey
The following APIs have been removed:
list_with(path).metakey()
Users no longer need to pass the metakey into the list. Instead, services will make their best effort to return as much metadata as possible. Users can check items like Capability::list_has_etag before making a call.
Remove not used capability: write_multi_align_size
The capability write_multi_align_size is not utilized by any services, and we have no plans to support it in the future; therefore, we have removed it.
CapabilityCheckLayer and CorrectnessCheckLayer
OpenDAL used to perform capability checks for all services, but since v0.51, it only conducts checks that impact data correctness like write_with_if_not_exists or delete_with_version by default in the CorrectnessCheckLayer. If users wish to verify other non-critical capabilities like write_with_content_type or write_with_cache_control, they should manually enable the CapabilityCheckLayer.
RFC-3911: Deleter API
OpenDAL v0.51 implements RFC-3911, which adds Deleter in OpenDAL to replace batch operation.
The following new APIs have been added:
- [
Operator::delete_iter] - [
Operator::delete_try_iter] - [
Operator::delete_stream] - [
Operator::delete_try_stream] - [
Operator::deleter] - [
Deleter::delete] - [
Deleter::delete_iter] - [
Deleter::delete_try_iter] - [
Deleter::delete_stream] - [
Deleter::delete_try_stream] - [
Deleter::flush] - [
Deleter::close] - [
Deleter::into_sink] - [
DeleteInput] - [
IntoDeleteInput] - [
FuturesDeleteSink]
The following APIs have been deprecated and will be removed in the future releases:
Operator::remove(replace with [Operator::delete_iter])Operator::remove_via(replace with [Operator::delete_stream])
As a result of this change, the limit and with_limit APIs on Operator have also been deprecated; they are currently no-ops.
Rust Core Raw API
adapter::kv now returns Scanner instead of Vec<String>
To support returning key-value entries in a streaming manner instead of loading them all into memory, OpenDAL updated its adapter API to return a Scanner instead of a Vec<String>.
- async fn scan(&self, path: &str) -> Result<Vec<String>>
+ async fn scan(&self, path: &str) -> Result<Self::Scanner>All services intending to implement kv::Adapter should adhere to this API change.
Align metadata API to info
OpenDAL changes it's old metadata API to info to align with the new AccessorInfo struct.
- fn metadata(&self) -> Arc<AccessorInfo>
+ fn info(&self) -> Arc<AccessorInfo>Remove not used struct: RangeWriter
The struct RangeWriter is not utilized by any services, and we have no plans to support it in the future; therefore, we have removed it.
What's Changed
Added
- feat(adapter/kv): support async iterating on scan results by @PragmaTwice in #5208
- feat(bindings/ruby): Add simple operators to Ruby binding by @erickguan in #5246
- feat(core/services-gcs): support user defined metadata by @jorgehermo9 in #5276
- feat(core): add
if_not_existinOpWriteby @kemingy in #5305 - feat: Add {stat,list}has* to carry the metadata that backend returns by @Xuanwo in #5318
- feat(core): Implement write if not exists for azblob,azdls,gcs,oss,cos by @Xuanwo in #5321
- feat(core): add new cap shared by @TennyZhuang in #5328
- feat(bindings/python): support pickle [de]serialization for Operator by @TennyZhuang in #5324
- feat(bindings/cpp): init the async support of C++ binding by @PragmaTwice in #5195
- feat(bindings/go): support darwin by @yuchanns in #5334
- feat(services/gdrive): List shows modified timestamp gdrive by @erickguan in #5226
- feat(service/s3): support delete with version by @Frank-III in #5349
- feat: upgrade pyo3 to 0.23 by @XmchxUp in #5368
- feat: publish python3.13t free-threaded wheel by @XmchxUp in #5387
- feat: add progress bar for oli cp command by @waynexia in #5369
- feat(types/buffer): skip copying in
to_byteswhenNonContiguouscontains a singleBytesby @ever0de in #5388 - feat(bin/oli): support command mv by @meteorgan in #5370
- feat(core): add if-match to
OpWriteby @Frank-III in #5360 - feat(core/layers): add correctness_check and capability_check layer to verify whether the operation and arguments is supported by @meteorgan in #5352
- feat(bindings/ruby): Add I/O class for Ruby by @erickguan in #5354
- feat(core): Add
content_encodingtoMetaDataby @Frank-III in #5400 - feat:(core): add
content encodingtoOpwriteby @Frank-III in #5390 - feat(services/obs): support user defined metadata by @Frank-III in #5405
- feat: impl configurable OperatorOutputStream maxBytes by @tisonkun in #5422
Changed
- refactor (bindings/zig): Improvements by @kassane in #5247
- refactor: Remove metakey concept by @Xuanwo in #5319
- refactor(core)!: Remove not used cap write_multi_align_size by @Xuanwo in #5322
- refactor(core)!: Remove the range writer that has never been used by @Xuanwo in #5323
- refactor(core): MaybeSend does not need to be unsafe by @drmingdrmer in #5338
- refactor: Implement RFC-3911 Deleter API by @Xuanwo in #5392
- refactor: Remove batch concept from opendal by @Xuanwo in #5393
Fixed
- fix(services/webdav): Fix lister failing when root contains spaces by @skrimix in #5298
- fix(bindings/c): Bump min CMake version to support CMP0135 by @palash25 in #5308
- fix(services/webhdfs): rename auth value by @notauserx in #5342
- fix(bindings/cpp): remove the warning of CMP0135 by @PragmaTwice in #5346
- build(python): fix pyproject meta file by @trim21 in #5348
- fix(services/unftp): add
/when not presented by @Frank-III in #5382 - fix: update document against target format check and add hints by @waynexia in #5361
- fix: oli clippy and CI file by @waynexia in #5389
- fix(services/obs): support huawei.com by @FayeSpica in #5399
- fix(integrations/cloud_filter): use explicit
statinstead ofEntry::metadatainfetch_placeholdersby @ho-229 in #5416 - fix(core): S3 multipart uploads does not set file metadata by @catcatmu in #5430
- fix: always contains path label if configured by @waynexia in #5433
Docs
- docs: Enable force_orphan to reduce clone size by @Xuanwo in #5289
- docs: Establish VISION for "One Layer, All Storage" by @Xuanwo in #5309
- docs: Polish docs for write with if not exists by @Xuanwo in #5320
- docs(core): add the description of version parameter for operator by @meteorgan in #5144
- docs(core): Add upgrade to v0.51 by @Xuanwo in #5406
- docs: Update release.md by @tisonkun in #5431
CI
- ci: Remove the token of codspeed by @Xuanwo in #5283
- ci: Allow force push for
gh-pagesby @Xuanwo in #5290 - build(bindings/java): fix lombok process by @tisonkun in #5297
- build(bindings/python): add python 3.10 back and remove pypy by @trim21 in #5347
Chore
v0.50.2
Release List
| Name | Version | Next |
|---|---|---|
| core | 0.50.1 | 0.50.2 |
| integrations/cloud_filter | 0.0.2 | 0.0.3 |
| integrations/compat | 1.0.0 | 1.0.1 |
| integrations/dav-server | 0.2.1 | 0.2.2 |
| integrations/fuse3 | 0.0.8 | 0.0.9 |
| integrations/object_store | 0.48.1 | 0.48.2 |
| integrations/parquet | 0.2.1 | 0.2.2 |
| integrations/spring | - | - |
| integrations/unftp-sbe | 0.0.8 | 0.0.9 |
| integrations/virtiofs | - | - |
| bin/oay | 0.41.12 | 0.41.13 |
| bin/ofs | 0.0.13 | 0.0.14 |
| bin/oli | 0.41.12 | 0.41.13 |
| bindings/c | 0.45.0 | 0.45.1 |
| bindings/cpp | 0.45.12 | 0.45.13 |
| bindings/dotnet | 0.1.10 | 0.1.11 |
| bindings/go | 0.1.4 | 0.1.5 |
| bindings/haskell | 0.44.12 | 0.44.13 |
| bindings/java | 0.47.4 | 0.47.5 |
| bindings/lua | 0.1.10 | 0.1.11 |
| bindings/nodejs | 0.47.6 | 0.47.7 |
| bindings/ocaml | - | - |
| bindings/php | 0.1.10 | 0.1.11 |
| bindings/python | 0.45.11 | 0.45.12 |
| bindings/ruby | 0.1.10 | 0.1.11 |
| bindings/swift | - | - |
| bindings/zig | - | - |
What's Changed
Added
- feat(services/ftp): List dir shows last modified timestamp by @erickguan in #5213
- feat(bindings/d): add D bindings support by @kassane in #5181
- feat(bindings/python): add sync
File.readlineby @TennyZhuang in #5271 - feat(core/services-azblob): support user defined metadata by @jorgehermo9 in #5274
- feat(core/services-s3): try load endpoint from config by @TennyZhuang in #5279
Changed
Fixed
- fix: add all-features flag for opendal_compat doc build by @XmchxUp in #5234
- fix(integrations/compat): Capability has different fields by @Xuanwo in #5236
- fix(integration/compat): Fix opendal 0.50 OpList has new field by @Xuanwo in #5238
- fix(integrations/compat): Fix dead loop happened during list by @Xuanwo in #5240
Docs
- docs: Move our release process to github discussions by @Xuanwo in #5217
- docs: change "Github" to "GitHub" by @MohammadLotfiA in #5250
CI
- ci(asf): Don't add
[DISCUSS]prefix for discussion by @Xuanwo in #5210 - build: enable services-mysql for Java and Python bindings by @tisonkun in #5222
- build(binding/python): Support Python 3.13 by @Zheaoli in #5248
Chore
- chore(bin/*): remove useless deps by @koushiro in #5212
- chore: tidy up c binding build and docs by @tisonkun in #5243
- chore(core/layers): adjust await point to simplify combinator code by @koushiro in #5255
- chore(core/blocking_operator): deduplicate deprecated
is_existlogic by @simonsan in #5261 - chore(deps): bump actions/cache from 3 to 4 by @dependabot in #5262
- chore: run object_store tests in CI by @jorgehermo9 in #5268
New Contributors
- @MohammadLotfiA made their first contribution in #5250
- @simonsan made their first contribution in #5261
Full Changelog: v0.50.1...v0.50.2
v0.50.1
Upgrade
Bindings C upgrade to v0.45
Change to use Cmake to build the C binding.
Release List
| Name | Version | Next |
|---|---|---|
| core | 0.50.0 | 0.50.1 |
| integrations/cloud_filter | 0.0.1 | 0.0.2 |
| integrations/compat | - | 1.0.0 |
| integrations/dav-server | 0.2.0 | 0.2.1 |
| integrations/fuse3 | 0.0.7 | 0.0.8 |
| integrations/object_store | 0.48.0 | 0.48.1 |
| integrations/parquet | 0.2.0 | 0.2.1 |
| integrations/spring | - | - |
| integrations/unftp-sbe | 0.0.7 | 0.0.8 |
| integrations/virtiofs | - | - |
| bin/oay | 0.41.11 | 0.41.12 |
| bin/ofs | 0.0.12 | 0.0.13 |
| bin/oli | 0.41.11 | 0.41.12 |
| bindings/c | 0.44.13 | 0.45.0 |
| bindings/cpp | 0.45.11 | 0.45.12 |
| bindings/dotnet | 0.1.9 | 0.1.10 |
| bindings/go | 0.1.3 | 0.1.4 |
| bindings/haskell | 0.44.11 | 0.44.12 |
| bindings/java | 0.47.3 | 0.47.4 |
| bindings/lua | 0.1.9 | 0.1.10 |
| bindings/nodejs | 0.47.5 | 0.47.6 |
| bindings/ocaml | - | - |
| bindings/php | 0.1.9 | 0.1.10 |
| bindings/python | 0.45.10 | 0.45.11 |
| bindings/ruby | 0.1.9 | 0.1.10 |
| bindings/swift | - | - |
| bindings/zig | - | - |
What's Changed
Added
- feat(core/redis): Replace client requests with connection pool by @jackyyyyyssss in #5117
- feat: add copy api for lakefs service. by @liugddx in #5114
- feat(core): add version(bool) for List operation to include version d… by @meteorgan in #5106
- feat(bindings/python): export ConcurrentLimitLayer by @TennyZhuang in #5140
- feat(bindings/c): add writer operation for Bindings C and Go by @yuchanns in #5141
- feat(ofs): introduce ofs macos support by @oowl in #5136
- feat: Reduce stat operation if we are reading all by @Xuanwo in #5146
- feat: add NebulaGraph config by @GG2002 in #5147
- feat(integrations/spring): add spring serialize method by @shoothzj in #5154
- feat: support write,read,delete with template by @shoothzj in #5156
- feat(bindings/java): support ConcurrentLimitLayer by @tisonkun in #5168
- feat: Add if_none_match for write by @ForestLH in #5129
- feat: Add OpenDAL Compat by @Xuanwo in #5185
- feat(core): abstract HttpFetch trait for raw http client by @everpcpc in #5184
- feat: Support NebulaGraph by @GG2002 in #5116
- feat(bindings/cpp): rename is_exist to exists as core did by @PragmaTwice in #5198
- feat(bindings/c): add opendal_operator_exists and mark is_exist deprecated by @PragmaTwice in #5199
- feat(binding/java): prefix thread name with opendal-tokio-worker by @tisonkun in #5197
Changed
- refactor(services/cloudflare-kv): remove unneeded async and result on parse_error by @tsfotis in #5128
- refactor(*): remove unneeded async and result on parse_error by @tsfotis in #5131
- refactor: align C binding pattern by @tisonkun in #5160
- refactor: more consistent C binding pattern by @tisonkun in #5162
- refactor(integration/parquet): Use ParquetMetaDataReader instead by @Xuanwo in #5170
- refactor: resolve c pointers const by @tisonkun in #5171
- refactor(types/operator): rename is_exist to exists by @photino in #5193
Fixed
- fix(services/huggingface): Align with latest HuggingFace API by @morristai in #5123
- fix(bindings/c): use
ManuallyDropinstead offorgetto make sure pointer is valid by @ethe in #5166 - fix(services/s3): Mark xml deserialize error as temporary during list by @Xuanwo in #5178
Docs
- docs: add spring integration configuration doc by @shoothzj in #5053
- docs: improve Node.js binding's test doc by @tisonkun in #5159
- docs(bindings/c): update docs for CMake replacing by @PragmaTwice in #5186
CI
- ci(bindings/nodejs): Fix diff introduced by napi by @Xuanwo in #5121
- ci: Disable aliyun drive test until #5163 addressed by @Xuanwo in #5164
- ci: add package cache for build-haskell-doc by @XmchxUp in #5173
- ci: add cache action for ci_bindings_ocaml & build-ocaml-doc by @XmchxUp in #5174
- ci: Fix failing CI on ocaml and python by @Xuanwo in #5177
- build(bindings/c): replace the build system with CMake by @PragmaTwice in #5182
- build(bindings/cpp): fetch and build dependencies instead of finding system libs by @PragmaTwice in #5188
- ci: Remove not needed --break-system-packages by @Xuanwo in #5196
- ci: Send discussions to [email protected] by @Xuanwo in #5201
Chore
- chore(bindings/python): deprecate via_map method by @TennyZhuang in #5134
- chore: update binding java artifact name in README by @tisonkun in #5137
- chore(fixtures/s3): Upgrade MinIO version by @ForestLH in #5142
- chore(deps): bump clap from 4.5.17 to 4.5.18 in /bin/ofs by @dependabot in #5149
- chore(deps): bump crate-ci/typos from 1.24.3 to 1.24.6 by @dependabot in #5150
- chore(deps): bump anyhow from 1.0.87 to 1.0.89 in /bin/oay by @dependabot in #5151
- chore(deps): bump anyhow from 1.0.87 to 1.0.89 in /bin/oli by @dependabot in #5152
- chore: fix typos in tokio_executor.rs by @tisonkun in #5157
- chore: hint when java tests are skipped by @tisonkun in #5158
- chore: Include license in the packaged crate by @davide125 in #5176
New Contributors
- @BaurzhanSakhariev made their first contribution in #5120
- @tsfotis made their first contribution in #5128
- @ForestLH made their first contribution in #5142
- @ethe made their first contribution in #5166
- @XmchxUp made their first contribution in #5173
- @davide125 made their first contribution in #5176
- @photino made their first contribution in #5193
Full Changelog: v0.50.0...v0.50.1
v0.50.0
Release List
| Name | Version | Next |
|---|---|---|
| core | 0.49.2 | 0.50.0 |
| integrations/dav-server | 0.1.0 | 0.1.1 |
| integrations/fuse3 | 0.0.6 | 0.0.7 |
| integrations/object_store | 0.47.0 | 0.47.1 |
| integrations/parquet | 0.1.2 | 0.2.0 |
| integrations/unftp-sbe | 0.0.6 | 0.0.7 |
| bin/oay | 0.41.10 | 0.41.11 |
| bin/ofs | 0.0.11 | 0.0.12 |
| bin/oli | 0.41.10 | 0.41.11 |
| bindings/c | 0.44.12 | 0.44.13 |
| bindings/cpp | 0.45.10 | 0.45.11 |
| bindings/dotnet | 0.1.8 | 0.1.9 |
| bindings/go | 0.1.2 | 0.1.3 |
| bindings/haskell | 0.44.10 | 0.44.11 |
| bindings/java | 0.47.2 | 0.47.3 |
| bindings/lua | 0.1.8 | 0.1.9 |
| bindings/nodejs | 0.47.4 | 0.47.5 |
| bindings/php | 0.1.8 | 0.1.9 |
| bindings/python | 0.45.9 | 0.45.10 |
| bindings/ruby | 0.1.8 | 0.1.9 |
Upgrade to OpenDAL Core v0.50
Public API
services-postgresql's connect string now supports only URL format
Previously, it supports both URL format and key-value format. After switching the implementation from tokio-postgres to sqlx, the service now supports only the URL format.
list now returns path itself
Previously, list("a/b") would not return a/b even if it does exist. Since v0.50.0, this behavior has been changed. OpenDAL will now return the path itself if it exists. This change applies to all cases, whether the path is a directory or a file.
Refactoring of the metrics-related layer
In OpenDAL v0.50.0, we did a refactor on all metrics-related layers. They are now sharing the same underlying implemenationts. PrometheusLayer, PrometheusClientLayer and MetricsLayer are now have similar public APIs and exactly the same metrics value.
What's Changed
Added
- feat(core)!: make list return path itself by @meteorgan in #4959
- feat(services/oss): support role_arn and oidc_provider_arn by @tisonkun in #5063
- feat(services): add lakefs support by @liugddx in #5086
- feat: add list api for lakefs service. by @liugddx in #5092
- feat: add write api for lakefs service. by @liugddx in #5100
- feat: add delete api for lakefs service. by @liugddx in #5107
Changed
- refactor: use sqlx for sql services by @tisonkun in #5040
- refactor(core)!: Add observe layer as building block by @Xuanwo in #5064
- refactor(layers/prometheus): rewrite prometheus layer based on observe mod by @koushiro in #5069
- refactor(bindings/java): replace
num_cpuswithstd::thread::available_parallelismby @miroim in #5080 - refactor(layers/prometheus): provide builder APIs by @koushiro in #5072
- refactor(layers/prometheus-client): provide builder APIs by @koushiro in #5073
- refactor(layers/metrics): rewrite metrics layer using observe layer by @koushiro in #5098
Fixed
- fix(core): TimeoutLayer now needs enable tokio time by @Xuanwo in #5057
- fix(core): Fix failed list related tests by @Xuanwo in #5058
- fix(services/memory): blocking_scan right range by @meteorgan in #5062
- fix(core/services/mysql): Fix mysql Capability by @jackyyyyyssss in #5067
- fix: fix rust 1.76 error due to temporary value being dropped by @aawsome in #5071
- fix(service/fs): error due to temporary value being dropped by @miroim in #5079
- fix(core/services/hdfs): Fix the HDFS write failure when atomic_write_dir is set by @meteorgan in #5039
- fix(services/icloud): adjust error handling code to avoid having to write out result type explicitly by @koushiro in #5091
- fix(services/monoiofs): handle async cancel during file open by @NKID00 in #5094
Docs
CI
- ci(bindings/go): add golangci-lint by @yuchanns in #5060
- ci(bindings/zig): Fix build and test of zig on 0.13 by @Xuanwo in #5102
- ci: Don't publish with all features by @Xuanwo in #5108
- ci: Fix upload-artifacts doesn't include hidden files by @Xuanwo in #5112
Chore
- chore(bindings/go): bump ffi and sys version by @shoothzj in #5055
- chore: Bump backon to 1.0.0 by @Xuanwo in #5056
- chore(services/rocksdb): fix misuse rocksdb prefix iterator by @meteorgan in #5059
- chore(README): add Go binding badge by @yuchanns in #5074
- chore(deps): bump crate-ci/typos from 1.23.6 to 1.24.3 by @dependabot in #5085
- chore(layers/prometheus-client): export
PrometheusClientLayerBuildertype by @koushiro in #5093 - chore(layers): check the examples when running tests by @koushiro in #5104
- chore(integrations/parquet): Bump parquet to 53 by @Xuanwo in #5109
- chore: Bump OpenDAL to 0.50.0 by @Xuanwo in #5110
New Contributors
- @jackyyyyyssss made their first contribution in #5067
- @aawsome made their first contribution in #5071
- @liugddx made their first contribution in #5086
Full Changelog: v0.49.2...v0.50.0
v0.49.2
Release List
| Name | Version |
|---|---|
| core | 0.49.2 |
| integrations/dav-server | 0.1.0 |
| integrations/fuse3 | 0.0.6 |
| integrations/object_store | 0.47.0 |
| integrations/parquet | 0.1.2 |
| integrations/unftp-sbe | 0.0.6 |
| bin/oay | 0.41.10 |
| bin/ofs | 0.0.11 |
| bin/oli | 0.41.10 |
| bindings/c | 0.44.12 |
| bindings/cpp | 0.45.10 |
| bindings/dotnet | 0.1.8 |
| bindings/go | 0.1.2 |
| bindings/haskell | 0.44.10 |
| bindings/java | 0.47.2 |
| bindings/lua | 0.1.8 |
| bindings/nodejs | 0.47.4 |
| bindings/php | 0.1.8 |
| bindings/python | 0.45.9 |
| bindings/ruby | 0.1.8 |
What's Changed
Added
- feat(ovfs): support read and write by @zjregee in #5016
- feat(bin/ofs): introduce
integrations/cloudfilterfor ofs by @ho-229 in #4935 - feat(integrations/spring): add AutoConfiguration class for Spring Mvc and Webflux by @shoothzj in #5019
- feat(services/monoiofs): impl read and write, add behavior test by @NKID00 in #4944
- feat(core/services-s3): support user defined metadata by @haoqixu in #5030
- feat: align
fn rootsemantics; fix missing root for some services; rm duplicated normalize ops by @yjhmelody in #5035 - feat(core): expose configs always by @tisonkun in #5034
- feat(services/monoiofs): append, create_dir, copy and rename by @NKID00 in #5041
Changed
- refactor(core): new type to print context and reduce allocations by @evenyag in #5021
- refactor(layers/prometheus-client): remove useless
schemefield fromPrometheusAccessorandPrometheusMetricWrappertype by @koushiro in #5026 - refactor(layers/prometheus-client): avoid multiple clone of labels by @koushiro in #5028
- refactor(core/services-oss): remove the
starts_withby @haoqixu in #5036
Fixed
- fix(layers/prometheus-client): remove duplicated
increment_request_totalof write operation by @koushiro in #5023 - fix(services/monoiofs): drop JoinHandle in worker thread by @NKID00 in #5031
CI
- ci: Add contents write permission for build-website by @Xuanwo in #5017
- ci: Fix test for service ghac by @Xuanwo in #5018
- ci(integrations/spring): add spring boot bean load test by @shoothzj in #5032
Chore
- chore: fix path typo in release docs by @tisonkun in #5038
- chore: align the
tokenmethod semantics by @yjhmelody in #5045
New Contributors
- @MahdiBaghbani made their first contribution in #5020
- @haoqixu made their first contribution in #5030
- @yjhmelody made their first contribution in #5035
Full Changelog: v0.49.1...v0.49.2
v0.49.1
Release List
| Name | Next |
|---|---|
| core | 0.49.1 |
| integrations/dav-server | 0.0.8 |
| integrations/fuse3 | 0.0.5 |
| integrations/object_store | 0.46.1 |
| integrations/parquet | 0.1.1 |
| integrations/unftp-sbe | 0.0.5 |
| bin/oay | 0.41.9 |
| bin/ofs | 0.0.10 |
| bin/oli | 0.41.9 |
| bindings/c | 0.44.11 |
| bindings/cpp | 0.45.9 |
| bindings/dotnet | 0.1.7 |
| bindings/go | 0.1.1 |
| bindings/haskell | 0.44.9 |
| bindings/java | 0.47.1 |
| bindings/lua | 0.1.7 |
| bindings/nodejs | 0.47.3 |
| bindings/php | 0.1.7 |
| bindings/python | 0.45.8 |
| bindings/ruby | 0.1.7 |
What's Changed
Added
- feat(ovfs): add lookup and unit tests by @zjregee in #4997
- feat(gcs): allow setting a token directly by @jdockerty in #4978
- feat(integrations/cloudfilter): introduce behavior tests by @ho-229 in #4973
- feat(integrations/spring): add spring project module by @shoothzj in #4988
- feat(fs): expose the metadata for fs services by @Aitozi in #5005
- feat(ovfs): add file creation and deletion by @zjregee in #5009
Fixed
- fix(integrations/spring): correct parent artifactId by @shoothzj in #5007
- fix(bindings/python): Make sure read until EOF by @Bicheka in #4995
Docs
- docs: Fix version detect in website by @Xuanwo in #5003
- docs: add branding, license and trademarks to integrations by @PsiACE in #5006
- docs(integrations/cloudfilter): improve docs and examples by @ho-229 in #5010
CI
Chore
- chore(deps): bump fastrace to 0.7.1 by @andylokandy in #5008
- chore(bindings): Disable mysql service for java and python by @Xuanwo in #5013
- chore: Bump version to 0.49.1 - Round 2 by @Xuanwo in #5014
New Contributors
Full Changelog: v0.49.0...v0.49.1
v0.49.0
Release List
| Name | Next |
|---|---|
| core | 0.49.0 |
| integrations/dav-server | 0.0.7 |
| integrations/fuse3 | 0.0.4 |
| integrations/object_store | 0.46.0 |
| integrations/parquet | 0.1.0 |
| integrations/unftp-sbe | 0.0.4 |
| bin/oay | 0.41.8 |
| bin/ofs | 0.0.9 |
| bin/oli | 0.41.8 |
| bindings/c | 0.44.10 |
| bindings/cpp | 0.45.8 |
| bindings/dotnet | 0.1.6 |
| bindings/go | 0.1.0 |
| bindings/haskell | 0.44.8 |
| bindings/java | 0.47.0 |
| bindings/lua | 0.1.6 |
| bindings/nodejs | 0.47.2 |
| bindings/php | 0.1.6 |
| bindings/python (*) | 0.45.8 |
| bindings/ruby | 0.1.6 |
- (*): We expected to release Python
0.45.8, but due to #5000, we were unable to. We will release it next time.
OpenDAL Core Upgrade to v0.49
Public API
Configurator now returns associated builder instead
Configurator used to return impl Builder, but now it returns associated builder type directly. This will allow users to use the builder in a more flexible way.
impl Configurator for MemoryConfig {
- fn into_builder(self) -> impl Builder {
+ type Builder = MemoryBuilder;
+ fn into_builder(self) -> Self::Builder {
MemoryBuilder { config: self }
}
}LoggingLayer now accepts LoggingInterceptor
LoggingLayer now accepts LoggingInterceptor trait instead of configuration. This change will allow users to customize the logging behavior more flexibly.
pub trait LoggingInterceptor: Debug + Clone + Send + Sync + Unpin + 'static {
fn log(
&self,
info: &AccessorInfo,
operation: Operation,
context: &[(&str, &str)],
message: &str,
err: Option<&Error>,
);
}Users can now implement the log in the way they want.
OpenDAL Java Binding Upgrade to v0.47
Breaking change
artifactId of the opendal-java has changed from to opendal to align with the convention of entire OpenDAL project.
<dependencies>
<dependency>
<groupId>org.apache.opendal</groupId>
- <artifactId>opendal-java</artifactId>
+ <artifactId>opendal</artifactId>
<version>${opendal.version}</version>
</dependency>
<dependency>
<groupId>org.apache.opendal</groupId>
- <artifactId>opendal-java</artifactId>
+ <artifactId>opendal</artifactId>
<version>${opendal.version}</version>
<classifier>${os.detected.classifier}</classifier>
</dependency>
</dependencies>What's Changed
Added
- feat(o): Add cargo-o layout by @Xuanwo in #4934
- feat: impl
put_multipartinobject_storeby @Rachelint in #4793 - feat: introduce opendal
AsyncWriterfor parquet integrations by @WenyXu in #4958 - feat(services/http): implement presigned request for backends without authorization by @NickCao in #4970
- feat(bindings/python): strip the library for minimum file size by @NickCao in #4971
- feat(gcs): allow unauthenticated requests by @jdockerty in #4965
- feat: introduce opendal
AsyncReaderfor parquet integrations by @WenyXu in #4972 - feat(services/s3): add role_session_name in assume roles by @nerdroychan in #4981
- feat: support root path for moka and mini-moka by @meteorgan in #4984
- feat(ovfs): export VirtioFs struct by @zjregee in #4983
- feat(core)!: implement an interceptor for the logging layer by @evenyag in #4961
- feat(ovfs): support getattr and setattr by @zjregee in #4987
Changed
- refactor(java)!: Rename artifacts id opendal-java to opendal by @Xuanwo in #4957
- refactor(core)!: Return associated builder instead by @Xuanwo in #4968
- refactor(raw): Merge all operations into one enum by @Xuanwo in #4977
- refactor(core): Use kv based context to avoid allocations by @Xuanwo in #4986
Fixed
- fix(services/memory): MemoryConfig implement Debug by @0x676e67 in #4942
- fix(layers/promethues-client): doc link by @koushiro in #4951
- fix(gcs): do not skip signing with
allow_anonymousby @jdockerty in #4979
Docs
CI
- ci: Bump nextest to 0.9.72 by @Xuanwo in #4932
- ci: setup cloudfilter by @ho-229 in #4936
- ci: Try fix opendal-lua build by @Xuanwo in #4952
Chore
- chore(deps): bump crate-ci/typos from 1.22.9 to 1.23.6 by @dependabot in #4948
- chore(deps): bump tokio from 1.39.1 to 1.39.2 in /bin/oli by @dependabot in #4949
- chore(deps): bump bytes from 1.6.1 to 1.7.0 in /bin/ofs by @dependabot in #4947
- chore(deps): bump tokio from 1.39.1 to 1.39.2 in /bin/oay by @dependabot in #4946
- chore(core): fix nightly lints by @xxchan in #4953
- chore(integrations/parquet): add README by @WenyXu in #4980
- chore(core): Bump redis version by @Xuanwo in #4985
- chore: Bump package versions by @Xuanwo in #4989
New Contributors
- @0x676e67 made their first contribution in #4942
- @Rachelint made their first contribution in #4793
- @koushiro made their first contribution in #4951
- @NickCao made their first contribution in #4970
- @jdockerty made their first contribution in #4965
- @nerdroychan made their first contribution in #4981
Full Changelog: v0.48.0...v0.49.0
v0.48.0
Release List
| Name | Version |
|---|---|
| core | 0.48.0 |
| integrations/cloudfilter | 0.0.0 |
| integrations/dav-server | 0.0.6 |
| integrations/fuse3 | 0.0.3 |
| integrations/object_store | 0.45.0 |
| integrations/unftp-sbe | 0.0.3 |
| bin/oay | 0.41.7 |
| bin/ofs | 0.0.8 |
| bin/oli | 0.41.7 |
| bindings/c | 0.44.9 |
| bindings/cpp | 0.45.7 |
| bindings/dotnet | 0.1.5 |
| bindings/haskell | 0.44.7 |
| bindings/java | 0.46.4 |
| bindings/lua | 0.1.5 |
| bindings/nodejs | 0.47.1 |
| bindings/php | 0.1.5 |
| bindings/python | 0.45.7 |
| bindings/ruby | 0.1.5 |
OpenDAL Core Upgrade to v0.48
Public API
Typo in customized_credential_load
Since v0.48, the customed_credential_load function has been renamed to customized_credential_load to fix the typo of customized.
- builder.customed_credential_load(v);
+ builder.customized_credential_load(v);S3 service rename security_token to session_token
In 2014 Amazon switched from AWS_SECURITY_TOKEN to AWS_SESSION_TOKEN. To be consistent with the naming of AWS STS, we have renamed the security_token field to session_token in the S3 service.
- builder.security_token(v);
+ builder.session_token(v);Operator from_iter and via_iter replaces from_map and via_map
Since v0.48, Operator's new APIs from_iter and via_iter methods have deprecated the from_map and via_map methods.
- Operator::from_map::<Fs>(map)?.finish();
+ Operator::from_iter::<Fs>(map)?.finish();New API from_iter and via_iter should cover all use cases of from_map and via_map.
Service builder now takes ownership
Since v0.48, all service builder now takes ownership self instead of &mut self. This change will allow users to configure the service in a more flexible way.
- let mut builder = S3::default();
- builder.bucket("test");
- builder.root("/path/to/root");
+ let builder = S3::default().bucket("test").root("/path/to/root");
let op = Operator::new(builder)?.finish();Raw API
oio::Write::write will write the whole buffer
Starting from version 0.48, oio::Write::write now writes the entire buffer. This update aligns the API more closely with oio::Read::read and simplifies the implementation of concurrent writing.
trait Write {
- fn write(&mut self, bs: Buffer) -> impl Future<Output = Result<usize>>;
+ fn write(&mut self, bs: Buffer) -> impl Future<Output = Result<()>>;
}write will now return Result<()> instead of Result<usize>. The number of bytes written can be obtained from the buffer's length.
Access::metadata() will return Arc<AccessInfo>
Starting from version 0.48, Access::metadata() will return Arc<AccessInfo> instead of AccessInfo. This change is intended to improve performance and reduce memory usage.
trait Access {
- fn metadata(&self) -> AccessInfo;
+ fn metadata(&self) -> Arc<AccessInfo>;
}MinitraceLayer renamed to FastraceLayer
The MinitraceLayer has been renamed to FastraceLayer to respond to the transition from minitrace to fastrace.
- use opendal::layers::MinitraceLayer;
+ use opendal::layers::FastraceLayer;Use Configurator to replace Builder::from_config
Since v0.48, the Builder::from_config and Builder::from_map method has been replaced by the Configurator trait. The Configurator trait provides a more flexible and extensible way to configure OpenDAL.
Service implementers should update their code to use the Configurator trait instead:
impl Configurator for MemoryConfig {
fn into_builder(self) -> impl Builder {
MemoryBuilder { config: self }
}
}
impl Builder for MemoryBuilder {
const SCHEME: Scheme = Scheme::Memory;
type Config = MemoryConfig;
fn build(self) -> Result<impl Access> {
...
}
}What's Changed
Added
- feat(services/fs): Support fs config by @meteorgan in #4853
- feat(services): init monoiofs by @NKID00 in #4855
- feat(core/types): avoid a copy in
Buffer::to_bytes()by cloning contiguous bytes by @LDeakin in #4858 - feat(core): Add object versioning for OSS by @Lzzzzzt in #4870
- feat: fs add concurrent write by @hoslo in #4817
- feat(services/s3): Add object versioning for S3 by @Lzzzzzt in #4873
- feat(integrations/cloudfilter): read only cloud filter by @ho-229 in #4856
- feat(bindings/go): Add full native support from C to Go. by @yuchanns in #4886
- feat(bindings/go): add benchmark. by @yuchanns in #4893
- feat(core): support user defined metadata for oss by @meteorgan in #4881
- feat(service/fastrace): rename minitrace to fastrace by @andylokandy in #4906
- feat(prometheus-client): add metric label about
rooton using PrometheusClientLayer by @flaneur2020 in #4907 - feat(services/monoiofs): monoio wrapper by @NKID00 in #4885
- feat(layers/mime-guess): add a layer that can automatically set
Content-Typebased on the extension in the path. by @czy-29 in #4912 - feat(core)!: Make config data object by @tisonkun in #4915
- feat(core)!: from_map is now fallible by @tisonkun in #4917
- ci(bindings/go): always test against the latest core by @yuchanns in #4913
- feat(!): Allow users to build operator from config by @Xuanwo in #4919
- feat: Add from_iter and via_iter for operator by @Xuanwo in #4921
Changed
- refactor(services/s3)!: renamed security_token to session_token by @Zyyeric in #4875
- refactor(core)!: Make oio::Write always write all given buffer by @Xuanwo in #4880
- refactor(core)!: Return
Arc<AccessInfo>for metadata by @Lzzzzzt in #4883 - refactor(core!): Make service builder takes ownership by @Xuanwo in #4922
- refactor(integrations/cloudfilter): implement Filter instead of SyncFilter by @ho-229 in #4920
Fixed
- fix(services/s3): NoSuchBucket is a ConfigInvalid for OpenDAL by @tisonkun in #4895
- fix: oss will not use the port by @Lzzzzzt in #4899
Docs
- docs(core): update README to add
MimeGuessLayer. by @czy-29 in #4916 - docs(core): Add upgrade docs for 0.48 by @Xuanwo in #4924
- docs: fix spelling by @jbampton in #4925
- docs(core): Fix comment for into_futures_async_write by @Xuanwo in #4928
CI
- ci: Add issue template and pr template for opendal by @Xuanwo in #4884
- ci: Remove CI reviewer since it doesn't work by @Xuanwo in #4891
Chore
- chore!: fix typo customed should be customized by @tisonkun in #4847
- chore: Fix spelling by @jbampton in #4864
- chore: remove unneeded duplicate word by @jbampton in #4865
- chore: fix spelling by @jbampton in #4866
- chore: fix spelling by @NKID00 in #4869
- chore: Make compfs able to test by @Xuanwo in #4878
- chore(services/compfs): remove allow(dead_code) by @George-Miao in #4879
- chore: Make rust 1.80 clippy happy by @Xuanwo in #4927
- chore: Bump crates versions by @Xuanwo in #4929
New Contributors
- @meteorgan made their first contribution in #4853
- @LDeakin made their first contribution in #4858
- @Lzzzzzt made their first contribution in #4870
- @Zyyeric made their first contribution in #4875
- @czy-29 made their first contribution in #4912
Full Changelog: v0.47.3...v0.48.0
v0.47.3
Release List
| Name | Version | Next |
|---|---|---|
| core | 0.47.2 | 0.47.3 |
| integrations/dav-server | 0.0.4 | 0.0.5 |
| integrations/fuse3 | 0.0.1 | 0.0.2 |
| integrations/object_store | 0.44.2 | 0.44.3 |
| integrations/unftp-sbe | 0.0.1 | 0.0.2 |
| bin/oay | 0.41.5 | 0.41.6 |
| bin/ofs | 0.0.6 | 0.0.7 |
| bin/oli | 0.41.5 | 0.41.6 |
| bindings/c | 0.44.7 | 0.44.8 |
| bindings/cpp | 0.45.5 | 0.45.6 |
| bindings/dotnet | 0.1.3 | 0.1.4 |
| bindings/haskell | 0.44.5 | 0.44.6 |
| bindings/java | 0.46.2 | 0.46.3 |
| bindings/lua | 0.1.3 | 0.1.4 |
| bindings/nodejs | 0.47.0 | 0.47.0 |
| bindings/php | 0.1.3 | 0.1.4 |
| bindings/python | 0.45.5 | 0.45.6 |
| bindings/ruby | 0.1.3 | 0.1.4 |
What's Changed
Changed
- refactor: Move ChunkedWrite logic into WriteContext by @Xuanwo in #4826
- refactor(services/aliyun-drive): directly implement
oio::Write. by @yuchanns in #4821
Fixed
- fix(integration/object_store): Avoid calling API inside debug by @Xuanwo in #4846
- fix(integration/object_store): Fix metakey requested is incomplete by @Xuanwo in #4844
Docs
- docs(integration/unftp-sbe): Polish docs for unftp-sbe by @Xuanwo in #4838
- docs(bin): Polish README for all bin by @Xuanwo in #4839
Chore
- chore(deps): bump crate-ci/typos from 1.22.7 to 1.22.9 by @dependabot in #4836
- chore(deps): bump quick-xml from 0.32.0 to 0.35.0 in /bin/oay by @dependabot in #4835
- chore(deps): bump nix from 0.28.0 to 0.29.0 in /bin/ofs by @dependabot in #4833
- chore(deps): bump metrics from 0.20.1 to 0.23.0 in /core by @TennyZhuang in #4843
- chore: Bump version for 0.47.3 by @Xuanwo in #4852
Full Changelog: v0.47.2...v0.47.3