Skip to content

Smol+async global executor 1.80 dev #3791

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 35 commits into
base: main
Choose a base branch
from

Conversation

martin-kolarik
Copy link

async-global-executor added as the fourth executor. The PR extends PR #3790.

This is a breaking change -- async-global-executor has MSRV 1.80, therefore sqlx will have to be upgraded too.

@abonander
Copy link
Collaborator

I would prefer to deprecate async-std for a release cycle before deleting it. Just cause it's discontinued doesn't mean people will stop using it immediately, especially because its constituent crates will continue to receive updates.

@martin-kolarik
Copy link
Author

I would prefer to deprecate async-std for a release cycle before deleting it. Just cause it's discontinued doesn't mean people will stop using it immediately, especially because its constituent crates will continue to receive updates.

Sure, I did not remove async_std from the sources, for the same reason.

@abonander abonander added the breaking:MSRV Requires waiting for an MSRV bump (see FAQ.md) label Apr 11, 2025
Copy link
Collaborator

@abonander abonander left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same note as here: #3790 (review)

@martin-kolarik martin-kolarik force-pushed the smol+async-global-executor-1.80-dev branch from 1f43f07 to 8d6377b Compare April 13, 2025 11:39
@martin-kolarik martin-kolarik force-pushed the smol+async-global-executor-1.80-dev branch from 8c2c83c to 9b0cebb Compare April 13, 2025 13:50
@martin-kolarik martin-kolarik force-pushed the smol+async-global-executor-1.80-dev branch from 35237ac to c3e8f61 Compare April 13, 2025 14:24
@abonander
Copy link
Collaborator

@martin-kolarik do you plan on addressing the CI failure and merge conflicts?

@martin-kolarik
Copy link
Author

@martin-kolarik do you plan on addressing the CI failure and merge conflicts?

I would like to address both. I will look at merge conflict first (today or on Monday) and we will see how tests changed. CI failure is linked to changes around to_socket_addrs and I suspect tests fail due to changed behavior. I will write more later.

# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	rust-toolchain.toml
#	sqlx-cli/Cargo.toml
#	sqlx-core/Cargo.toml
#	sqlx-core/src/rt/mod.rs
#	sqlx-macros-core/src/lib.rs
#	sqlx-sqlite/src/connection/worker.rs
@martin-kolarik
Copy link
Author

So, merged, fixed, and tests are running: the main issue of previous failures disappeared by itself, there certificate for localhost was expected.

CI completion is prevented with error in build using minimal versions check, where async-fs fails. According to rust-lang/cargo#5657 it may happen. Did you have similar issues in the past? How to fix it?

@abonander
Copy link
Collaborator

abonander commented Jul 7, 2025

Strictly speaking, this is a bug in async-fs 2.0.0 because they're calling futures_lite::FutureExt::poll() which did not exist yet in the version they actually specify (1.2).

The whole idea of the minimal-versions test is to make sure that SQLx still builds if someone hasn't updated some arbitrary dependency below it in the tree, so the test is working as expected here. However, this isn't strictly our problem to begin with.

We could switch to -Z minimal-direct-versions which only lowers our direct dependencies to their minimum specified versions, so we'd only be testing our own specifications. This gives limits the scope to dependencies we actually control, but also weakens the guarantees of the minimal-versions check (since indirect dependencies could still be technically broken).

I'd really like feedback from @iamjpotts here since he's the one who recommended adding the check to begin with (#3340).

@iamjpotts
Copy link
Contributor

The whole idea of the minimal-versions test is to make sure that SQLx still builds if someone hasn't updated some arbitrary dependency below it in the tree, so the test is working as expected here. However, this isn't strictly our problem to begin with.

Yes, it is intended to be a correctness check on the declared minimums.

From that standpoint the ci check is working as designed. The original issue was mentioned in #3118 (linked from #3340).

async-fs fixed their dependency declaration in async-fs 2.1.

smol requires futures-lite 2.0, but in sqlx is optional.

The fix is likely to be adding an explicit dependency on a transitive dependency, where the explicit dependency enforces the correct minimum. Possible workarounds to explore:

  • Add a sqlx dependency on async-fs 2.1
  • Add a sqlx dependency on futures-lite 2.0

For either it would be a good idea to add a comment that the above is to resolve a problem with a transitive dependency (and which one, idk if it is smol without further investigation)

Try to fix CI -Z minimal-versions check
@martin-kolarik
Copy link
Author

  • Add a sqlx dependency on async-fs 2.1
  • Add a sqlx dependency on futures-lite 2.0

I added dependency on async-fs 2.1, as it imo better describes the intention of the workaround: the async-fs 2.0 contains bug, not futures-lite.

@iamjpotts
Copy link
Contributor

  • Add a sqlx dependency on async-fs 2.1
  • Add a sqlx dependency on futures-lite 2.0

I added dependency on async-fs 2.1, as it imo better describes the intention of the workaround: the async-fs 2.0 contains bug, not futures-lite.

This specific change lgtm though @abonander may have more fine grained feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking:MSRV Requires waiting for an MSRV bump (see FAQ.md)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants