Skip to content

Releases: apache/opendal

v0.44.1

Choose a tag to compare

@Xuanwo Xuanwo released this 06 Jan 08:50
v0.44.1
d4aab1e

What's Changed

Added

  • feat(service/memcached): Add MemCachedConfig by @ankit-pn in #3827
  • feat(service/rocksdb): Add RocksdbConfig by @ankit-pn in #3828
  • feat(services): add chainsafe support by @hoslo in #3834
  • feat(bindings/python): Build all available services for python by @Xuanwo in #3836
  • feat: Adding Atomicserver config by @k-aishwarya in #3845
  • feat(oio::read): implement the async buffer reader by @WenyXu in #3811
  • feat(oio::read): implement the blocking buffer reader by @WenyXu in #3860
  • feat: adapt the CompleteReader by @WenyXu in #3861
  • feat: add basic behavior tests for buffer reader by @WenyXu in #3862
  • feat: add fuzz reader with buffer tests by @WenyXu in #3866
  • feat(ofs): implement ofs based on fuse3 by @Inokinoki in #3857

Changed

  • refactor: simplify bindings_python.yml by @messense in #3837
  • refactor: Add edge test for aws assume role with web identity by @Xuanwo in #3839
  • refactor(services/webdav): Add WebdavConfig to implement ConfigDeserializer by @kwaa in #3846
  • refactor: use TwoWays instead of TwoWaysReader and TwoWaysWriter by @WenyXu in #3863

Fixed

  • fix: Add tests for listing recursively on not supported services by @Xuanwo in #3826
  • fix(services/upyun): fix list api by @hoslo in #3841
  • fix: fix a bypass seek relative bug in BufferReader by @WenyXu in #3864
  • fix: fix the bypass read does not sync the cur of BufferReader by @WenyXu in #3865

Docs

  • docs: Add Apache prefix for all bindings by @Xuanwo in #3829
  • docs: Add apache prefix for python docs by @Xuanwo in #3830
  • docs: Add branding in README by @Xuanwo in #3831
  • docs: Add trademark for Apache OpenDAL™ by @Xuanwo in #3832
  • docs: Add trademark sign for core by @Xuanwo in #3833
  • docs: Enable doc_auto_cfg when docs cfg has been enabled by @Xuanwo in #3835
  • docs: Address branding for haskell and C bindings by @Xuanwo in #3840
  • doc: add 0.44.0 release link to download.md by @dqhl76 in #3868

CI

  • ci: Remove workflows that not running or ready by @Xuanwo in #3842
  • ci: Migrate ftp to test planner by @Xuanwo in #3843

Chore

  • chore(bindings/java): Add name and description metadata by @tisonkun in #3838
  • chore(website): improve a bit trademark refs by @tisonkun in #3847
  • chore: Fix clippy warnings found in rust 1.75 by @Xuanwo in #3849
  • chore(bindings/python): improve ASF branding by @tisonkun in #3850
  • chore(bindings/haskell): improve ASF branding by @tisonkun in #3852
  • chore(bindings/c): make c binding separate workspace by @suyanhanx in #3856
  • chore(bindings/haskell): support co-log-0.6.0 && ghc-9.4 by @silver-ymz in #3858
  • chore: Bump to version 0.44.1 to start release process by @Xuanwo in #3869

New Contributors

Full Changelog: v0.44.0...v0.44.1

v0.44.0

Choose a tag to compare

@dqhl76 dqhl76 released this 31 Dec 03:00
v0.44.0
b0c6ea2

Upgrade Note

Rust core

Public API

Moka Service Configuration

  • The thread_pool_enabled option has been removed.

List Prefix Supported

After RFC: List Prefix landed, we have changed the behavior of list a path without /. OpenDAL used to return NotADirectory error, but now we will return the list of entries that start with given prefix instead.

Nodejs binding

Public API

Now, the list operation returns Array<Entry> instead of a lister.
Also, we removed scan, you can use list('some/path', {recursive: true})/listSync('some/path', {recursive: true}) instead of scan('some/path')/scanSync('some/path').

What's Changed

Added

Changed

  • refactor(service/etcd): use EtcdConfig in from_map by @G-XD in #3703
  • refactor(object_store): upgrade object_store to 0.7. by @youngsofun in #3713
  • refactor: List must support list without recursive by @Xuanwo in #3721
  • refactor: replace ftp tls impl as rustls by @oowl in #3760
  • refactor: Remove never used Stream poll_reset API by @Xuanwo in #3774
  • refactor: Polish operator read_with by @Xuanwo in #3775
  • refactor: Migrate gcs builder to config based by @Xuanwo in #3786
  • refactor(service/hdfs): Add HdfsConfig to implement ConfigDeserializer by @shbhmrzd in #3800
  • refactor(raw): add parse_header_to_str fn by @hoslo in #3804
  • refactor(raw): refactor APIs like parse_content_disposition by @hoslo in #3815
  • refactor: Polish http_util parse headers by @Xuanwo in #3817

Fixed

  • fix(oli): Fix cp -r command returns invalid path error by @kebe7jun in #3687
  • fix(website): folder name mismatch by @suyanhanx in #3707
  • fix(binding/java): fix SPECIAL_DIR_NAME by @G-XD in #3715
  • fix(services/dropbox): Workaround for dropbox limitations for create_folder by @Xuanwo in #3719
  • fix(ocaml_binding): sort actual & expected to pass ci by @Young-Flash in #3733
  • fix(ci): Make sure merge_local_staging handles all subdir by @Xuanwo in #3788
  • fix(services/gdrive): fix return value of get_file_id_by_path by @G-XD in #3801
  • fix(core): List root should not return itself by @Xuanwo in #3824

Docs

  • docs: add maturity model check by @suyanhanx in #3680
  • docs(website): show maturity model by @suyanhanx in #3709
  • docs(website): only VOTEs from PPMC members are binding by @G-XD in #3710
  • doc: add 0.43.0 release link to download.md by @G-XD in #3729
  • docs: Add process on nominating committers and ppmc members by @Xuanwo in #3740
  • docs: Deploy website to nightlies for every tags by @Xuanwo in #3739
  • docs: Remove not released bindings docs from top level header by @Xuanwo in #3741
  • docs: Add dependencies list for all packages by @Xuanwo in #3743
  • docs: Update maturity docs by @Xuanwo in #3750
  • docs: update the RFC doc by @suyanhanx in #3748
  • docs(website): polish deploy to nightlies by @suyanhanx in #3753
  • docs: add event calendar in community page by @dqhl76 in #3767
  • docs(community): polish events by @suyanhanx in #3768
  • docs(bindings/ruby): reflect test framework refactor by @tisonkun in #3798
  • docs(website): add service Huggingface to website by @morristai in #3812
  • docs: update release docs to add cargo-deny setup by @dqhl76 in #3821

CI

  • build(deps): bump cacache from 11.7.1 to 12.0.0 by @dependabot in #3690
  • build(deps): bump prometheus-client from 0.21.2 to 0.22.0 by @dependabot in #3694
  • build(deps): bump github/issue-labeler from 3.2 to 3.3 by @dependabot in #3698
  • ci: Add behavior test for b2 by @Xuanwo in #3714
  • ci(cargo): Add frame pointer support in build flag by @Zheaoli in #3772
  • ci: Workaround ring 0.17 build issue, bring aarch64 and armv7l back by @Xuanwo in #3781
  • ci: Support CI test for s3_read_on_wasm by @Zheaoli in #3813

Chore

  • chore: bump aws-sdk-s3 from 0.38.0 to 1.4.0 by @memoryFade in #3704
  • chore: Disable obs test for workaround by @Xuanwo in #3717
  • chore: Fix bindings CI by @Xuanwo in #3722
  • chore(binding/nodejs,website): Replace yarn with pnpm by @suyanhanx in #3730
  • chore: Bring persy CI back by @Xuanwo in #3751
  • chore(bindings/python): upgrade pyo3 to 0.20 by @messense in #3758
  • chore: remove unused binding feature file by @tisonkun in #3757
  • chore: Bump governor from 0.5.1 to 0.6.0 by @G-XD in #3761
  • chore: Split bindings/ocaml to separate workspace by @Xuanwo in #3792
  • chore: Split bindings/ruby to separate workspace by @ho-229 in #3794
  • chore(bindings/php): bump ext-php-rs to support latest php & separate workspace by @suyanhanx in #3799
  • chore: Address comments from hackernews by @Xuanwo in #3805
  • chore(bindings/ocaml): dep opendal point to core by @suyanhanx in #3814
  • chore: Bump to v0.44.0 to start release process by @dqhl76 in #3819

New Contributors

Full Changelog: http...

Read more

v0.43.0

Choose a tag to compare

@G-XD G-XD released this 08 Dec 10:43
146e960

Upgrade Note

Rust Core

Public API

List Recursive

After RFC-3526: List Recursive landed, we have changed the list API to accept recursive instead of delimiter:

Users will need to change the following usage:

  • op.list_with(path).delimiter("") -> op.list_with(path).recursive(true)
  • op.list_with(path).delimiter("/") -> op.list_with(path).recursive(false)

delimiter other than "" and "/" is not supported anymore.

Stat a dir path

After RFC: List Prefix landed, we have changed the behavior of stat a dir path:

Here are the behavior list:

Case Path Result
stat existing dir abc/ Metadata with dir mode
stat existing file abc/def_file Metadata with file mode
stat dir without / abc/def_dir Error NotFound or metadata with dir mode
stat file with / abc/def_file/ Error NotFound
stat not existing path xyz Error NotFound

Services like s3, azblob can handle stat("abc/") correctly by check if there are objects with prefix abc/.

Raw API

Lister Align

We changed our internal lister implementation to align with the list public API for better performance and readability.

  • trait Page => List
  • struct Pager => Lister
  • trait BlockingPage => BlockingList
  • struct BlockingPager => BlockingLister

Every call to next will return an entry instead a page of entries. Also, we changed our async list api into poll based instead of async_trait.

Java binding

Breaking change

Because of a TLS lib issue, we temporarily disable the services-ftp feature.

Node.js binding

Breaking change

Because of a TLS lib issue, we temporarily disable the services-ftp feature.

Python binding

Breaking change

Because of a TLS lib issue, we temporarily disable the services-ftp feature.

C binding

There are no API changes.

What's Changed

Added

  • feat(bindings/C): Add opendal_operator_rename and opendal_operator_copy by @jiaoew1991 in #3517
  • feat(binding/python): Add new API to convert between AsyncOperator and Operator by @Zheaoli in #3514
  • feat: Implement RFC-3526: List Recursive by @Xuanwo in #3556
  • feat(service): add alluxio rest api support by @hoslo in #3564
  • feat(bindings/python): add OPENDAL_DISABLE_RANDOM_ROOT support by @Justin-Xiang in #3550
  • feat(core): add Alluxio e2e test by @hoslo in #3573
  • feat(service): alluxio support write by @hoslo in #3566
  • feat(bindings/nodejs): add retry layer by @suyanhanx in #3484
  • RFC: Concurrent Stat in List by @morristai in #3574
  • feat(service/hdfs): enable rename in hdfs service by @qingwen220 in #3592
  • feat: Improve the read_to_end perf and add benchmark vs_fs by @Xuanwo in #3617
  • feat: Add benchmark vs aws sdk s3 by @Xuanwo in #3620
  • feat: Improve the performance of s3 services by @Xuanwo in #3622
  • feat(service): support b2 by @hoslo in #3604
  • feat(core): Implement RFC-3574 Concurrent Stat In List by @morristai in #3599
  • feat: Implement stat dir correctly based on RFC-3243 List Prefix by @Xuanwo in #3651
  • feat(bindings/nodejs): Add capability support by @suyanhanx in #3654
  • feat: disable ftp for python and java binding by @ZutJoe in #3659
  • feat(bindings/nodejs): read/write stream by @suyanhanx in #3619

Changed

  • refactor(services/persy): migrate tot test planner by @G-XD in #3476
  • refactor(service/etcd): Add EtcdConfig to implement ConfigDeserializer by @Xuxiaotuan in #3543
  • chore(service/tikv): rename Backend to TikvBackend by @caicancai in #3545
  • refactor(services/azblob): add AzblobConfig by @acehinnnqru in #3553
  • refactor(services/cacache): migrate to test planner by @G-XD in #3568
  • refactor(services/sled): migrate to test planner by @G-XD in #3569
  • refactor(services/webhdfs): migrate to test planner by @G-XD in #3578
  • refactor(core): Rename all Page to List by @Xuanwo in #3589
  • refactor: Change List API into poll based and return one entry instead by @Xuanwo in #3593
  • refactor(services/tikv): migrate to test planner by @G-XD in #3587
  • refactor(service/redis): Migrate task to new task planner by @sunheyi6 in #3374
  • refactor(oio): Polish IncomingAsyncBody::bytes by @Xuanwo in #3621
  • refactor(services/rocksdb): migrate to test planner by @G-XD in #3636
  • refactor(services/azfile): Check if dir exists before create by @ZutJoe in #3652
  • refactor: Polish concurrent list by @Xuanwo in #3658

Fixed

Docs

CI

  • ci(services/libsql): add rust test threads limit by @G-XD in #3540
  • ci(services/redb): migrate to test planner by @suyanhanx in #3518
  • ci: Disable libsql behavior test until we or upstream address them by @Xuanwo in #3552
  • ci: Add new Python binding reviewer by @Zheaoli in #3560
  • ci(bindings/nodejs): add aarch64 build support by @suyanhanx in #3567
  • ci(planner): Polish the workflow planner code by @Zheaoli in #3570
  • ci(core): Add dry run for rc tags by @Xuanwo in #3624
  • ci: Disable persy until it has been fixed by @Xuanwo in #3631
  • ci: Calling cargo to make sure rust has been setup by @Xuanwo in #3633
  • ci: Fix etcd with tls and auth failed to start by @Xuanwo in #3637
  • ci(services/etcd): Use ALLOW_NONE_AUTHENTICATION as workaround by @Xuanwo in #3638
  • ci: dry run publish on rc tags for python binding by @everpcpc in #3645
  • ci: Add java linux arm64 build by @Xuanwo in #3660
  • ci(java/binding): Use zigbuild for glibc 2.17 support by @Xuanwo in #3664
  • ci(bindings/python): remove aarch support by @G-XD in #3674

Chore

  • chore(servies/sftp): Upgrade openssh-sftp-client to 0.14 by @sd44 in https://g...
Read more

v0.42.0

Choose a tag to compare

@silver-ymz silver-ymz released this 16 Nov 04:17
v0.42.0
9b423ae

Upgrade Note

Rust Core

MSRV Changed

OpenDAL bumps it's MSRV to 1.67.0.

S3 Service Configuration

  • The enable_exact_buf_write option has been deprecated and is superseded by BufferedWriter, introduced in version 0.40.

Oss Service Configuration

  • The write_min_size option has been deprecated and replaced by BufferedWriter, also introduced in version 0.40.
  • A new setting, allow_anonymous, has been added. Since v0.41, OSS will now return an error if credential loading fails. Enabling allow_anonymous to fallback to request without credentials.

Ghac Service Configuration

  • The enable_create_simulation option has been removed. We add this option to allow ghac simulate create empty file, but it's could result in unexpected behavior when users create a file with content length 1. So we remove it.

Wasabi Service Removed

wasabi service native support has been removed. Users who want to access wasabi can use our s3 service instead.

Java binding

There are no API changes.

Node.js binding

There are no API changes.

Python binding

Breaking change for layers

Operator and BlockingOperator won't accept layers anymore. Instead, we provide a layer API:

op = opendal.Operator("memory").layer(opendal.layers.RetryLayer())

We removed not used layers ConcurrentLimitLayer and ImmutableIndexLayer along with this change.

File and AsyncFile

OpenDAL removes Reader and AsyncReader classes, instead, we provide file-like object File and AsyncFile.

Open a file for reading in blocking way:

with op.open(filename, "rb") as r:
    content = r.read()

Open a file for reading in async way:

async with await op.open(filename, "rb") as r:
    content = await r.read()

Breaking change for Errors

We remove the old error classes and provide a couple of Exception based class for the error handling.

  1. opendal.Error is based class for all the exceptions now.
  2. opendal.exceptions.Unexpected is added.
  3. opendal.exceptions.Unsupported is added.
  4. opendal.exceptions.ConfigInvalid is added.
  5. opendal.exceptions.NotFound is added.
  6. opendal.exceptions.PermissionDenied is added.
  7. opendal.exceptions.IsADirectory is added.
  8. opendal.exceptions.NotADirectory is added.
  9. opendal.exceptions.AlreadyExists is added.
  10. opendal.exceptions.IsSameFile is added.
  11. opendal.exceptions.ConditionNotMatch is added.
  12. opendal.exceptions.ContentTruncated is added.
  13. opendal.exceptions.ContentIncomplete is added.
  14. opendal.exceptions.InvalidInput is added.

C binding

The naming convention for C binding has been altered.

Struct Naming

Renaming certain struct names for consistency.

  • opendal_operator_ptr => opendal_operator
  • opendal_blocking_lister => opendal_lister
  • opendal_list_entry => opendal_entry

API Naming

We've eliminated the blocking_ prefix from our API because C binding doesn't currently support async. In the future, we plan to introduce APIs such as opendal_operator_async_write.

  • opendal_operator_blocking_write => opendal_operator_write
  • opendal_operator_blocking_read => opendal_operator_read

What's Changed

Added

  • feat(binding/java): add rename support by @G-XD in #3238
  • feat(prometheus): add bytes metrics as counter by @flaneur2020 in #3246
  • feat(binding/python): new behavior testing for python by @laipz8200 in #3245
  • feat(binding/python): Support AsyncOperator tests. by @laipz8200 in #3254
  • feat(service/libsql): support libsql by @G-XD in #3233
  • feat(binding/python): allow setting append/buffer/more in write() call by @jokester in #3256
  • feat(services/persy): change blocking_x in async_x call to tokio::task::blocking_spawn by @Zheaoli in #3221
  • feat: Add edge test cases for OpenDAL Core by @Xuanwo in #3274
  • feat(service/d1): Support d1 for opendal by @realtaobo in #3248
  • feat(services/redb): change blocking_x in async_x call to tokio::task::blocking_spawn by @shauvet in #3276
  • feat: Add blocking layer for C bindings by @jiaoew1991 in #3278
  • feat(binding/c): Add blocking_reader for C binding by @jiaoew1991 in #3259
  • feat(services/sled): change blocking_x in async_x call to tokio::task::blocking_spawn by @shauvet in #3280
  • feat(services/rocksdb): change blocking_x in async_x call to tokio::task::blocking_spawn by @shauvet in #3279
  • feat(binding/java): make Metadata a POJO by @G-XD in #3277
  • feat(bindings/java): convey backtrace on exception by @tisonkun in #3286
  • feat(layer/prometheus): Support custom metric bucket for Histogram by @Zheaoli in #3275
  • feat(bindings/python): read APIs return memoryview instead of bytes to avoid copy by @messense in #3310
  • feat(service/azfile): add azure file service support by @dqhl76 in #3312
  • feat(services/oss): Add allow anonymous support by @Xuanwo in #3321
  • feat(bindings/python): build and publish aarch64 and armv7l wheels by @messense in #3325
  • feat(bindings/java): support duplicate operator by @tisonkun in #3330
  • feat(core): Add enabled for Scheme by @Xuanwo in #3331
  • feat(bindings/java): support get enabled services by @tisonkun in #3336
  • feat(bindings/java): Migrate behavior tests to new Workflow Planner by @Xuanwo in #3341
  • feat(layer/prometheus): Support output path as a metric label by @Zheaoli in #3335
  • feat(service/mongodb): Support mongodb service by @Zheaoli in #3355
  • feat: Make PrometheusClientLayer Clonable by @flaneur2020 in #3352
  • feat(service/cloudflare_kv): support cloudflare KV by @my-vegetable-has-exploded in #3348
  • feat(core): exposing Metadata::metakey() api by @G-XD in #3373
  • feat(binding/java): add list & remove_all support by @G-XD in #3333
  • feat: Add write_total_max_size in Capability by @realtaobo in #3309
  • feat(core): service add DBFS API 2.0 support by @morristai in #3334
  • feat(bindings/java): use random root for behavior tests by @tisonkun in #3408
  • feat(services/oss): Add start-after support for oss list by @wcy-fdu in #3410
  • feat(binding/python): Export full_capability API for Python binding by @Zheaoli in #3402
  • feat(test): Enable new test workflow planner for python binding by @Zheaoli in #3397
  • feat: Implement Lazy Reader by @Xuanwo in #3395
  • feat(binding/nodejs): upgrade test behavior and infra by @eryue0220 in #3297
  • feat(binding/python): Support Copy operation for Python binding by @Zheaoli in #3454
  • feat(bindings/python): Add layer API for operator by @Xuanwo in #3464
  • feat(bindings/java): add layers onto ops by @tisonkun in #3392
  • feat(binding/python): Support rename API for Python binding by @Zheaoli in #3467
  • feat(binding/python): Support remove_all API for Python binding by @Zheaoli in #3469
  • feat(core): fix token leak in OneDrive by @morristai in #3470
  • feat(core): service add OpenStack Swift support by @morristai in #3461
  • feat(bindings/python)!: Implement File and AsyncFile to replace Reader by @Xuanwo in #3474
  • feat(services): Implement ConfigDeserializer and add S3Config as example by @Xuanwo in #3490
  • feat(core): add OpenStack Swift e2e test by @morristai in #3493
  • feat(doc): add OpenStack Swift document for the website by @morristai in #3494
  • feat(services/sqlite): add SqliteConfig by @hoslo in #3497
  • feat(bindings/C): imp...
Read more

v0.41.0

Choose a tag to compare

@suyanhanx suyanhanx released this 16 Oct 08:50
v0.41.0
779750a

Upgrade Note

Rust Core

There are no public API and raw API changes.

Java binding

Breaking change for constructing operators

PR-3166 changes the API for constructing operators:

Previous:

new BlockingOperator(scheme, config);
new Operator(scheme, config);

Current:

BlockingOperator.of(scheme, config);
Operator.of(scheme, config);

Now, there is no public constructor for operators, but only factory methods. In this way, the APIs are free to do arbitrary verifications and preparations before constructing operators.

Node.js binding

There are no API changes.

Python binding

There are no API changes.


What's Changed

Added

  • feat: allow using prometheus-client crate with PrometheusClientLayer by @flaneur2020 in #3134
  • feat(binding/java): support info ops by @G-XD in #3154
  • test(binding/java): add behavior test framework by @G-XD in #3129
  • feat: Include starting offset for GHAC upload Content-Range by @huonw in #3163
  • feat(bindings/cpp): make ReaderStream manage the lifetime of Reader by @silver-ymz in #3164
  • feat: Enable multi write for ghac by @Xuanwo in #3165
  • feat: Add mysql support for OpenDAL by @Zheaoli in #3170
  • feat(service/postgresql): support connection pool by @Zheaoli in #3176
  • feat(services/ghac): Allow explicitly setting ghac endpoint/token, not just env vars by @huonw in #3177
  • feat(service/azdls): add append support for azdls by @dqhl76 in #3186
  • feat(bindings/python): Enable BlockingLayer for non-blocking services that don't support blocking by @messense in #3198
  • feat: Add write_can_empty in Capability and related tests by @Xuanwo in #3200
  • feat: Add basic support for bindings/go using CGO by @jiaoew1991 in #3204
  • feat(binding/java): add copy test by @G-XD in #3207
  • feat(service/sqlite): Support sqlite for opendal by @Zheaoli in #3212
  • feat(services/sqlite): Support blocking_get/set/delete in sqlite service by @Zheaoli in #3218
  • feat(oay): port WebdavFs to dav-server-fs-opendal by @Young-Flash in #3119

Changed

  • refactor(services/dropbox): Use OpWrite instead of passing all args as parameters by @ImSingee in #3126
  • refactor(binding/java): read should return bytes by @tisonkun in #3153
  • refactor(bindings/java)!: operator jni calls by @tisonkun in #3166
  • refactor(tests): reuse function to remove duplicate code by @zhao-gang in #3219

Fixed

  • fix(tests): Create test files one by one instead of concurrently by @Xuanwo in #3132
  • chore(ci): fix web identity token path for aws s3 assume role test by @everpcpc in #3141
  • fix(services/s3): Detect region returned too early when header is empty by @Xuanwo in #3187
  • fix: making OpenDAL compilable on 32hf platforms by @ClSlaid in #3188
  • fix(binding/java): decode Java’s modified UTF-8 format by @G-XD in #3195

Docs

CI

  • ci: Align tags with semver specs by @Xuanwo in #3136
  • ci: Migrate obs to databend labs sponsored bucket by @Xuanwo in #3137
  • build(bindings/java): support develop with JDK 21 by @tisonkun in #3140
  • ci: Migrate GCS to Databend Labs sponsored bucket by @Xuanwo in #3142
  • build(bindings/java): upgrade maven wrapper version by @tisonkun in #3167
  • build(bindings/java): support explicit cargo build target by @tisonkun in #3168
  • ci: Pin Kvrocks docker image to 2.5.1 to avoid test failure by @git-hulk in #3192
  • ci(bindings/ocaml): add doc by @Ranxy in #3208
  • build(deps): bump actions/checkout from 3 to 4 by @dependabot in #3222
  • build(deps): bump korandoru/hawkeye from 3.3.0 to 3.4.0 by @dependabot in #3223
  • build(deps): bump rusqlite from 0.25.4 to 0.29.0 by @dependabot in #3226

Chore

New Contributors

Full Changelog: v0.40.0...v0.41.0

v0.40.0

Choose a tag to compare

@Xuanwo Xuanwo released this 21 Sep 05:36
v0.40.0
9a775bd

Checkout our OwO #1 to know more about this release!

Upgrade Note

Public API

RFC-2578 Merge Append Into Write

RFC-2578 merges append into write and removes append API.

  • For writing a file at once, please use op.write() for convenience.
  • For appending a file, please use op.write_with().append(true) instead of op.append().

The same rule applies to writer() and writer_with().

RFC-2774 Lister API

RFC-2774 proposes a new lister API to replace current list and scan. And we add a new API list to return entries directly.

  • For listing a directory at once, please use list() for convenience.
  • For listing a directory recursively, please use list_with().delimiter("") or lister_with().delimiter("") instead of scan().
  • For listing in streaming, please use lister() or lister_with() instead.

RFC-2779 List With Metakey

RFC-2779 proposes a new op.list_with().metakey() API to allow list with metakey and removes op.metadata(&entry) API.

Please use op.list_with().metakey() instead of op.metadata(&entry), for example:

// Before
let entries: Vec<Entry> = op.list("dir/").await?;
for entry in entris {
  let meta = op.metadata(&entry, Metakey::ContentLength | Metakey::ContentType).await?;
  println!("{} {}", entry.name(), entry.metadata().content_length());
}

// After
let entries: Vec<Entry> = op
  .list_with("dir/")
  .metakey(Metakey::ContentLength | Metakey::ContentType).await?;
for entry in entris {
  println!("{} {}", entry.name(), entry.metadata().content_length());
}

RFC-2852: Native Capability

RFC-2852 proposes new native_capability and full_capability API to allow users to check if the underlying service supports a capability natively.

  • native_capability returns true if the capability is supported natively.
  • full_capability returns true if the capability is supported, maybe via a layer.

Most of time, you can use full_capability to replace capability call. But if to check if the capability is supported natively for better performance design, please use native_capability instead.

Buffered Writer

OpenDAL v0.40 added buffered writer support!

Users don't need to specify the content_length() for writer anymore!

- let mut w = op.writer_with("path/to/file").content_length(1024).await?;
+ let mut w = op.writer_with("path/to/file").await?;

Users can specify the buffer() to control the size we call underlying storage:

let mut w = op.writer_with("path/to/file").buffer(8 * 1024 * 1024).await?;

If buffer is not specified, we will call underlying storage everytime we call write. Otherwise, we will make sure to call underlying storage when buffer is full or close is called.

Raw API

RFC-3017 Remove Write Copy From

RFC-3017 removes copy_from API from the oio::Write trait. Users who implements services and layers by hand should remove this API.

What's Changed

Added

  • feat(service/etcd): support list by @G-XD in #2755
  • feat: setup the integrate with PHP binding by @godruoyi in #2726
  • feat(oay): Add read_dir by @Young-Flash in #2736
  • feat(obs): support loading credential from env by @everpcpc in #2767
  • feat: add async backtrace layer by @dqhl76 in #2765
  • feat: Add OCaml Binding by @Ranxy in #2757
  • feat(bindings/haskell): support logging layer by @silver-ymz in #2705
  • feat: Add FoundationDB Support for OpenDAL by @ArmandoZ in #2751
  • feat(oay): add write for oay webdav by @Young-Flash in #2769
  • feat: Implement RFC-2774 Lister API by @Xuanwo in #2787
  • feat(bindings/haskell): enhance original OpMonad to support custom IO monad by @silver-ymz in #2789
  • feat: Add into_seekable_read_by_range support for blocking read by @Xuanwo in #2799
  • feat(layers/blocking): add blocking layer by @yah01 in #2780
  • feat: Add async list with metakey support by @Xuanwo in #2803
  • feat(binding/php): Add basic io by @godruoyi in #2782
  • feat: fuzz test support read from .env by different services by @dqhl76 in #2824
  • feat(services/rocksdb): Add scan support by @JLerxky in #2827
  • feat: Add postgresql support for OpenDAL by @Xuanwo in #2815
  • feat: ci for php binding by @godruoyi in #2830
  • feat: Add create_dir, remove, copy and rename API for oay-webdav by @Young-Flash in #2832
  • feat(oli): oli stat should show path as specified by users by @sarutak in #2842
  • feat(services/moka, services/mini-moka): Add scan support by @JLerxky in #2850
  • feat(oay): impl some method for WebdavMetaData by @Young-Flash in #2857
  • feat: Implement list with metakey for blocking by @Xuanwo in #2861
  • feat(services/redis): add redis cluster support by @G-XD in #2858
  • feat(services/dropbox): read support range by @suyanhanx in #2848
  • feat(layers/logging): Allow users to control print backtrace or not by @Xuanwo in #2872
  • feat: add native & full capability by @yah01 in #2874
  • feat: Implement RFC-2758 Merge Append Into Write by @Xuanwo in #2880
  • feat(binding/ocaml): Add support for operator reader and metadata by @Ranxy in #2881
  • feat(core): replace field _pin with !Unpin as argument by @morristai in #2886
  • feat: Add retry for Writer::sink operation by @Xuanwo in #2896
  • feat: remove operator range_read and range_reader API by @oowl in #2898
  • feat(core): Add unit test for ChunkedCursor by @Xuanwo in #2907
  • feat(types): remove blocking operation range_read and range_reader API by @oowl in #2912
  • feat(types): add stat_with API for blocking operator by @oowl in #2915
  • feat(services/gdrive): credential manage by @suyanhanx in #2914
  • feat(core): Implement Exact Buf Writer by @Xuanwo in #2917
  • feat: Add benchmark for buf write by @Xuanwo in #2922
  • feat(core/raw): Add stream support for multipart by @Xuanwo in #2923
  • feat(types): synchronous blocking operator and operator's API by @oowl in #2924
  • feat(bindings/java): bundled services by @tisonkun in #2934
  • feat(core/raw): support stream body for mixedpart by @silver-ymz in #2936
  • feat(bindings/python): expose presign api by @silver-ymz in #2950
  • feat(bindings/nodejs): Implement presign test by @suyanhanx in #2969
  • docs(services/gdrive): update service doc by @suyanhanx in #2973
  • feat(bindings/cpp): init cpp binding by @silver-ymz in #2980
  • feat: gcs insert object support cache control by @fatelei in #2974
  • feat(bindings/cpp): expose all api returned by value by @silver-ymz in #3001
  • feat(services/gdrive): implement rename by @suyanhanx in #3007
  • feat(bindings/cpp): expose reader by @silver-ymz in #3004
  • feat(bindings/cpp): expose lister by @silver-ymz in #3011
  • feat(core): Avoid copy if input is larger than buffer_size by @Xuanwo in #3016
  • feat(service/gdrive): add gdrive list support by @Young-Flash in #3025
  • feat(services/etcd): Enable etcd connection pool by @Xuanwo in #3041
  • feat: Add buffer support for all services by @Xuanwo in #3045
  • feat(bindings/ja...
Read more

v0.39.0

Choose a tag to compare

@oowl oowl released this 31 Jul 11:10
v0.39.0
386fb3c

Upgrade to v0.39

Public API

Service S3 Role Arn Behavior

In PR #2687, OpenDAL changed the behavior when role_arn has been specified.

OpenDAL used to override role_arn simply. But since this version, OpenDAL will make sure to use assume_role with specified role_arn and external_id (if supplied).

RetryLayer supports RetryInterceptor

In PR #2666, RetryLayer supports RetryInterceptor. To implement this change, RetryLayer changed it's in-memory layout by adding a new generic parameter I to RetryLayer<I>.

Users who stores RetryLayer in struct or enum will need to change the type if they don't want to use default behavior.

Raw API

In PR #2698, OpenDAL re-org the internal structure of opendal::raw::oio and changed some APIs name.

What's Changed

Added

  • feat: add a behaviour test for InvalidInput by @dqhl76 in #2644
  • feat(services/persy): add a basic persy service impl by @PsiACE in #2648
  • feat(services/vercel_artifacts): Impl stat by @suyanhanx in #2649
  • feat(test): add fuzz test for range_reader by @dqhl76 in #2609
  • feat(core/http_util): Remove sensitive header like Set-Cookie by @Xuanwo in #2664
  • feat: Add RetryInterceptor support for RetryLayer by @Xuanwo in #2666
  • feat: support kerberos for hdfs service by @zuston in #2668
  • feat: support append for hdfs by @zuston in #2671
  • feat(s3): Use us-east-1 while head bucket returns 403 without X-Amz-Bucket-Region by @john8628 in #2677
  • feat(oay): Add webdav basic read impl by @Young-Flash in #2658
  • feat(services/redis): enable TLS by @Stormshield-robinc in #2670
  • feat(services/etcd): introduce new service backend etcd by @G-XD in #2672
  • feat(service/obs):add multipart upload function support by @A-Stupid-Sun in #2685
  • feat(services/s3): Add assume role support by @Xuanwo in #2687
  • feat(services/tikv): introduce new service backend tikv by @oowl in #2565
  • feat(service/cos): add multipart upload function support by @ArmandoZ in #2697
  • feat(oio): Add MultipartUploadWrite to easier the work for Writer by @Xuanwo in #2699
  • feat(test): add fuzz target for writer by @dqhl76 in #2706
  • feat: cos multipart uploads write by @parkma99 in #2712
  • feat(layers): support await_tree instrument by @oowl in #2623
  • feat(tests): Extract fuzz test of #2717 by @Xuanwo in #2720
  • feat: oss multipart uploads write by @parkma99 in #2723
  • feat: add override_content_type by @G-XD in #2734

Changed

  • refactor(services/redis): Polish features of redis by @Xuanwo in #2681
  • refactor(services/s3): Check header first for region detect by @Xuanwo in #2691
  • refactor(raw/oio): Reorganize to allow adding more features by @Xuanwo in #2698
  • refactor: Polish fuzz build time by @Xuanwo in #2721

Fixed

  • fix(services/cos): fix cos service comments by @A-Stupid-Sun in #2656
  • fix(test): profile setting warning by @dqhl76 in #2657
  • fix(bindings/C): fix the memory found in valgrind. by @Ji-Xinyou in #2673
  • fix: owncloud test sometimes fail by @dqhl76 in #2684
  • fix(services/obs): remove content-length check in backend by @suyanhanx in #2686
  • fix: fix HADOOP_CONF_DIR setting in guidance document by @wcy-fdu in #2713
  • fix: Seek before the start of file should be invalid by @Xuanwo in #2718
  • fix(layer/minitrace): fix doctest by @andylokandy in #2728

Docs

  • docs: add instructions to fix wrong vote mail and uploads by @ClSlaid in #2682
  • doc(services/tikv): add tikv service backend to readme by @oowl in #2711
  • docs(bindings/java): improve safety doc for get_current_env by @tisonkun in #2733

CI

  • ci(services/webdav): Setup integration test for owncloud by @dqhl76 in #2659
  • ci: Fix unexpected error in owncloud by @Xuanwo in #2663
  • ci: upgrade hawkeye action by @tisonkun in #2665
  • ci: Make owncloud happy by reduce the concurrency by @Xuanwo in #2667
  • ci: Setup protoc in rust builder by @Xuanwo in #2674
  • ci: Fix Cargo.lock not updated by @Xuanwo in #2680
  • ci: Add services fuzz test for read/write/range_read by @dqhl76 in #2710

Chore

New Contributors

Full Changelog: v0.38.1...v0.39.0

v0.38.1

Choose a tag to compare

@Xuanwo Xuanwo released this 15 Jul 05:26
40e2a2a

What's Changed

Added

  • feat(binding/lua): add rename and create_dir operator function by @oowl in #2564
  • feat(services/azblob): support sink by @suyanhanx in #2574
  • feat(services/gcs): support sink by @suyanhanx in #2576
  • feat(services/oss): support sink by @suyanhanx in #2577
  • feat(services/obs): support sink by @suyanhanx in #2578
  • feat(services/cos): impl sink by @suyanhanx in #2587
  • feat(service): Support stat for Dropbox by @Zheaoli in #2588
  • feat(services/dropbox): impl create_dir and polish error handling by @suyanhanx in #2600
  • feat(services/dropbox): Implement refresh token support by @Xuanwo in #2604
  • feat(service/dropbox): impl batch delete by @suyanhanx in #2606
  • feat(CI): set Kvrocks test for service redis by @suyanhanx in #2613
  • feat(core): object versioning APIs by @suyanhanx in #2614
  • feat(oay): actually read configuration from oay.toml by @messense in #2615
  • feat(services/webdav): impl sink by @suyanhanx in #2622
  • feat(services/fs): impl Sink for Fs by @Ji-Xinyou in #2626
  • feat(core): impl delete_with on blocking operator by @suyanhanx in #2633
  • feat(bindings/C): add support for list in C binding by @Ji-Xinyou in #2448
  • feat(services/s3): Add detect_region support for S3Builder by @parkma99 in #2634

Changed

  • refactor(core): Add ErrorKind InvalidInput to indicate users input error by @dqhl76 in #2637
  • refactor(services/s3): Add more detect logic for detect_region by @Xuanwo in #2645

Fixed

Docs

CI

Chore

New Contributors

Full Changelog: v0.38.0...v0.38.1

v0.38.0

Choose a tag to compare

@PsiACE PsiACE released this 28 Jun 05:00
v0.38.0
960a8de

Upgrade to v0.38

There are no public API changes.

Raw API

OpenDAL add the Write::sink API to enable streaming writing. This is a breaking change for users who depend on the raw API.

For a quick fix, users who have implemented opendal::raw::oio::Write can return an Unsupported error for Write::sink().

More detailes could be found at RFC: Writer sink API.

What's Changed

Added

  • feat(raw/http_util): Implement mixed multipart parser by @Xuanwo in #2430
  • feat(services/gcs): Add batch delete support by @wcy-fdu in #2142
  • feat(core): Add Write::sink API by @Xuanwo in #2440
  • feat(services/s3): Allow retry for unexpected 499 error by @Xuanwo in #2453
  • feat(layer): add throttle layer by @morristai in #2444
  • feat(bindings/haskell): init haskell binding by @silver-ymz in #2463
  • feat(core): add capability check by @unixzii in #2461
  • feat(bindings/haskell): add CONTRIBUTING.md by @silver-ymz in #2466
  • feat(bindings/haskell): add CI test for haskell binding by @silver-ymz in #2468
  • feat(binding/lua): introduce opendal lua binding by @oowl in #2469
  • feat(bindings/swift): add Swift binding by @unixzii in #2470
  • feat(bindings/haskell): support is_exist create_dir copy rename delete by @silver-ymz in #2475
  • feat(bindings/haskell): add Monad wrapper by @silver-ymz in #2482
  • feat(bindings/dotnet): basic structure by @tisonkun in #2485
  • feat(services/dropbox): Support create/read/delete for Dropbox by @Zheaoli in #2264
  • feat(bindings/java): support load system lib by @tisonkun in #2502
  • feat(blocking operator): add remove_all api by @infdahai in #2449
  • feat(core): adopt WebHDFS LISTSTATUS_BATCH for better performance by @morristai in #2499
  • feat(bindings/haskell): support stat by @silver-ymz in #2504
  • feat(adapters-kv): add rename and copy support to kv adapters by @oowl in #2513
  • feat: Implement sink for services s3 by @Xuanwo in #2508
  • feat(adapters-kv): add rename and copy support to non typed kv adapters by @oowl in #2515
  • feat: Implement test harness via libtest-mimic instead by @Xuanwo in #2517
  • feat(service/sled): introduce tree support by @oowl in #2516
  • feat(bindings/haskell): support list and scan by @silver-ymz in #2527
  • feat(services/redb): support redb service by @oowl in #2526
  • feat(core): implement service for Mini Moka by @morristai in #2537
  • feat(core): add Mini Moka GitHub Action workflow job by @morristai in #2539
  • feat(services): add cacache backend by @PsiACE in #2548
  • feat: Implement Writer::copy so user can copy from AsyncRead by @Xuanwo in #2552

Changed

  • refactor(bindings/C): refactor c bindings to call all APIs using pointer by @Ji-Xinyou in #2489

Fixed

  • fix(services/azblob): Fix azblob batch max operations by @A-Stupid-Sun in #2434
  • fix(services/sftp): change default root config to remote server setting by @silver-ymz in #2431
  • fix: Enable std feature for futures to allow futures::AsyncRead by @Xuanwo in #2450
  • fix(services/gcs): GCS should support create dir by @Xuanwo in #2467
  • fix(bindings/C): use copy_from_slice instead of from_static in opendal_bytes by @Ji-Xinyou in #2473
  • fix(bindings/swift): reorg the package to correct its name by @unixzii in #2479
  • fix: Fix the build for zig binding by @Xuanwo in #2493
  • fix(service/webhdfs): fix webhdfs config builder for disable_list_batch by @morristai in #2509
  • fix(core/types): add missing vercel artifacts for FromStr by @cijiugechu in #2519
  • fix(types/operator): fix operation limit error default size by @oowl in #2536

Docs

CI

  • ci: Fix append test should use copy_buf to avoid call times by @Xuanwo in #2436
  • build(bindings/ruby): fix compile rb-sys on Apple M1 by @tisonkun in #2451
  • ci: Use summary for zig test to fix build by @Xuanwo in #2480
  • ci(workflow): add lua binding test workflow by @oowl in #2478
  • build(deps): bump actions/setup-python from 3 to 4 by @dependabot in #2481
  • ci(bindings/swift): add CI for Swift binding by @unixzii in #2492
  • ci: Try to make webhdfs tests more stable by @Xuanwo in #2503
  • ci(bindings/java): auto release snapshot by @tisonkun in #2521
  • ci: Disable the stage snapshot CI by @Xuanwo in #2528
  • ci: fix opendal-java snapshot releases by @tisonkun in #2532
  • ci: Fix typo in binding java CI by @Xuanwo in #2534
  • ci(bindings/swift): optimize time consumption of CI pipeline by @unixzii in #2545
  • ci: Fix PR label not updated while edited by @Xuanwo in #2547
  • ci: automatic java binding release by @tisonkun in #2557

Chore

Read more

v0.37.0

Choose a tag to compare

@suyanhanx suyanhanx released this 06 Jun 09:19
v0.37.0
7a45800

Upgrade to v0.37

In v0.37.0, OpenDAL bump the version of reqsign to v0.13.0.

There are no public API and raw API changes.


What's Changed

Added

  • feat(services/webdav): support redirection when get 302/307 response during read operation by @Yansongsongsong in #2256
  • feat: Add Zig Bindings Module by @kassane in #2374
  • feat: Implement Timeout Layer by @Xuanwo in #2395
  • feat(bindings/c): add opendal_operator_blocking_delete method by @jiaoew1991 in #2416
  • feat(services/obs): add append support by @infdahai in #2422

Changed

  • refactor(bindings/zig): enable tests and more by @tisonkun in #2375
  • refactor(bindings/zig): add errors handler and module test by @kassane in #2381
  • refactor(http_util): Adopt reqwest's redirect support by @Xuanwo in #2390

Fixed

  • fix(bindings/zig): reflect C interface changes by @tisonkun in #2378
  • fix(services/azblob): Fix batch delete doesn't work on azure by @Xuanwo in #2382
  • fix(services/oss): Fix oss batch max operations by @A-Stupid-Sun in #2414
  • fix(core): Don't wake up operator futures while not ready by @Xuanwo in #2415
  • fix(services/s3): Fix s3 batch max operations by @A-Stupid-Sun in #2418

Docs

CI

Chore

  • chore(bindings/python): upgrade maturin to 1.0 by @messense in #2369
  • chore: Fix license headers for release/labler by @Xuanwo in #2371
  • chore(bindings/C): add one simple read/write example into readme and code by @Ji-Xinyou in #2421

New Contributors

Full Changelog: v0.36.0...v0.37.0