Skip to content

Commit a843073

Browse files
authored
Split up multi-action Enhancement rules (#51358)
This properly splits up multi-action enhancement `Rule`s so only modifier actions are run for modifier rules. The first half of #51354
1 parent 55cf7d2 commit a843073

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

src/sentry/grouping/enhancer/__init__.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from __future__ import annotations
2+
13
import base64
24
import os
35
import zlib
@@ -113,8 +115,13 @@ def __init__(self, rules, version=None, bases=None, id=None):
113115
bases = []
114116
self.bases = bases
115117

116-
self._modifier_rules = [rule for rule in self.iter_rules() if rule.is_modifier]
117-
self._updater_rules = [rule for rule in self.iter_rules() if rule.is_updater]
118+
self._modifier_rules = []
119+
self._updater_rules = []
120+
for rule in self.iter_rules():
121+
if modifier_rule := rule._as_modifier_rule():
122+
self._modifier_rules.append(modifier_rule)
123+
if updater_rule := rule._as_updater_rule():
124+
self._updater_rules.append(updater_rule)
118125

119126
def apply_modifications_to_frame(self, frames, platform, exception_data):
120127
"""This applies the frame modifications to the frames itself. This
@@ -296,15 +303,15 @@ def matcher_description(self):
296303
rv = f"{rv} {action}"
297304
return rv
298305

299-
@property
300-
def is_modifier(self):
301-
"""Does this rule modify the frame?"""
302-
return self._is_modifier
306+
def _as_modifier_rule(self) -> Rule | None:
307+
actions = [action for action in self.actions if action.is_modifier]
308+
if actions:
309+
return Rule(self.matchers, actions)
303310

304-
@property
305-
def is_updater(self):
306-
"""Does this rule update grouping components?"""
307-
return self._is_updater
311+
def _as_updater_rule(self) -> Rule | None:
312+
actions = [action for action in self.actions if action.is_updater]
313+
if actions:
314+
return Rule(self.matchers, actions)
308315

309316
def as_dict(self):
310317
matchers = {}

src/sentry/grouping/enhancer/actions.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ def _in_app_changed(self, frame, component):
9090
return self.flag == component.contributes
9191

9292
def apply_modifications_to_frame(self, frames, match_frames, idx, rule=None):
93-
# Grouping is not stored on the frame
94-
if self.key == "group":
95-
return
9693
if self.key == "app":
9794
for frame, match_frame in self._slice_to_range(list(zip(frames, match_frames)), idx):
9895
set_in_app(frame, self.flag)

0 commit comments

Comments
 (0)