Skip to content

Commit 76d02c3

Browse files
authored
fix(seer-rpc): Don't extract function name, simplify ifs (#89938)
Have been debugging why the issue fetching query sometimes breaks, and it seems like it's related to the more complicated parsers. Wanna see whether a simpler query works. Seer never uses the `function_name`, so it can be safely removed
1 parent ede1bab commit 76d02c3

File tree

3 files changed

+35
-21
lines changed

3 files changed

+35
-21
lines changed

src/sentry/seer/fetch_issues/fetch_issues.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
from sentry.models.group import Group, GroupStatus
2222
from sentry.models.project import Project
2323
from sentry.models.repository import Repository
24-
from sentry.seer.fetch_issues.more_parsing import patch_parsers_more
24+
from sentry.seer.fetch_issues.more_parsing import (
25+
patch_parsers_more,
26+
simple_function_name_conditions,
27+
)
2528
from sentry.snuba.dataset import Dataset
2629
from sentry.snuba.referrer import Referrer
2730
from sentry.utils.snuba import raw_snql_query
@@ -90,13 +93,6 @@ def _get_issues_for_file(
9093
if not projects:
9194
return []
9295

93-
# Gets the appropriate parser for formatting the snuba query given the file extension.
94-
# The extension is never replaced in reverse codemapping.
95-
file_extension = sentry_filenames[0].split(".")[-1]
96-
if file_extension not in patch_parsers_more:
97-
return []
98-
language_parser = patch_parsers_more[file_extension]
99-
10096
# Fetch an initial, candidate set of groups.
10197
group_ids: list[int] = list(
10298
Group.objects.filter(
@@ -109,7 +105,6 @@ def _get_issues_for_file(
109105
.values_list("id", flat=True)
110106
)[:MAX_RECENT_ISSUES]
111107
project_ids = [project.id for project in projects]
112-
multi_if = language_parser.generate_multi_if(function_names)
113108

114109
# Fetch the latest event for each group, along with some other event data we'll need for
115110
# filtering by function names and file names.
@@ -163,7 +158,6 @@ def _get_issues_for_file(
163158
Column("group_id"),
164159
Column("event_id"),
165160
Column("title"),
166-
Function("multiIf", multi_if, "function_name"),
167161
]
168162
)
169163
.set_where(
@@ -182,9 +176,7 @@ def _get_issues_for_file(
182176
Op.IN,
183177
sentry_filenames,
184178
),
185-
language_parser.generate_function_name_conditions(
186-
function_names, stackframe_idx
187-
),
179+
simple_function_name_conditions(function_names, stackframe_idx),
188180
],
189181
)
190182
for stackframe_idx in range(-STACKFRAME_COUNT, 0) # first n frames
@@ -235,15 +227,11 @@ def _add_event_details(
235227
serialized_events: list[EventSerializerResponse] = serialize(
236228
events, serializer=EventSerializer()
237229
)
238-
group_id_to_group_dict = {
239-
group_dict["group_id"]: group_dict for group_dict in issues_result_set
240-
}
241230
return [
242231
{ # Structured like seer.automation.models.IssueDetails
243232
"id": int(event_dict["groupID"]),
244233
"title": event_dict["title"],
245234
"events": [event_dict],
246-
"function_name": group_id_to_group_dict[int(event_dict["groupID"])]["function_name"],
247235
}
248236
for event_dict in serialized_events
249237
if event_dict["groupID"] is not None

src/sentry/seer/fetch_issues/more_parsing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
import re
22

3+
from snuba_sdk import Condition, Op
4+
35
from sentry.integrations.source_code_management.language_parsers import (
46
PATCH_PARSERS,
57
LanguageParser,
68
PythonParser,
79
SimpleLanguageParser,
10+
stackframe_function_name,
811
)
912

1013

14+
def simple_function_name_conditions(
15+
function_names: list[str],
16+
stack_frame_idx: int,
17+
):
18+
return Condition(stackframe_function_name(stack_frame_idx), Op.IN, function_names)
19+
20+
1121
class PythonParserMore(PythonParser):
1222
@classmethod
1323
def extract_functions_from_rest_of_patch(cls, patch: str) -> set[str]:

tests/sentry/seer/fetch_issues/test_fetch_issues.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,8 @@ def test_simple(self):
3737
)
3838

3939
issue_ids = [issue["id"] for issue in issues_with_event_details]
40-
function_names = [issue["function_name"] for issue in issues_with_event_details]
4140
assert group_id != self.group_id
4241
assert set(issue_ids) == {group_id, self.group_id}
43-
assert set(function_names) == {"planet", "world"}
4442

4543
# Check that each issue is structured like an IssueDetails
4644
assert all(len(issue["events"]) == 1 for issue in issues_with_event_details)
@@ -57,6 +55,26 @@ def test_simple(self):
5755
serialized_event = serialize(event, serializer=EventSerializer())
5856
assert event_dict == serialized_event
5957

58+
def test_javascript_simple(self):
59+
group_id = [
60+
self._create_event(
61+
function_names=["component.blue", "world"],
62+
filenames=["foo.js", "baz.js"],
63+
user_id=str(i),
64+
)
65+
for i in range(6)
66+
][0].group.id
67+
68+
issues_with_event_details = get_issues_with_event_details_for_file(
69+
projects=[self.project],
70+
sentry_filenames=["baz.js"],
71+
function_names=["world", "planet"],
72+
)
73+
74+
issue_ids = [issue["id"] for issue in issues_with_event_details]
75+
assert group_id != self.group_id
76+
assert set(issue_ids) == {group_id}
77+
6078
# The rest are mostly copied from tests/sentry/integrations/github/tasks/test_open_pr_comment.py
6179
def test_filename_mismatch(self):
6280
group_id = self._create_event(
@@ -85,10 +103,8 @@ def test_not_first_frame(self):
85103

86104
issues = get_issues_with_event_details_for_file([self.project], ["baz.py"], ["world"])
87105
issue_ids = [issue["id"] for issue in issues]
88-
function_names = [issue["function_name"] for issue in issues]
89106
assert group_id != self.group_id
90107
assert set(issue_ids) == {self.group_id, group_id}
91-
assert function_names == ["world", "world"]
92108

93109
def test_not_within_frame_limit(self):
94110
function_names = ["world"] + ["a" for _ in range(STACKFRAME_COUNT)]

0 commit comments

Comments
 (0)