Apache OpenDAL: access data freely.
Name | Version |
---|---|
core | 0.45.1 |
bin/oay | 0.41.1 |
bin/oli | 0.41.1 |
bin/ofs | 0.0.2 |
bindings/python | 0.45.1 |
bindings/nodejs | 0.45.1 |
bindings/c | 0.44.3 |
bindings/zig | 0.0.0 |
bindings/dotnet | 0.1.1 |
bindings/haskell | 0.44.3 |
bindings/java | 0.45.1 |
bindings/lua | 0.1.1 |
bindings/ruby | 0.1.1 |
bindings/swift | 0.0.0 |
bindings/ocaml | 0.0.0 |
bindings/php | 0.1.1 |
bindings/cpp | 0.44.3 |
bindings/go | 0.0.0 |
integrations/object_store | 0.43.0 |
integrations/dav-server | 0.0.1 |
=
by @Xuanwo in https://github.com/apache/opendal/pull/4105
core/src/services/http/docs.md
by @jbampton in https://github.com/apache/opendal/pull/4226
website/README.md
by @jbampton in https://github.com/apache/opendal/pull/4228
github
to GitHub
by @jbampton in https://github.com/apache/opendal/pull/4232
bindings/c/CONTRIBUTING.md
by @jbampton in https://github.com/apache/opendal/pull/4235
CONTRIBUTING
by @jbampton in https://github.com/apache/opendal/pull/4237
bindings/README.md
by @jbampton in https://github.com/apache/opendal/pull/4238
examples/rust
by @jbampton in https://github.com/apache/opendal/pull/4241
Who is using OpenDAL
list by @jbampton in https://github.com/apache/opendal/pull/4263
Full Changelog: https://github.com/apache/opendal/compare/v0.45.0...v0.45.1
To further enhance the optionality of tokio
, we have introduced a new feature called layers-blocking
. The default usage of the blocking layer has been disabled. To utilize the BlockingLayer
, please enable the layers-blocking
feature.
with_speed
The with_speed
API has been deprecated. Please use with_io_timeout
instead.
No raw API changes.
IntoFuture
for operator futures to remove an alloc by @Xuanwo in https://github.com/apache/opendal/pull/4098
Full Changelog: https://github.com/apache/opendal/compare/v0.44.2...v0.45.0
MultipartUploadWriter
by @WenyXu in https://github.com/apache/opendal/pull/3915
RangeWriter
by @WenyXu in https://github.com/apache/opendal/pull/3923
concurrent
and buffer
parameters into FuzzInput by @WenyXu in https://github.com/apache/opendal/pull/3921
next_offset
by @WenyXu in https://github.com/apache/opendal/pull/3927
Full Changelog: https://github.com/apache/opendal/compare/v0.44.1...v0.44.2
CompleteReader
by @WenyXu in https://github.com/apache/incubator-opendal/pull/3861
bindings_python.yml
by @messense in https://github.com/apache/incubator-opendal/pull/3837
BufferReader
by @WenyXu in https://github.com/apache/incubator-opendal/pull/3864
cur
of BufferReader
by @WenyXu in https://github.com/apache/incubator-opendal/pull/3865
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.44.0...v0.44.1
thread_pool_enabled
option has been removed.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.
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')
.
actual
& expected
to pass ci by @Young-Flash in https://github.com/apache/incubator-opendal/pull/3733
get_file_id_by_path
by @G-XD in https://github.com/apache/incubator-opendal/pull/3801
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.43.0...v0.44.0
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.
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/
.
We changed our internal lister
implementation to align with the list
public API for better performance and readability.
Page
=> List
Pager
=> Lister
BlockingPage
=> BlockingList
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
.
Because of a TLS lib issue, we temporarily disable the services-ftp
feature.
Because of a TLS lib issue, we temporarily disable the services-ftp
feature.
Because of a TLS lib issue, we temporarily disable the services-ftp
feature.
There are no API changes.
ftp
for python and java binding by @ZutJoe in https://github.com/apache/incubator-opendal/pull/3659
Page
to List
by @Xuanwo in https://github.com/apache/incubator-opendal/pull/3589
raw::tests
been excluded unexpectedly by @Xuanwo in https://github.com/apache/incubator-opendal/pull/3623
stat
and stat_with
by @Xuanwo in https://github.com/apache/incubator-opendal/pull/3657
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.42.0...v0.43.0
OpenDAL bumps it's MSRV to 1.67.0.
enable_exact_buf_write
option has been deprecated and is superseded by BufferedWriter
, introduced in version 0.40.write_min_size
option has been deprecated and replaced by BufferedWriter
, also introduced in version 0.40.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.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 native support has been removed. Users who want to access wasabi can use our s3
service instead.
There are no API changes.
There are no API changes.
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.
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()
We remove the old error classes and provide a couple of Exception based class for the error handling.
opendal.Error
is based class for all the exceptions now.opendal.exceptions.Unexpected
is added.opendal.exceptions.Unsupported
is added.opendal.exceptions.ConfigInvalid
is added.opendal.exceptions.NotFound
is added.opendal.exceptions.PermissionDenied
is added.opendal.exceptions.IsADirectory
is added.opendal.exceptions.NotADirectory
is added.opendal.exceptions.AlreadyExists
is added.opendal.exceptions.IsSameFile
is added.opendal.exceptions.ConditionNotMatch
is added.opendal.exceptions.ContentTruncated
is added.opendal.exceptions.ContentIncomplete
is added.opendal.exceptions.InvalidInput
is added.The naming convention for C binding has been altered.
Renaming certain struct names for consistency.
opendal_operator_ptr
=> opendal_operator
opendal_blocking_lister
=> opendal_lister
opendal_list_entry
=> opendal_entry
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
rename
support by @G-XD in https://github.com/apache/incubator-opendal/pull/3238
Metadata
a POJO by @G-XD in https://github.com/apache/incubator-opendal/pull/3277
memoryview
instead of bytes
to avoid copy by @messense in https://github.com/apache/incubator-opendal/pull/3310
Metadata::metakey()
api by @G-XD in https://github.com/apache/incubator-opendal/pull/3373
list_with
in Operator::list
by @G-XD in https://github.com/apache/incubator-opendal/pull/3305
OPENDAL_DISABLE_RANDOM_ROOT
by @suyanhanx in https://github.com/apache/incubator-opendal/pull/3456
connection_string
config description in doc by @xring in https://github.com/apache/incubator-opendal/pull/3388
range_reader
change in upgrade doc by @wcy-fdu in https://github.com/apache/incubator-opendal/pull/3401
testWriteFileWithNonAsciiName
behavior test by @G-XD in https://github.com/apache/incubator-opendal/pull/3424
linux-aarch_64
by @amunra in https://github.com/apache/incubator-opendal/pull/3527
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.41.0...v0.42.0
There are no public API and raw API changes.
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.
There are no API changes.
There are no API changes.
prometheus-client
crate with PrometheusClientLayer by @flaneur2020 in https://github.com/apache/incubator-opendal/pull/3134
BlockingLayer
for non-blocking services that don't support blocking by @messense in https://github.com/apache/incubator-opendal/pull/3198
copy
test by @G-XD in https://github.com/apache/incubator-opendal/pull/3207
WebdavFs
to dav-server-fs-opendal by @Young-Flash in https://github.com/apache/incubator-opendal/pull/3119
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.40.0...v0.41.0
Checkout our OwO #1 to know more about this release!
RFC-2578 merges append
into write
and removes append
API.
op.write()
for convenience.op.write_with().append(true)
instead of op.append()
.The same rule applies to writer()
and writer_with()
.
RFC-2774 proposes a new lister
API to replace current list
and scan
. And we add a new API list
to return entries directly.
list()
for convenience.list_with().delimiter("")
or lister_with().delimiter("")
instead of scan()
.lister()
or lister_with()
instead.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 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.
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.
RFC-3017 removes copy_from
API from the oio::Write
trait. Users who implements services and layers by hand should remove this API.
read_dir
by @Young-Flash in https://github.com/apache/incubator-opendal/pull/2736
OpMonad
to support custom IO monad by @silver-ymz in https://github.com/apache/incubator-opendal/pull/2789
WebdavMetaData
by @Young-Flash in https://github.com/apache/incubator-opendal/pull/2857
_pin
with !Unpin
as argument by @morristai in https://github.com/apache/incubator-opendal/pull/2886
content_length
to writer by @Xuanwo in https://github.com/apache/incubator-opendal/pull/3044
parse_batch_delete_response
with Multipart::parse
by @G-XD in https://github.com/apache/incubator-opendal/pull/3071
webdav_put
signatures by using OpWrite
. by @laipz8200 in https://github.com/apache/incubator-opendal/pull/3076
webdav_get
. by @laipz8200 in https://github.com/apache/incubator-opendal/pull/3081
oss_put_object
signatures by using OpWrite by @sysu-yunz in https://github.com/apache/incubator-opendal/pull/3080
http
methods signature by using OpRead/OpStat by @miroim in https://github.com/apache/incubator-opendal/pull/3083
gcs
methods signature by using OpXxxx by @wavty in https://github.com/apache/incubator-opendal/pull/3087
fixtures
from core/src/services/{service}
to top-level fixtures/{service}
by @G-XD in https://github.com/apache/incubator-opendal/pull/3088
webhdfs
methods signature by using OpXxxx
by @cxorm in https://github.com/apache/incubator-opendal/pull/3109
us-east-1
for non-aws s3 by @G-XD in https://github.com/apache/incubator-opendal/pull/2812
flush
before sync_all
by @WenyXu in https://github.com/apache/incubator-opendal/pull/3053
Github
to GitHub
by @jbampton in https://github.com/apache/incubator-opendal/pull/3012
MacOS
to macOS
by @jbampton in https://github.com/apache/incubator-opendal/pull/3013
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.39.0...v0.40.0
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).
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.
In PR #2698, OpenDAL re-org the internal structure of opendal::raw::oio
and changed some APIs name.
stat
by @suyanhanx in https://github.com/apache/incubator-opendal/pull/2649
HADOOP_CONF_DIR
setting in guidance document by @wcy-fdu in https://github.com/apache/incubator-opendal/pull/2713
Full Changelog: https://github.com/apache/incubator-opendal/compare/v0.38.1...v0.39.0