Skip to content

feat(async): add async_compatible methods to identify backend compatibility#355

Merged
simonsan merged 4 commits intorustic-rs:mainfrom
nardoor:feature/async_incompatible
Nov 18, 2024
Merged

feat(async): add async_compatible methods to identify backend compatibility#355
simonsan merged 4 commits intorustic-rs:mainfrom
nardoor:feature/async_incompatible

Conversation

@nardoor
Copy link
Copy Markdown
Contributor

@nardoor nardoor commented Nov 17, 2024

Add getters to warn about async_incompatible backends.

Using the type system or fixing all async compatibility issue is big and structural work.
To avoid runtime crash for our users I suggest using this getter as a temporary fix.

tracking issue: rustic-rs/rustic#1181 (see for more details)

@nardoor nardoor added M-breaking Meta: Breaking change A-backends Area: Related to backends in rustic_core A-api Area: Related to API design of rustic_core labels Nov 17, 2024
@nardoor nardoor requested review from aawsome and simonsan November 17, 2024 10:59
@nardoor nardoor self-assigned this Nov 17, 2024
@nardoor nardoor force-pushed the feature/async_incompatible branch from f1c3171 to 47c3ba0 Compare November 17, 2024 11:03
@nardoor
Copy link
Copy Markdown
Contributor Author

nardoor commented Nov 17, 2024

For information: Rclone, Rest and Opendal backends are the 3 async incompatible backend.

@nardoor nardoor changed the title Feature/async incompatible feature/async_incompatible Nov 17, 2024
@nardoor nardoor force-pushed the feature/async_incompatible branch 2 times, most recently from b6a3851 to a66a948 Compare November 18, 2024 11:16
@nardoor nardoor force-pushed the feature/async_incompatible branch from a66a948 to eb2e1ed Compare November 18, 2024 11:18
@nardoor
Copy link
Copy Markdown
Contributor Author

nardoor commented Nov 18, 2024

updated the code:

  • non api breaking anymore (default impl, async_compatible is opt-in)
  • to avoid future double negation, i changed is_async_incompatible to is_async_compatible

@nardoor nardoor removed the M-breaking Meta: Breaking change label Nov 18, 2024
@simonsan simonsan changed the title feature/async_incompatible feat(async): add async_compatible methods to identify backend compatibility Nov 18, 2024
@simonsan simonsan added this pull request to the merge queue Nov 18, 2024
Merged via the queue into rustic-rs:main with commit 37b40e2 Nov 18, 2024
@rustic-release-plz rustic-release-plz bot mentioned this pull request Nov 18, 2024
simonsan pushed a commit that referenced this pull request Nov 18, 2024
## 🤖 New release
* `rustic_backend`: 0.4.2 -> 0.5.0 (⚠️ API breaking changes)
* `rustic_core`: 0.5.5 -> 0.6.0 (⚠️ API breaking changes)
* `rustic_testing`: 0.2.3 -> 0.3.0 (✓ API compatible changes)

### ⚠️ `rustic_backend` breaking changes

```
--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/enum_missing.ron

Failed in:
  enum rustic_backend::error::LocalBackendErrorKind, previously in file /tmp/.tmp0sSY8G/rustic_backend/src/error.rs:90
  enum rustic_backend::error::RestErrorKind, previously in file /tmp/.tmp0sSY8G/rustic_backend/src/error.rs:67
  enum rustic_backend::error::BackendAccessErrorKind, previously in file /tmp/.tmp0sSY8G/rustic_backend/src/error.rs:10
  enum rustic_backend::error::RcloneErrorKind, previously in file /tmp/.tmp0sSY8G/rustic_backend/src/error.rs:43

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/module_missing.ron

Failed in:
  mod rustic_backend::error, previously in file /tmp/.tmp0sSY8G/rustic_backend/src/error.rs:1
```

### ⚠️ `rustic_core` breaking changes

```
--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  LocalDestination::remove_dir, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:129
  LocalDestination::remove_file, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:152
  LocalDestination::create_dir, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:171
  LocalDestination::set_times, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:189
  LocalDestination::set_user_group, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:237
  LocalDestination::set_uid_gid, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:283
  LocalDestination::set_permission, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:324
  LocalDestination::set_extended_attributes, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:385
  LocalDestination::set_length, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:466
  LocalDestination::create_special, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:521
  LocalDestination::read_at, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:599
  LocalDestination::write_at, previously in file /tmp/.tmp0sSY8G/rustic_core/src/backend/local_destination.rs:663
  RusticError::into_inner, previously in file /tmp/.tmp0sSY8G/rustic_core/src/error.rs:46
  RusticError::backend_error, previously in file /tmp/.tmp0sSY8G/rustic_core/src/error.rs:61
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `rustic_backend`
<blockquote>

##
[0.5.0](rustic_backend-v0.4.2...rustic_backend-v0.5.0)
- 2024-11-18

### Added

- *(async)* add `async_compatible` methods to identify backend
compatibility
([#355](#355))
- add 'yandex-disk' to enabled opendal services and update opendal to
0.50.2 ([#360](#360))

### Other

- *(error)* enhance error logging and output formatting
([#361](#361))
- *(backend)* simplify code in local backend
([#362](#362))
- *(backend)* migrate from `backoff` to `backon`
([#356](#356))
- *(error)* improve error messages and file handling
([#334](#334))
- *(deps)* lock file maintenance rust dependencies
([#345](#345))
- *(deps)* [**breaking**] upgrade to new conflate version
([#300](#300))
- *(errors)* [**breaking**] Improve error handling, display and clean up
codebase ([#321](#321))
</blockquote>

## `rustic_core`
<blockquote>

##
[0.6.0](rustic_core-v0.5.5...rustic_core-v0.6.0)
- 2024-11-18

### Added

- *(async)* add `async_compatible` methods to identify backend
compatibility
([#355](#355))

### Fixed

- prevent overwriting hot repository on init
([#353](#353))

### Other

- *(error)* enhance error logging and output formatting
([#361](#361))
- *(deps)* remove Derivative and replace with Default impl due to
RUSTSEC-2024-0388
([#359](#359))
- *(error)* improve error messages and file handling
([#334](#334))
- *(deps)* lock file maintenance rust dependencies
([#345](#345))
- *(deps)* remove cdc and switch to rustic_cdc
([#348](#348))
- *(deps)* [**breaking**] upgrade to new conflate version
([#300](#300))
- *(errors)* [**breaking**] Improve error handling, display and clean up
codebase ([#321](#321))
</blockquote>

## `rustic_testing`
<blockquote>

##
[0.3.0](rustic_testing-v0.2.3...rustic_testing-v0.3.0)
- 2024-11-18

### Added

- *(async)* add `async_compatible` methods to identify backend
compatibility
([#355](#355))

### Other

- *(errors)* [**breaking**] Improve error handling, display and clean up
codebase ([#321](#321))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Co-authored-by: rustic-release-plz[bot] <182542030+rustic-release-plz[bot]@users.noreply.github.com>
github-merge-queue bot pushed a commit to rustic-rs/rustic that referenced this pull request Nov 21, 2024
…tibility and error out (#1355)

Use `getters` to early exit webdav when using `async_incompatible`
backends.

Using the type system or fixing all async compatibility issue is big and
structural work.
To avoid runtime crash for our users I suggest using this getter as a
temporary fix.

tracking issue: #1181 (see for
more details)

> As far as I could tell, `webdav` feature was the only one spawning a
`runtime` in `rustic` and using it.

### Before merging this one:
- [x] rustic_core (core and backend) must be updated to a release that
includes rustic-rs/rustic_core#355.

---------

Co-authored-by: simonsan <14062932+simonsan@users.noreply.github.com>
simonsan added a commit that referenced this pull request Nov 24, 2024
@rustic-release-plz rustic-release-plz bot mentioned this pull request Nov 24, 2024
github-merge-queue bot pushed a commit that referenced this pull request Nov 24, 2024
## 🤖 New release
* `rustic_backend`: 0.5.0 -> 0.5.1 (✓ API compatible changes)
* `rustic_core`: 0.6.1 -> 0.7.0 (⚠️ API breaking changes)
* `rustic_testing`: 0.3.0 -> 0.3.1 (✓ API compatible changes)

### ⚠️ `rustic_core` breaking changes

```
--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/inherent_method_missing.ron

Failed in:
  Vfs::into_webdav_fs, previously in file /tmp/.tmpgG4RJE/rustic_core/src/vfs.rs:470
  Repository::is_async_compatible, previously in file /tmp/.tmpgG4RJE/rustic_core/src/repository.rs:716

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/struct_missing.ron

Failed in:
  struct rustic_core::vfs::WebDavFS, previously in file /tmp/.tmpgG4RJE/rustic_core/src/vfs/webdavfs.rs:51

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.36.0/src/lints/trait_method_missing.ron

Failed in:
  method is_async_compatible of trait ReadBackend, previously in file /tmp/.tmpgG4RJE/rustic_core/src/backend.rs:189
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `rustic_backend`
<blockquote>

##
[0.5.1](rustic_backend-v0.5.0...rustic_backend-v0.5.1)
- 2024-11-24

### Other

- Revert "feat(async): add `async_compatible` methods to identify
backend compatibility
([#355](#355))"
</blockquote>

## `rustic_core`
<blockquote>

##
[0.7.0](rustic_core-v0.6.1...rustic_core-v0.7.0)
- 2024-11-24

### Other

- remove webdav feature
([#366](#366))
- Revert "feat(async): add `async_compatible` methods to identify
backend compatibility
([#355](#355))"
</blockquote>

## `rustic_testing`
<blockquote>

##
[0.3.1](rustic_testing-v0.3.0...rustic_testing-v0.3.1)
- 2024-11-24

### Other

- Revert "feat(async): add `async_compatible` methods to identify
backend compatibility
([#355](#355))"
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

Co-authored-by: rustic-release-plz[bot] <182542030+rustic-release-plz[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-api Area: Related to API design of rustic_core A-backends Area: Related to backends in rustic_core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants