Repository navigation
[datafusion] Upgrade to DataFusion 55.2.0 - #1236
Merged
Merged
Conversation
JingsongLi
marked this pull request as draft
October 28, 2026 06:21
Use Mosaic 0.3.0 and Vortex 0.90.0 on the Rust 1.95 main branch and remove the Arrow 58 C Data bridge. Migrate Vortex sessions and logical layout slots while preserving nested nulls and old-file reads. Align Spark aggregates with DataFusion 55, preserve any_value null semantics, and repair the vector C test schema fixture.
JingsongLi
force-pushed
the
codex/upgrade-datafusion-55
branch
from
November 3, 2026 06:26
08c1dcc to
fc00f08
Compare
JingsongLi
marked this pull request as ready for review
November 3, 2026 06:35
Allow batch and stream writers to be collected on any Python thread while retaining exclusive method access. Track every Python reference retained by URI factories, readers, and streams, retire released references, and close live streams once outside locks. Suspend the runtime for cancellation cleanup callbacks so they can reenter Native APIs. Cover cycle collection, thread handoff, replacement failures, cleanup errors, and runtime reentry.
Use the existing Arrow Map representation for both logical types and let Arrow runtime validation reject actual null keys. Remove multiset List metadata, conversions, format branches, and nullable-element fixtures while preserving Java file encodings, ordinary map value nullability, and prior upgrade and Python GC fixes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Upgrade DataFusion 54 to 55.2.0 on the current Rust 1.95 main branch, unify the workspace on Arrow 59, and integrate DataFusion 55 scan pruning, UDF optimization, and EXPLAIN metrics.
Brief change log
aec0ce70). Upgrade DataFusion/FFI/Spark to 55.2.0, Arrow/Parquet to 59.3.2, ORC to 0.9, and PyO3 to 0.29; use Python DataFusion 55.0.0.any_value(value[, ignoreNulls])semantics and subsequent user function overrides.is_variant_null; expose actual output rows, batches, bytes, and compute time for regular and audit-log scans, including PostgreSQL-style EXPLAIN JSON.Tests
Validated locally on macOS with the final source and rebuilt Python extension:
any_value(..., false/true)after rebuilding the final extension.Regression coverage includes Vortex 0.75 disk compatibility, nested independent NULLs, reordered/sparse projection, Mosaic reads/writes, aggregate state conversion, custom function overrides, MERGE, strict-UDF join elimination, live TopK I/O pruning, signed NaN/zero handling, actual pgjson scan metrics, and Java Row/Avro/Parquet compatibility.
The final Python suite treats
PytestUnraisableExceptionWarningandPytestUnhandledThreadExceptionWarningas errors and completed with zero warnings. New regressions cover cross-thread GC for both writer types, captured/replaced callbacks, shared and independent URI readers, explicit thread handoff and concurrent-call rejection, reference retirement after rejected replacements/prepares, single-owner stream cleanup, and cancellation-time Native callback reentry. Each reproduced GC/resource/runtime failure was verified before its fix. Multiple review passes found no remaining actionable issues. Linux/Windows execution of the new Python fixes remains for CI; no benchmark speedup is claimed.API and Format
DataFusion consumers must use 55.x and Arrow consumers must use 59.x. Mosaic and Vortex now use Arrow 59 directly.
RowFilterFactorygains optional pruning methods with conservative defaults.MAP<K, V>andMULTISET<T>both use Arrow Map with non-nullable entry structs and keys. Multiset counts remain non-null Int32. Column and ordinary map value nullability retain their existing rules. Actual NULL keys are rejected by Arrow runtime validation. The Paimon logical table schema and Java-compatible Row/Avro/Parquet file encodings are unchanged; no multiset List metadata or representation bridge is introduced.Documentation
Update SQL dependency examples, explain DataFusion 55 integration boundaries, and document the non-null Arrow Map key policy. Paimon MERGE continues through SQLContext; generic provider MERGE, file virtual columns, range declarations, and query-planner FFI are not advertised by this upgrade.