Skip to content

build: prepare for arrow 59 and DataFusion 55 - #8997

Open
slachiewicz wants to merge 2 commits into
lance-format:mainfrom
slachiewicz:agent/arrow-59-datafusion-55
Open

slachiewicz wants to merge 2 commits into
lance-format:mainfrom
slachiewicz:agent/arrow-59-datafusion-55

Conversation

@slachiewicz

@slachiewicz slachiewicz commented Sep 4, 2026

Copy link
Copy Markdown

Groundwork for the arrow 59 / DataFusion 55 / pyo3 0.29 upgrade, limited to what compiles against the arrow 58 / DataFusion 54 already on main, so the upgrade itself can wait for geodatafusion and datafusion-python and shrink to version bumps plus the API migrations that only exist in the new releases.

  • MSRV 1.91 → 1.94 in the three Cargo.toml files and the msrv CI matrix. DataFusion 55.x declares rust-version = 1.94.0; the pinned toolchain is already 1.97.
  • FixedSizeBinaryArray construction in tests and a doc example goes through try_from_iter, which both arrow 58 and 59 provide. arrow 59 removes the infallible From<Vec<&[u8]>> / From<Vec<Option<&[u8]>>> impls; try_from(..).unwrap() would carry over, but on arrow 58 it trips clippy::unnecessary_fallible_conversions.
  • record_batch! is imported from arrow_array instead of the datafusion::common re-export in lance-namespace-datafusion.

Not in this PR: the dependency bumps and lockfiles, MutableArrayData::try_extend (new in arrow 59), the DataFusion 55 ExecutionPlan migration (replace_children, EnsureRequirements, ConfigNonZeroUsize), PyCapsule::new_with_value, and dropping geo from lance default features. The complete upgrade is kept rebased on slachiewicz/lance@agent/arrow-59-datafusion-55-full until geoarrow-rs ships an arrow-59 release (geoarrow/geoarrow-rs#1474) and datafusion-python 55 is on PyPI (apache/datafusion-python#1696).

This change was created with AI assistance.

@github-actions github-actions Bot added A-python Python bindings A-index Vector index, linalg, tokenizer A-java Java bindings + JNI A-deps Dependency updates A-encoding Encoding, IO, file reader/writer A-namespace Namespace impls chore labels Sep 4, 2026
@wjones127

wjones127 commented Sep 4, 2026

Copy link
Copy Markdown
Contributor
  • geo feature. geoarrow-array/geoarrow-schema 0.8 pin arrow ^58 and geodatafusion 0.5 pins datafusion ^54; neither has a release on arrow 59 (geoarrow-rs main has moved, geodatafusion main has not). Because geo is a default feature of the lance crate it cannot compile against arrow 59 from any published crate, so the last commit drops it from the defaults with a TODO. Either wait for those releases or ship this without geo in the defaults.
  • datafusion-python. PyPI has only datafusion 54.0.0 and python/pyproject.toml pins datafusion>=54,<55; the FFI table-provider test needs the Python package to match datafusion-ffi 55, so test_table_provider.py will fail until datafusion-python 55 ships.

Hi @slachiewicz, thanks for making a PR. In general, we wait for geodatafusion and datafusion-python to upgrade first be upgrading. If you want you can keep this PR up as a draft until that happens, and then we can rebase at that time.

@slachiewicz
slachiewicz force-pushed the agent/arrow-59-datafusion-55 branch from 456d98f to 8111986 Compare September 9, 2026 16:04
Xuanwo added a commit that referenced this pull request Sep 14, 2026
The [cargo-deny
job](https://github.com/lance-format/lance/actions/runs/34867471289/job/104054814011)
fails on RUSTSEC-2026-0285 because the lockfiles select rustls 0.23.40.
Update rustls to the patched 0.23.45 release in the workspace, Python,
and Java lockfiles, together with its required aws-lc and webpki
dependencies.

Validation uses cargo-deny 0.19.0, matching CI: the workspace passes all
checks and Java passes the advisory check. Python no longer reports the
rustls advisory, but its advisory check remains blocked by existing PyO3
0.28.3 advisories RUSTSEC-2026-0176 and RUSTSEC-2026-0177; the PyO3
upgrade is covered separately by #8997.
@slachiewicz
slachiewicz force-pushed the agent/arrow-59-datafusion-55 branch from 8111986 to dde8cc2 Compare September 18, 2026 13:51
DataFusion 55 declares rust-version 1.94.0, so the upcoming arrow 59 /
DataFusion 55 upgrade cannot pass the MSRV job at 1.91. Rust 1.94 has been
stable since 2026-03 and the pinned toolchain is already 1.97.
… keeps

arrow 59 removes the infallible `From<Vec<&[u8]>>` impls. `try_from_iter`
exists on both 58 and 59, and unlike `try_from(..).unwrap()` it does not
trip `clippy::unnecessary_fallible_conversions` while `From` still exists.
Also import `record_batch!` from arrow_array rather than the DataFusion
re-export.
@slachiewicz
slachiewicz force-pushed the agent/arrow-59-datafusion-55 branch from dde8cc2 to afc5e2c Compare September 18, 2026 14:14
@slachiewicz slachiewicz changed the title build: upgrade to arrow 59, DataFusion 55, and pyo3 0.29 build: prepare for arrow 59 and DataFusion 55 Sep 18, 2026
@github-actions github-actions Bot added the A-ci CI / build workflows label Sep 18, 2026
@slachiewicz
slachiewicz marked this pull request as ready for review September 18, 2026 16:41
@slachiewicz

Copy link
Copy Markdown
Author

only minimal set of changes to be a bit better prepared for upcoming upgrade. I've expected that will be more but looks it's mainy rust upgrade

@lance-gatekeeper lance-gatekeeper Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Gate recommendation: approve.

The reduced, current-dependency-compatible scope is sound: try_from_iter and direct arrow_array macro imports prepare the affected tests for Arrow 59 without changing runtime behavior, while the manifest and CI MSRV updates consistently match DataFusion 55’s Rust 1.94 requirement.

Please mark this PR with the breaking-change label.

@lance-gatekeeper lance-gatekeeper Bot added the K-approved Latest Gatekeeper recommendation permits acceptance. label Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ci CI / build workflows A-deps Dependency updates A-encoding Encoding, IO, file reader/writer A-index Vector index, linalg, tokenizer A-java Java bindings + JNI A-namespace Namespace impls A-python Python bindings chore K-approved Latest Gatekeeper recommendation permits acceptance.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants