Browse Source

feat(issue-platform): feat(issue-platform): Make get_(oldest|latest)_event able to read from the issue platform for perf issues (#47948)

This makes sure that once we're using issue platform for perf issues
that we'll correctly use the issue platform dataset in
`get_(oldest|latest)_event`.
Dan Fuller 1 year ago
parent
commit
d2a2ca515a
2 changed files with 38 additions and 2 deletions
  1. 4 2
      src/sentry/models/group.py
  2. 34 0
      tests/snuba/models/test_group.py

+ 4 - 2
src/sentry/models/group.py

@@ -19,7 +19,7 @@ from django.utils import timezone
 from django.utils.http import urlencode
 from django.utils.translation import ugettext_lazy as _
 
-from sentry import eventstore, eventtypes, tagstore
+from sentry import eventstore, eventtypes, features, tagstore
 from sentry.constants import DEFAULT_LOGGER_NAME, LOG_LEVELS, MAX_CULPRIT_LENGTH
 from sentry.db.models import (
     BaseManager,
@@ -198,7 +198,9 @@ def get_oldest_or_latest_event_for_environments(
     if len(environments) > 0:
         conditions.append(["environment", "IN", environments])
 
-    if group.issue_category == GroupCategory.PERFORMANCE:
+    if group.issue_category == GroupCategory.PERFORMANCE and not features.has(
+        "organizations:issue-platform-search-perf-issues", group.project.organization
+    ):
         apply_performance_conditions(conditions, group)
         _filter = eventstore.Filter(
             conditions=conditions,

+ 34 - 0
tests/snuba/models/test_group.py

@@ -70,3 +70,37 @@ class GroupTestSnuba(TestCase, SnubaTestCase):
 
         assert perf_group.get_latest_event_for_environments().event_id == "d" * 32
         assert perf_group.get_oldest_event_for_environments().event_id == "f" * 32
+
+    def test_perf_issue_issue_platform(self):
+        # Just a duplicate of `test_perf_issue` to verify that perf issues read from
+        # the issue platform correctly here. Remove once we kill the related flags.
+        group_fingerprint = f"{PerformanceNPlusOneGroupType.type_id}-group1"
+
+        event_data_1 = load_data("transaction", fingerprint=[group_fingerprint])
+        event_data_1["timestamp"] = iso_format(before_now(seconds=10))
+        event_data_1["start_timestamp"] = iso_format(before_now(seconds=11))
+        event_data_1["event_id"] = "d" * 32
+        event_data_2 = load_data("transaction", fingerprint=[group_fingerprint])
+        event_data_2["timestamp"] = iso_format(before_now(seconds=20))
+        event_data_2["start_timestamp"] = iso_format(before_now(seconds=21))
+        event_data_2["event_id"] = "f" * 32
+        event_data_3 = load_data("transaction", fingerprint=[group_fingerprint])
+        event_data_3["timestamp"] = iso_format(before_now(seconds=30))
+        event_data_3["start_timestamp"] = iso_format(before_now(seconds=31))
+        event_data_3["event_id"] = "f" * 32
+
+        with self.options({"performance.issues.send_to_issues_platform": True}):
+            self.transaction_event_1 = self.store_event(
+                data=event_data_1, project_id=self.project.id
+            )
+            self.transaction_event_2 = self.store_event(
+                data=event_data_2, project_id=self.project.id
+            )
+            self.transaction_event_3 = self.store_event(
+                data=event_data_3, project_id=self.project.id
+            )
+        perf_group = self.transaction_event_1.groups[0]
+
+        with self.feature("organizations:issue-platform-search-perf-issues"):
+            assert perf_group.get_latest_event_for_environments().event_id == "d" * 32
+            assert perf_group.get_oldest_event_for_environments().event_id == "f" * 32