apache / apache/opendal

Tracking Python wheel support for foyer on armv7

Open
#7,619 0 comments 4 reactions 0 assignees View on GitHub
bindings/python release release-blocker
Dominant language
Rust
Stars
5.4k
Forks
825
Avg merge
1d 14m
Merged PRs (30d)
127

Description

## Problem

During the `v0.57.0-rc.1` release, `Release Python Binding` failed on the armv7 wheel job:

- RC tag: [`v0.57.0-rc.1`](https://github.com/apache/opendal/tree/v0.57.0-rc.1)
- Failed workflow: [`Release Python Binding`](https://github.com/apache/opendal/actions/runs/26404198824)
- Failed job: [`wheels (ubuntu-latest, armv7l)`](https://github.com/apache/opendal/actions/runs/26404198824/job/77723504851)

The failing build used Python binding `services-all`, which included the `foyer` service at the time:

- [`bindings/python/Cargo.toml` in `v0.57.0-rc.1`](https://github.com/apache/opendal/blob/v0.57.0-rc.1/bindings/python/Cargo.toml#L51-L85)

`foyer` depends on the `foyer` crate:

- [`core/services/foyer/Cargo.toml` in `v0.57.0-rc.1`](https://github.com/apache/opendal/blob/v0.57.0-rc.1/core/services/foyer/Cargo.toml#L33-L35)

That dependency path pulls in `io-uring v0.7.12`. On armv7, `io-uring` rejects its prebuilt `sys.rs` bindings unless either bindgen is used or `--cfg=io_uring_skip_arch_check` is passed. The release log reported:

```text
The prebuilt `sys.rs` may not be compatible with your target,
please use bindgen feature to generate new `sys.rs` of your arch
or use `--cfg=io_uring_skip_arch_check` to skip the check.
```

## Release mitigation

For the `0.57.0` release, we should avoid bypassing `io-uring`'s arch check. The release fix is to remove `foyer` from Python binding `services-all` instead of passing `--cfg=io_uring_skip_arch_check`.

Related PR:

- https://github.com/apache/opendal/pull/7618

## Follow-up

We need to decide the long-term Python wheel policy for services that depend on platform-sensitive native Linux APIs.

Possible options:

1. Keep `foyer` out of Python `services-all`.
2. Add a separate opt-in Python feature for `foyer`.
3. Build Python wheels with different service sets per target.
4. Investigate enabling `io-uring` bindgen for affected targets, if the manylinux build environment can support it reliably.

The key requirement is that Python release wheels should not depend on bypassing native binding compatibility checks for unsupported architectures.

Contributor guide

Open the contributing guide

Research direction

Start with bindings/python/Cargo.toml and core/services/foyer/Cargo.toml, then inspect the Release Python Binding workflow and the armv7 failure linked in the issue. Compare the four proposed wheel-policy options, including whether the manylinux environment can support io-uring bindgen. Done means a decided long-term policy that avoids bypassing native binding compatibility checks and is reflected in the release configuration.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, python, rust
Domain
build-system, ci-cd, release
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.