Skip to content

Commit ad477a4

Browse files
authored
fix(issue-platform): Fix bug where searching by issue shortname in discover returns too many results (#47406)
We're not correctly filtering when we use a query like `issue:<shortname>` for any issue platform issues in discover. This fixes that to work with all new issue types in the future. Once we've migrated perf issues over we'll need to remove the perf issue case here as well.
1 parent 53b34dd commit ad477a4

File tree

2 files changed

+35
-15
lines changed

2 files changed

+35
-15
lines changed

src/sentry/search/events/datasets/discover.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,10 +1602,10 @@ def _issue_filter_converter(self, search_filter: SearchFilter) -> Optional[Where
16021602
value = to_list(search_filter.value.value)
16031603
# `unknown` is a special value for when there is no issue associated with the event
16041604
group_short_ids = [v for v in value if v and v != "unknown"]
1605-
error_group_filter_values = ["" for v in value if not v or v == "unknown"]
1605+
general_group_filter_values = ["" for v in value if not v or v == "unknown"]
16061606
perf_group_filter_values = ["" for v in value if not v or v == "unknown"]
16071607

1608-
error_groups = []
1608+
general_groups = []
16091609
performance_groups = []
16101610

16111611
if group_short_ids and self.builder.params.organization is not None:
@@ -1618,26 +1618,26 @@ def _issue_filter_converter(self, search_filter: SearchFilter) -> Optional[Where
16181618
raise InvalidSearchQuery(f"Invalid value '{group_short_ids}' for 'issue:' filter")
16191619
else:
16201620
for group in groups:
1621-
if group.issue_category == GroupCategory.ERROR:
1622-
error_groups.append(group.id)
1623-
elif group.issue_category == GroupCategory.PERFORMANCE:
1621+
if group.issue_category == GroupCategory.PERFORMANCE:
16241622
performance_groups.append(group.id)
1625-
error_groups = sorted(error_groups)
1623+
else:
1624+
general_groups.append(group.id)
1625+
general_groups = sorted(general_groups)
16261626
performance_groups = sorted(performance_groups)
16271627

1628-
error_group_filter_values.extend(error_groups)
1628+
general_group_filter_values.extend(general_groups)
16291629
perf_group_filter_values.extend(performance_groups)
16301630

16311631
# TODO (udameli): if both groups present, return data for both
1632-
if error_group_filter_values:
1632+
if general_group_filter_values:
16331633
return self.builder.convert_search_filter_to_condition(
16341634
SearchFilter(
16351635
SearchKey("issue.id"),
16361636
operator,
16371637
SearchValue(
1638-
error_group_filter_values
1638+
general_group_filter_values
16391639
if search_filter.is_in_filter
1640-
else error_group_filter_values[0]
1640+
else general_group_filter_values[0]
16411641
),
16421642
)
16431643
)

tests/snuba/api/endpoints/test_organization_events.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -625,20 +625,40 @@ def test_generic_issue_ids_filter(self):
625625
before_now(hours=1).replace(tzinfo=timezone.utc),
626626
user=user_data,
627627
)
628+
event, _, group_info = self.store_search_issue(
629+
self.project.id,
630+
self.user.id,
631+
[f"{ProfileFileIOGroupType.type_id}-group2"],
632+
"prod",
633+
before_now(hours=1).replace(tzinfo=timezone.utc),
634+
user=user_data,
635+
)
636+
637+
query = {
638+
"field": ["title", "release", "environment", "user.display", "timestamp"],
639+
"statsPeriod": "90d",
640+
"query": f"issue.id:{group_info.group.id}",
641+
"dataset": "issuePlatform",
642+
}
643+
with self.feature(["organizations:profiling"]):
644+
response = self.do_request(query)
645+
assert response.status_code == 200, response.content
646+
assert len(response.data["data"]) == 1
647+
assert response.data["data"][0]["title"] == group_info.group.title
648+
assert response.data["data"][0]["environment"] == "prod"
649+
assert response.data["data"][0]["user.display"] == user_data["email"]
650+
assert response.data["data"][0]["timestamp"] == event.timestamp
628651

629652
query = {
630653
"field": ["title", "release", "environment", "user.display", "timestamp"],
631654
"statsPeriod": "90d",
632655
"query": f"issue:{group_info.group.qualified_short_id}",
633656
"dataset": "issuePlatform",
634657
}
635-
with self.feature(
636-
[
637-
"organizations:profiling",
638-
]
639-
):
658+
with self.feature(["organizations:profiling"]):
640659
response = self.do_request(query)
641660
assert response.status_code == 200, response.content
661+
assert len(response.data["data"]) == 1
642662
assert response.data["data"][0]["title"] == group_info.group.title
643663
assert response.data["data"][0]["environment"] == "prod"
644664
assert response.data["data"][0]["user.display"] == user_data["email"]

0 commit comments

Comments
 (0)