fix: flush FilterExec output for unbounded inputs - #24353
Open
goutamadwant wants to merge 1 commit into
Open
Conversation
3 tasks
Contributor
Was that only to buffer up to |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #24353 +/- ##
==========================================
- Coverage 81.19% 81.18% -0.01%
==========================================
Files 1110 1110
Lines 388750 388891 +141
Branches 388750 388891 +141
==========================================
+ Hits 315657 315740 +83
- Misses 54506 54537 +31
- Partials 18587 18614 +27 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
goutamadwant
force-pushed
the
fix-unbounded-filter-flush
branch
from
August 15, 2026 07:32
de069c7 to
3289f3f
Compare
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.
Which issue does this PR close?
UNBOUNDEDtables) #9016.Rationale for this change
While prototyping the minimal push-based streaming example proposed in #9016, I found that
FilterExeccould buffer small filtered results indefinitely when its input was unbounded. Because an unbounded source may never finish, consumers could not observe those results while continuing to push input batches.This PR extracts the smallest prerequisite fix so the streaming example and user-guide documentation can follow as separate, focused PRs.
This is complementary to #23856: that PR changes how filtered batches are supplied to the coalescer, while this PR controls when buffered rows become observable for an unbounded input.
What changes are included in this PR?
LimitedBatchCoalescerflush operation that emits buffered rows while still allowing subsequent input.FilterExecoutput after each input batch when its input is unbounded.Planned follow-up PRs:
datafusion-examples, showing how to feed batches into a running query and consume results incrementally.Are these changes tested?
Yes.
cargo test -p datafusion-physical-plancargo test -p datafusioncargo test -p datafusion-clicargo test --profile=ci --test sqllogictestsavro,json,backtrace,extended_tests,recursive_protection,parquet_encryptioncargo clippy --all-targets --all-features -- -D warningscargo fmt --all -- --checkAre there any user-facing changes?
Yes.
FilterExecnow emits filtered results incrementally for unbounded inputs instead of waiting for the target batch size or input completion.Bounded-input coalescing remains unchanged. There are no public API or breaking changes.