Skip to content

[X-3985] Merge upstream 55.1.0 into branch-55 - #83

Closed
MassivePizza wants to merge 17 commits into
branch-55from
merge-upstream-55.1.0
Closed

MassivePizza wants to merge 17 commits into
branch-55from
merge-upstream-55.1.0

Conversation

@MassivePizza

Copy link
Copy Markdown

Which issue does this PR close?

  • Closes #.

Rationale for this change

What changes are included in this PR?

Are these changes tested?

Are there any user-facing changes?

alamb and others added 17 commits August 20, 2026 15:53
…ize (apache#24384) (apache#24529)

## Which issue does this PR close?

- Part of apache#24462
- Backport of apache#24384 to `branch-55` (for 55.1.0, tracked in apache#24462).
- Fixes apache#24383

## Rationale for this change

`UnnestExec` emitted exactly one output batch per input batch, however
many rows the unnesting produced, never consulting
`datafusion.execution.batch_size`. This let downstream operators receive
arbitrarily large batches and made peak memory scale with input batch
size times list length instead of `batch_size`. No API change, so it
fits the backport criteria.

## What changes are included in this PR?

Clean cherry-pick of apache#24384 (commit
6187d47). No adaptation required.

## Are these changes tested?

Yes. Carries the original regression coverage, all tests pass.

## Are there any user-facing changes?

`UnnestExec` output batches now respect
`datafusion.execution.batch_size` as an upper bound. No API changes.

Co-authored-by: Andy Grove <agrove@apache.org>
…s adaptation (apache#24125) (apache#24530)

## Which issue does this PR close?

- Part of apache#24462
- Backport of apache#24125 to `branch-55` (for 55.1.0, tracked in apache#24462).
- Fixes apache#24109

## Rationale for this change

With `datafusion.execution.parquet.pushdown_filters = true`, a predicate
on a struct field was reported as fully handled by the scan whenever the
file needed schema adaptation, so `FilterExec` was removed from the plan
and the predicate was silently dropped — returning every row instead of
the filtered set. This is a correctness bug (wrong results), not
specific to 55.0.0, so it fits the backport criteria.

## What changes are included in this PR?

Cherry-pick of apache#24125 (commit 40c208e).
Git's recursive merge auto-resolved surrounding context differences in
`datafusion/physical-expr-adapter/src/schema_rewriter.rs` and
`datafusion/sqllogictest/test_files/parquet_nested_schema_pruning.slt`;
no manual conflict resolution or adaptation of the fix itself was
required.

One follow-up commit adapts a test expectation: `branch-55` doesn't have
apache#24130/apache#24315, which taught nested schema pruning to union the leaves
needed by mixed whole-column + field-access reads (e.g. `select s,
s['y'] from narrow`). Without that optimization, the mixed-access case
falls back to reading every physical leaf, so `bytes_scanned` is `219`
here instead of the `146` the original PR's test expects on `main`. This
is a pre-existing difference in pruning capability, not a correctness
regression from this fix.

## Are these changes tested?

Yes. Carries the original regression coverage, all tests pass.

## Are there any user-facing changes?

`WHERE s['field'] = ...` predicates on struct columns now filter
correctly when Parquet filter pushdown requires schema adaptation. No
API changes.

---------

Co-authored-by: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
…te_physical_plan (apache#24690) (apache#24694)

This PR is a cherry-pick of apache#24690 onto `branch-55`. See the original PR
for a description of the issue.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…uction (apache#24723) (apache#24752)

This is a back port of apache#24723 onto `branch-55` to support
`datafusion-python` upgrade to 55.1.0. The details can be found in the
linked PR. This is needed for
apache/datafusion-python#1677

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
… to planned schema in aggregation (apache#24394) (apache#24699)

This is a back port of apache#24394 for `branch-55`.

The original issue is apache#24069

Note that the original PR was marked as an auto-detected api change, but
I believe that is a false positive.

---------

Co-authored-by: Patrick Ribbsaeter <patrickswedish@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
… and new_default (apache#24582) (apache#24876)

This is a back port of apache#24582 into `branch-55` for inclusion in 55.1.0.
Please see the original PR for details.

Co-authored-by: Unik Dahal <61407386+unikdahal@users.noreply.github.com>
This is a small update to the Cargo.lock file to update

- chacha20 v0.10.0 -> v0.10.2
- h2 v0.4.13 -> v0.4.19

The first was due to a yanked crate. The second was due to a security
vulnerability, RUSTSEC-2026-0258.

The yanked crate is a warning in cargo audit and will auto-resolve on
building to the newer 0.10.2, and the security vulnerability is already
updated in `main`.
…asts (apache#23169) (apache#24875)

This PR is a backport of apache#23169 onto `branch-55`. 

I made one update the `use` statement in `planner.rs`.

Co-authored-by: Dewey Dunnington <dewey@wherobots.com>
Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
…ache#24670) (apache#24992)

Backports apache#24670 to branch-55.

Co-authored-by: Tim Saucer <timsaucer@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This PR updates the version number and changelog for the 55.1.0 release.
…che#25216) (apache#25485)

- Fixes apache#25215 on branch-55

This PR:
- Backports apache#25092 and
apache#25216 from @comphead to the
branch-55 line

## Rationale

MinIO withdrew `minio/minio` from Docker Hub on 2026-09-11, so every
`datafusion-cli` storage integration test on `branch-55` now panics
while pulling the image (for example the CI failure on
apache#25277).

---------

Co-authored-by: Oleks V <comphead@users.noreply.github.com>
…5309) (apache#25514)

- Fixes the `security_audit` failure on `branch-55` (for example
https://github.com/apache/datafusion/actions/runs/35435408307/job/105877099456
on apache#25277)

This PR:
- Backports apache#25309 from @Xuanwo
to the branch-55 line

## Rationale

`branch-55` locks `rustls` 0.23.39, which is affected by
[RUSTSEC-2026-0285](https://rustsec.org/advisories/RUSTSEC-2026-0285.html)
("TLS 1.3 handshake messages incorrectly accepted across encryption
level boundaries", published 2026-09-14). Every PR targeting `branch-55`
now fails the `security_audit` job until the lockfile is updated.
`rustls` 0.23.45 fixes the vulnerability.

The cherry-pick applied cleanly: `branch-55` and `main` had identical
`rustls`, `aws-lc-rs`, `aws-lc-sys`, and `rustls-webpki` entries before
the fix.

## Testing

`cargo audit` with the same ignores as the CI job passes on this branch
(it fails on `branch-55` without this change):

```sh
cargo audit --ignore RUSTSEC-2026-0194 --ignore RUSTSEC-2026-0195
```

`cargo fetch --locked` and `cargo check --locked -p datafusion-cli` also
succeed, confirming the updated lockfile resolves and builds.

Co-authored-by: Xuanwo <github@xuanwo.io>
… (apache#25277)

- Part of apache#24462
- Fixes apache#24474 on branch-55

This PR:
- Backports apache#24351 from
@dentiny to the branch-55 line

## Rationale

As noted in
apache#24462 (comment),
publishing `datafusion-spark` for the 55.1.0 release required a manual
local change because the crate does not compile without its optional
`core` feature (see apache#24474).
Backporting this fix means a future 55.2.0 release can be published
without manual intervention.

Verified locally that `cargo check -p datafusion-spark
--no-default-features` now succeeds on this branch (it fails on
`branch-55` without this change).

Co-authored-by: dentiny <dentinyhao@gmail.com>
…e#25706) (apache#25759)

## Which issue does this PR close?

- Fixes apache#25705 on `branch-55`.

## Rationale for this change

This PR backports apache#25706 from @a10y to the `branch-55` line.

`quay.io/minio/minio` no longer allows anonymous pulls. `branch-55`
pulls that image for the `datafusion-cli` storage integration tests (it
moved there from Docker Hub in apache#25485), so the `cargo test
datafusion-cli (amd64)` job is expected to hit the same failure that
apache#25705 reported on `main`. The last `branch-55` CI run was on
2026-09-19, before the image became unavailable, so no run on this
branch has failed yet.

## What changes are included in this PR?

A clean `git cherry-pick -x` of e2ca7f3
with no conflicts. The patch is identical to the original (same `git
patch-id`).

- `datafusion-cli/tests/cli_integration.rs`: run the S3 tests against a
RustFS container (`docker.io/rustfs/rustfs:1.0.0`) instead of MinIO.
- `.github/workflows/rust.yml`: pre-pull the RustFS image instead of the
MinIO one.
- `datafusion-cli/Cargo.toml`: drop the `minio` feature of
`testcontainers-modules`.
- `datafusion-cli/CONTRIBUTING.md`: update the storage test docs.

## What is the testing strategy for this PR?

The existing `datafusion-cli` storage integration tests cover this
change, and CI runs them in the `cargo test datafusion-cli (amd64)` job.
On this branch, `datafusion-cli/tests/` and its snapshots match `main`
apart from one unrelated Spark test. `testcontainers` and
`testcontainers-modules` also resolve to the same versions as on `main`.

Locally, `cargo fmt --all -- --check`, `cargo clippy -p datafusion-cli
--all-targets --all-features -- -D warnings`, `taplo format --check` and
the prettier docs check pass. The Docker-based storage tests were not
run locally. CI runs them.

## Are there any user-facing changes?

No. The change only affects tests, CI and contributor docs.

Signed-off-by: Andrew Duffy <andrew@a10y.dev>
Co-authored-by: Andrew Duffy <a10y@users.noreply.github.com>
…pache#24809) (apache#25821)

## Which issue does this PR close?

- Fixes apache#24807 in the `branch-55` release line.
- Part of the 55.2.0 release tracking issue apache#25758.
- Backports the merged fix in apache#24809.

## Rationale for this change

In DataFusion 55.1.0, running `EnsureRequirements` again on a plan with
a pushed-down `fetch` can remove the global limit and return too many
rows. This is a correctness fix for a bug present in the 55 release
line, so it belongs in the 55.2.0 patch release. The incorrect result
and expected behavior are described in apache#24807.

## What changes are included in this PR?

- Cherry-picks the merged commit from apache#24809 onto `branch-55`.
- Keeps fetched distribution operators as row-selection boundaries
during reoptimization.
- Preserves a fetched ordered merge's TopK selection when replacing
order-preserving variants.
- Carries over the original regression tests and adjusts the backport
for the 55 branch.

## What is the testing strategy for this PR?

- `cargo fmt --all`
- `cargo test -p datafusion --test core_integration
physical_optimizer::enforce_distribution` (87 passed)
- `cargo clippy --all-targets --all-features -- -D warnings`
- `./dev/rust_lint.sh` (passed with the CI-pinned `hawkeye 6.2.0`)
- Initialized the repository's test-data submodules, then ran the
documented extended workspace test command. One unrelated macOS
RSS-threshold test failed: `smj_with_mem_limit_1_runner` measured 154.2
MB against a 152.6 MB allowance; it failed again in isolation at 158.6
MB. This test exercises sort-merge join memory accounting, which this
backport does not change.
- Ran the extended workspace suite with only that RSS test skipped: all
`datafusion` library, integration, and fuzz tests passed. The custom
SQLLogic runner does not accept libtest's `--skip` flag, so I ran all
other workspace packages separately without a skip; those passed,
including all 503 SQLLogic files.
- No local benchmark directly exercises reoptimization of a fetched
physical plan.

## Are there any user-facing changes?

Queries keep their requested global limit when distribution requirements
are optimized more than once. This corrects query results without
changing public APIs.
Brings in the upstream 55.1.0 backports. Content matches rebasing the fork
patches onto upstream/branch-55, with these fork commits superseded upstream:

- #75 fix: preserve fetch across distribution reoptimization
  -> apache#24809 (backport apache#25821)
- #79 fix(ci): pull the MinIO test image from quay.io
  -> apache#25092, apache#25216 (backport apache#25485), later replaced by
     the switch to rustfs in apache#25706 (backport apache#25759)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants