Remove GroupsAccumulator::supports_convert_to_state and require convert_to_state - #23489
Conversation
|
Thank you for opening this pull request! Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch). Details |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #23489 +/- ##
==========================================
+ Coverage 80.71% 80.74% +0.03%
==========================================
Files 1089 1089
Lines 368750 368736 -14
Branches 368750 368736 -14
==========================================
+ Hits 297631 297739 +108
+ Misses 53375 53242 -133
- Partials 17744 17755 +11 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Hi @alamb, could you take a look at this? Thanks! Since all |
alamb
left a comment
There was a problem hiding this comment.
Looks good to me @lyne7-sc -- thank you 🙏
I don't understand what extra coverage partial_hash_skip_aggregation_uses_required_convert_to_state is adding
This PR's descripton says
Add a regression test covering the partial hash aggregation skip path.
But the partial aggregation skip path is already covered (via slt and elsewhere). Specifically here
Unit tests — datafusion/physical-plan/src/aggregates/mod.rs
| } | ||
|
|
||
| #[tokio::test] | ||
| async fn partial_hash_skip_aggregation_uses_required_convert_to_state() -> Result<()> |
There was a problem hiding this comment.
I don't understand what extra coverage this is adding -- if we are testing partial state conversion I think we should write the tests using sql in sqllogictests. This test has a lot of setup and like I mentioned I am not sure about its coverage value
There was a problem hiding this comment.
Ah, thanks for pointing this out. I missed test_partial_hash_stream_skip_aggregation_after_first_batch. It already provides very similar coverage of the skip-partial path, so I’ve removed the redundant test.
| `datafusion_expr_common::groups_accumulator::GroupsAccumulator::convert_to_state` | ||
| no longer provides a default implementation, and the | ||
| `GroupsAccumulator::supports_convert_to_state` capability method has been | ||
| removed. All `GroupsAccumulator` implementations must now support converting |
|
🚀 |
…nvert_to_state` (apache#23489) ## Which issue does this PR close? <!-- We generally require a GitHub issue to be filed for all bug fixes and enhancements and this helps us generate change logs for our releases. You can link an issue to this PR using the GitHub syntax. For example `Closes apache#123` indicates that this PR will close issue apache#123. --> - Closes apache#23081. ## Rationale for this change <!-- Why are you proposing this change? If this is already explained clearly in the issue then this section is not needed. Explaining clearly why changes are proposed helps reviewers understand your changes and offer better suggestions for fixes. --> Following apache#23275, all `GroupsAccumulator` implementations now provide `convert_to_state`. The `supports_convert_to_state` capability flag is therefore no longer needed. ## What changes are included in this PR? <!-- There is no need to duplicate the description in the issue here but it is sometimes worth providing a summary of the individual changes in this PR. --> - Make `GroupsAccumulator::convert_to_state` a required trait method. - Remove `GroupsAccumulator::supports_convert_to_state` and its implementations. - Remove the corresponding capability checks from hash aggregation. - Simplify skip-partial aggregation to use the required `convert_to_state` implementation directly. - Add a regression test covering the partial hash aggregation skip path. - Document the breaking trait change in the 55.0.0 upgrading guide. - Remove `FFI_GroupsAccumulator::supports_convert_to_state`. This changes the FFI ABI layout, so providers and consumers must be rebuilt against DataFusion 55. ## Are these changes tested? <!-- We typically require tests for all PRs in order to: 1. Prevent the code from being accidentally broken by subsequent changes 2. Serve as another way to document the expected behavior of the code If tests are not included in your PR, please explain why (for example, are they covered by existing tests)? --> Yes. Added a regression test verifying that skip-partial aggregation uses the required `convert_to_state` implementation without a capability flag. Existing physical-plan and FFI tests continue to pass. ## Are there any user-facing changes? <!-- If there are user-facing changes then we may require documentation to be updated before approving the PR. --> <!-- If there are any breaking changes to public APIs, please add the `api change` label. --> Yes. This is a breaking Rust API change for external `GroupsAccumulator` implementations: - `convert_to_state` must now be implemented. - `supports_convert_to_state` should be removed. The migration is documented in the 55.0.0 upgrading guide. The `FFI_GroupsAccumulator` layout has changed. FFI providers and consumers must be rebuilt against DataFusion 55 and must not exchange this struct with older major versions.
Which issue does this PR close?
GroupsAccumulator::supports_convert_to_stateand makeconvert_to_statemandatory #23081.Rationale for this change
Following #23275, all
GroupsAccumulatorimplementations now provideconvert_to_state.The
supports_convert_to_statecapability flag is therefore no longer needed.What changes are included in this PR?
Make
GroupsAccumulator::convert_to_statea required trait method.Remove
GroupsAccumulator::supports_convert_to_stateand its implementations.Remove the corresponding capability checks from hash aggregation.
Simplify skip-partial aggregation to use the required
convert_to_stateimplementation directly.Add a regression test covering the partial hash aggregation skip path.
Document the breaking trait change in the 55.0.0 upgrading guide.
Remove
FFI_GroupsAccumulator::supports_convert_to_state. This changes the FFI ABI layout, so providers and consumers must be rebuilt against DataFusion 55.Are these changes tested?
Yes. Added a regression test verifying that skip-partial aggregation uses the required
convert_to_stateimplementation without a capability flag.Existing physical-plan and FFI tests continue to pass.
Are there any user-facing changes?
Yes. This is a breaking Rust API change for external
GroupsAccumulatorimplementations:convert_to_statemust now be implemented.supports_convert_to_stateshould be removed.The migration is documented in the 55.0.0 upgrading guide.
The
FFI_GroupsAccumulatorlayout has changed. FFI providers and consumers must be rebuilt against DataFusion 55 and must not exchange this struct with older major versions.