Skip to content

fix(events-stats): Return 400 for EAP topEvents without a group-by - #129446

Open
1AbdullahButt wants to merge 1 commit into
getsentry:masterfrom
1AbdullahButt:fix/events-stats-top-events-no-groupby
Open

1AbdullahButt wants to merge 1 commit into
getsentry:masterfrom
1AbdullahButt:fix/events-stats-top-events-no-groupby

Conversation

@1AbdullahButt

Copy link
Copy Markdown

A topEvents request to events-stats on an EAP dataset (spans, logs, trace metrics) that has only aggregate fields, such as field=p95(span.duration)&topEvents=10, has nothing to group by. build_top_event_conditions then builds an empty OrFilter for each top row, Snuba rejects it with Invalid trace item filter, empty 'or' clause, and the client gets a bare 500.

This change checks for that case before running the RPC queries and returns a 400 with topEvents requires at least one non-aggregate field. It sits next to the existing Cannot group by timestamp check, which handles another invalid group-by. Non-RPC datasets are unchanged.

I added test_top_events_without_groupby to the spans events-stats tests. It sends the request shape from the issue and expects the 400. I couldn't run the Snuba-backed tests locally (no devservices on this machine), so I'm relying on CI for them. ruff format and ruff check pass on the changed files.

Fixes #129342

🤖 Generated with Claude Code

Legal Boilerplate

Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.

A topEvents request on an RPC dataset (spans, logs, trace metrics) with
only aggregate fields has no columns to group by. The top events
conditions were then built from empty OR filters, which Snuba rejects,
so the endpoint returned a 500 with no useful detail.

Reject these requests up front with a 400 that says a non-aggregate
field is needed, matching the existing "Cannot group by timestamp"
check.

Fixes getsentry#129342

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@1AbdullahButt
1AbdullahButt requested a review from a team as a code owner November 1, 2026 15:10
@github-actions github-actions Bot added the Scope: Backend Automatically applied to PRs that change backend components label Nov 1, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

events-stats returns 500 for topEvents with no group-by

1 participant