Skip to content

Commit 8f9a387

Browse files
authored
Bump to version 0.12 (#518)
* Bump to version 0.12 Signed-off-by: Xuanwo <[email protected]> * Update oay and oli Signed-off-by: Xuanwo <[email protected]> * Add link to rfc Signed-off-by: Xuanwo <[email protected]> Signed-off-by: Xuanwo <[email protected]>
1 parent 870978f commit 8f9a387

File tree

9 files changed

+112
-47
lines changed

9 files changed

+112
-47
lines changed

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](https://semver.org/).
77

8+
## [v0.12.0] - 2022-08-12
9+
10+
### Added
11+
12+
- RFC-0501: New Builder (#501)
13+
- feat: Implement RFC-0501 New Builder (#510)
14+
15+
### Changed
16+
17+
- feat: Use isahc to replace hyper (#471)
18+
- refactor: make parse http error code public (#511)
19+
- refactor: Extrace new http error APIs (#515)
20+
- refactor: Simplify the error response parse logic (#516)
21+
22+
### Removed
23+
24+
- refactor: Remove deprecated struct Metadata (#503)
25+
826
## [v0.11.4] - 2022-08-02
927

1028
### Added
@@ -531,6 +549,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
531549

532550
Hello, OpenDAL!
533551

552+
[v0.12.0]: https://github.com/datafuselabs/opendal/compare/v0.11.4...v0.12.0
534553
[v0.11.4]: https://github.com/datafuselabs/opendal/compare/v0.11.3...v0.11.4
535554
[v0.11.3]: https://github.com/datafuselabs/opendal/compare/v0.11.2...v0.11.3
536555
[v0.11.2]: https://github.com/datafuselabs/opendal/compare/v0.11.1...v0.11.2

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ keywords = ["storage", "data", "s3", "fs", "azblob"]
99
license = "Apache-2.0"
1010
name = "opendal"
1111
repository = "https://github.com/datafuselabs/opendal"
12-
version = "0.11.4"
12+
version = "0.12.0"
1313

1414
[package.metadata.docs.rs]
1515
all-features = true

README.md

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ You may be looking for:
3030
- Access different storage system in the same way
3131
- Native decompress support
3232
- Native service-side encryption support
33+
- Powerful [`Layer`](https://docs.rs/opendal/latest/opendal/trait.Layer.html)
3334
- **100%** documents covered
3435
- Behavior tests for all services
3536

@@ -38,45 +39,52 @@ You may be looking for:
3839
```rust
3940
use anyhow::Result;
4041
use futures::StreamExt;
42+
use futures::TryStreamExt;
43+
use opendal::DirEntry;
44+
use opendal::DirStreamer;
45+
use opendal::Object;
46+
use opendal::ObjectMetadata;
4147
use opendal::ObjectMode;
4248
use opendal::Operator;
43-
use opendal::Metadata;
44-
use opendal::Object;
45-
use opendal::ObjectStreamer;
4649
use opendal::Scheme;
4750

4851
#[tokio::main]
4952
async fn main() -> Result<()> {
50-
// Init Operator from env.
51-
let op = Operator::from_env(Scheme::S3).await?;
53+
// Init Operator
54+
let op = Operator::from_env(Scheme::Fs)?;
5255

5356
// Create object handler.
54-
let o: Object = op.object("test_file");
57+
let o = op.object("test_file");
5558

5659
// Write data info object;
57-
let _: () = o.write("Hello, World!").await?;
60+
o.write("Hello, World!").await?;
5861

5962
// Read data from object;
60-
let bs: Vec<u8> = o.read().await?;
63+
let bs = o.read().await?;
6164

6265
// Read range from object;
63-
let bs: Vec<u8> = o.range_read(1..=11).await?;
66+
let bs = o.range_read(1..=11).await?;
67+
68+
// Get object's path
69+
let name = o.name();
70+
let path = o.path();
6471

65-
// Get object's Metadata
66-
let meta: Metadata = o.metadata().await?;
67-
let path: &str = meta.path();
68-
let mode: ObjectMode = meta.mode();
69-
let length: u64 = meta.content_length();
70-
let content_md5: Option<String> = meta.content_md5();
72+
// Fetch more meta about object.
73+
let meta = o.metadata().await?;
74+
let mode = meta.mode();
75+
let length = meta.content_length();
76+
let content_md5 = meta.content_md5();
77+
let etag = meta.etag();
7178

7279
// Delete object.
73-
let _: () = o.delete().await?;
80+
o.delete().await?;
7481

7582
// List dir object.
76-
let o: Object = op.object("test_dir/");
77-
let mut obs: ObjectStreamer = o.list().await?;
78-
while let Some(entry) = obs.next().await {
79-
let entry: Object = entry?;
83+
let o = op.object("test_dir/");
84+
let mut ds = o.list().await?;
85+
while let Some(entry) = ds.try_next().await? {
86+
let path = entry.path();
87+
let mode = entry.mode();
8088
}
8189

8290
Ok(())

docs/upgrade.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,38 @@
22

33
This document intends to record upgrade and migrate procedures while OpenDAL meets breaking changes.
44

5+
## Upgraded to v0.12
6+
7+
OpenDAL introduces breaking changes for services initiation.
8+
9+
Since v0.12, `Operator::new` will accept `impl Accessor + 'static` instead of `Arc<dyn Accessor>`:
10+
11+
```rust
12+
impl Operator {
13+
pub fn new(accessor: impl Accessor + 'static) -> Self { .. }
14+
}
15+
```
16+
17+
Every service's `Builder` now have a `build()` API which can be run without async:
18+
19+
```rust
20+
let mut builder = fs::Builder::default();
21+
let op: Operator = Operator::new(builder.build()?);
22+
```
23+
24+
Along with these changes, `Operator::from_iter` and `Operator::from_env` now is a blocking API too.
25+
26+
For more information about this change, please refer to [RFC-0501: New Builder](https://opendal.databend.rs/rfcs/0501-new-builder.html).
27+
28+
The following APIs have been deprecated:
29+
30+
- All services `Builder::finish()` (replaced by `Builder::build()`)
31+
- All services `Backend::build()` (replace by `Builder::default()`)
32+
33+
The following APIs have been removed:
34+
35+
- public struct `Metadata` (deprecated in v0.8, replaced by `ObjectMetadata`)
36+
537
## Upgraded to v0.8
638

739
OpenDAL introduces a breaking change of `list` related operations in v0.8.

oay/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

oay/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ keywords = ["storage", "data", "s3", "fs", "azblob"]
88
license = "Apache-2.0"
99
name = "oay"
1010
repository = "https://github.com/datafuselabs/opendal"
11-
version = "0.11.4"
11+
version = "0.12.0"
1212

1313
[dependencies]
1414
actix-web = "4.1"
@@ -17,7 +17,7 @@ clap = { version = "3.2", features = ["cargo"] }
1717
env_logger = "0.9"
1818
futures = "0.3"
1919
log = "0.4"
20-
opendal = "0.11.4"
20+
opendal = "0.12.0"
2121
tokio = { version = "1.20", features = ["rt-multi-thread", "macros"] }
2222

2323
# Please comment the following patch while releasing.

oli/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

oli/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ keywords = ["storage", "data", "s3", "fs", "azblob"]
88
license = "Apache-2.0"
99
name = "oli"
1010
repository = "https://github.com/datafuselabs/opendal"
11-
version = "0.11.4"
11+
version = "0.12.0"
1212

1313
[dependencies]
1414
anyhow = "1.0"
1515
clap = { version = "3.2", features = ["cargo"] }
1616
env_logger = "0.9"
1717
log = "0.4"
18-
opendal = "0.11.4"
18+
opendal = "0.12.0"
1919

2020
# Please comment the following patch while releasing.
2121
[patch.crates-io]

src/lib.rs

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,15 @@
3131
//! - `retry`: Enable operator retry support.
3232
//! - `services-hdfs`: Enable hdfs service support.
3333
//! - `services-http`: Enable http service support.
34+
//! - `rustls`: Use rustls instead openssl for https connection
35+
//! - `serde`: Implement serde::{Serialize,Deserialize} for ObjectMetadata.
3436
//!
3537
//! # Example
3638
//!
3739
//! ```no_run
3840
//! use anyhow::Result;
3941
//! use futures::StreamExt;
42+
//! use futures::TryStreamExt;
4043
//! use opendal::DirEntry;
4144
//! use opendal::DirStreamer;
4245
//! use opendal::Object;
@@ -48,37 +51,40 @@
4851
//! #[tokio::main]
4952
//! async fn main() -> Result<()> {
5053
//! // Init Operator
51-
//! let op = Operator::from_env(Scheme::S3)?;
54+
//! let op = Operator::from_env(Scheme::Fs)?;
5255
//!
5356
//! // Create object handler.
54-
//! let o: Object = op.object("test_file");
57+
//! let o = op.object("test_file");
5558
//!
5659
//! // Write data info object;
57-
//! let _: () = o.write("Hello, World!").await?;
60+
//! o.write("Hello, World!").await?;
5861
//!
5962
//! // Read data from object;
60-
//! let bs: Vec<u8> = o.read().await?;
63+
//! let bs = o.read().await?;
6164
//!
6265
//! // Read range from object;
63-
//! let bs: Vec<u8> = o.range_read(1..=11).await?;
66+
//! let bs = o.range_read(1..=11).await?;
6467
//!
65-
//! // Get object's Metadata
66-
//! let name: &str = o.name();
67-
//! let path: &str = o.path();
68-
//! let meta: ObjectMetadata = o.metadata().await?;
69-
//! let mode: ObjectMode = meta.mode();
70-
//! let length: u64 = meta.content_length();
71-
//! let content_md5: Option<&str> = meta.content_md5();
72-
//! let etag: Option<&str> = meta.etag();
68+
//! // Get object's path
69+
//! let name = o.name();
70+
//! let path = o.path();
71+
//!
72+
//! // Fetch more meta about object.
73+
//! let meta = o.metadata().await?;
74+
//! let mode = meta.mode();
75+
//! let length = meta.content_length();
76+
//! let content_md5 = meta.content_md5();
77+
//! let etag = meta.etag();
7378
//!
7479
//! // Delete object.
75-
//! let _: () = o.delete().await?;
80+
//! o.delete().await?;
7681
//!
7782
//! // List dir object.
78-
//! let o: Object = op.object("test_dir/");
79-
//! let mut obs: DirStreamer = o.list().await?;
80-
//! while let Some(entry) = obs.next().await {
81-
//! let entry: DirEntry = entry?;
83+
//! let o = op.object("test_dir/");
84+
//! let mut ds = o.list().await?;
85+
//! while let Some(entry) = ds.try_next().await? {
86+
//! let path = entry.path();
87+
//! let mode = entry.mode();
8288
//! }
8389
//!
8490
//! Ok(())

0 commit comments

Comments
 (0)