Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix assert failure for range window functions #14168

Merged
merged 2 commits into from
Sep 23, 2023

Conversation

mythrocks
Copy link
Contributor

Fixes #13855.

This commit fixes an erroneous assert check in range window functions, where the wrong data-type is checked for timestamp order-by columns.

For timestamps, it's the duration::rep type that should be checked, when accessing the order by column.

This fix allows ROLLING_TEST to complete correctly, in DEBUG mode.

Description

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

Fixes rapidsai#13855.

This commit fixes an erroneous assert check in range window functions,
where the wrong data-type is checked for timestamp order-by columns.

For timestamps, it's the duration::rep type that should be checked,
when accessing the order by column.

This fix allows ROLLING_TEST to complete correctly, in DEBUG mode.
@copy-pr-bot
Copy link

copy-pr-bot bot commented Sep 22, 2023

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@mythrocks mythrocks self-assigned this Sep 22, 2023
@github-actions github-actions bot added the libcudf Affects libcudf (C++/CUDA) code. label Sep 22, 2023
// For timestamp types, T must match the range rep type for the order-by column.
cudf_assert((type_id_matches_device_storage_type<T>(col.type().id()) or
cudf::type_dispatcher(col.type(), is_correct_range_rep{})) &&
"data type mismatch when accessing the order-by column");
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure I agree with retrieving the data (via element()) using the rep-type and doing operations on said rep-type. I would rather the actual type be read (via element()) and used directly.
I feel the original error is correct and this is a flaw in the design of this code perhaps.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The reason we're comparing the rep-type values here is that the order-by columns are timestamps, and the preceding/following values are durations (e.g. 2 days ago).

For integral order-by columns, preceding/following are of the same types. But not for timestamps.

Copy link
Contributor Author

@mythrocks mythrocks Sep 22, 2023

Choose a reason for hiding this comment

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

Hmm. That said, maybe I could stand to tighten this up a little more... I'll see about a stricter check for timestamps.

I did take a look. By this point, the duration types for preceding and following are normalized with the order-by's timestamp types already, upstream.

For this release, I'd rather we didn't dismantle the logic in range_window_bounds (i.e. using rep-types) as part of fixing this assert condition. I could tackle this as a follow-on, if that's agreeable.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ah, I just realized that one unintended consequence of doing order-by comparisons without switching to the rep-types is that all those templates will be instantiated for all timestamp types, duration types, fixed-point, etc. :/

@mythrocks mythrocks added bug Something isn't working non-breaking Non-breaking change labels Sep 22, 2023
@mythrocks
Copy link
Contributor Author

/ok to test

@PointKernel
Copy link
Member

/ok to test

@mythrocks
Copy link
Contributor Author

/merge

@rapids-bot rapids-bot bot merged commit d67cc5d into rapidsai:branch-23.10 Sep 23, 2023
54 checks passed
@mythrocks
Copy link
Contributor Author

This change has been merged. Thank you all for the reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

[BUG] Rolling window function tests fail assert in DEBUG
4 participants