Browse Source

chore(issue-platform): Remove `organizations:issue-platform-search-perf-issues` flag and usages (#48751)

We no longer need this flag since perf issues have been migrated over to
the issue platform. Perf issue haven't been released anywhere other than
saas, so we don't need to worry about keeping this around.

Most of this pr is just test fixes. The small amount of other code
changed is just removing dead branches that this flag used to gate. Pr
looks huge, but a lot of it is just adding in cruft to make sure that
perf issue tests run on the issue platform now
Dan Fuller 1 year ago
parent
commit
bcca9ccf85

+ 2 - 6
src/sentry/api/helpers/events.py

@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any, Mapping, Optional
 from rest_framework.request import Request
 from rest_framework.response import Response
 
-from sentry import eventstore, features
+from sentry import eventstore
 from sentry.api.serializers import serialize
 from sentry.eventstore.models import Event
 from sentry.issues.grouptype import GroupCategory
@@ -54,11 +54,7 @@ def get_query_builder_for_group(
     query: str, snuba_params: Mapping[str, Any], group: Group, limit: int, offset: int
 ) -> QueryBuilder:
     dataset = Dataset.IssuePlatform
-    if group.issue_category == GroupCategory.PERFORMANCE and not features.has(
-        "organizations:issue-platform-search-perf-issues", group.project.organization
-    ):
-        dataset = Dataset.Transactions
-    elif group.issue_category == GroupCategory.ERROR:
+    if group.issue_category == GroupCategory.ERROR:
         dataset = Dataset.Events
     return QueryBuilder(
         dataset=dataset,

+ 3 - 17
src/sentry/api/serializers/models/group.py

@@ -26,7 +26,7 @@ import sentry_sdk
 from django.conf import settings
 from django.db.models import Min, prefetch_related_objects
 
-from sentry import analytics, features, tagstore
+from sentry import analytics, tagstore
 from sentry.api.serializers import Serializer, register, serialize
 from sentry.api.serializers.models.actor import ActorSerializer
 from sentry.api.serializers.models.plugin import is_plugin_deprecated
@@ -480,32 +480,18 @@ class GroupSerializerBase(Serializer, ABC):
         if not item_list:
             return
 
-        organization = item_list[0].organization
-        search_perf_issues = features.has(
-            "organizations:issue-platform-search-perf-issues", organization, actor=user
-        )
         # partition the item_list by type
         error_issues = [group for group in item_list if GroupCategory.ERROR == group.issue_category]
-        perf_issues = [
-            group
-            for group in item_list
-            if GroupCategory.PERFORMANCE == group.issue_category and not search_perf_issues
-        ]
         generic_issues = [
-            group
-            for group in item_list
-            if group.issue_category
-            and group.issue_category != GroupCategory.ERROR
-            and (group.issue_category != GroupCategory.PERFORMANCE or search_perf_issues)
+            group for group in item_list if group.issue_category != GroupCategory.ERROR
         ]
 
         # bulk query for the seen_stats by type
         error_stats = (self._seen_stats_error(error_issues, user) if error_issues else {}) or {}
-        perf_stats = (self._seen_stats_performance(perf_issues, user) if perf_issues else {}) or {}
         generic_stats = (
             self._seen_stats_generic(generic_issues, user) if generic_issues else {}
         ) or {}
-        agg_stats = {**error_stats, **perf_stats, **generic_stats}
+        agg_stats = {**error_stats, **generic_stats}
         # combine results back
         return {group: agg_stats.get(group, {}) for group in item_list}
 

+ 2 - 13
src/sentry/api/serializers/models/group_stream.py

@@ -8,7 +8,7 @@ from typing import Any, Callable, Mapping, MutableMapping, Optional, Sequence
 
 from django.utils import timezone
 
-from sentry import features, release_health, tsdb
+from sentry import release_health, tsdb
 from sentry.api.serializers.models.group import (
     BaseGroupSerializerResponse,
     GroupSerializer,
@@ -347,17 +347,10 @@ class StreamGroupSerializerSnuba(GroupSerializerSnuba, GroupStatsMixin):
         if not groups:
             return
 
-        organization = groups[0].organization
-        search_perf_issues = features.has(
-            "organizations:issue-platform-search-perf-issues", organization, actor=user
-        )
-
-        error_issue_ids, perf_issue_ids, generic_issue_ids = [], [], []
+        error_issue_ids, generic_issue_ids = [], []
         for group in groups:
             if GroupCategory.ERROR == group.issue_category:
                 error_issue_ids.append(group.id)
-            elif GroupCategory.PERFORMANCE == group.issue_category and not search_perf_issues:
-                perf_issue_ids.append(group.id)
             else:
                 generic_issue_ids.append(group.id)
 
@@ -372,10 +365,6 @@ class StreamGroupSerializerSnuba(GroupSerializerSnuba, GroupStatsMixin):
         )
         if error_issue_ids:
             results.update(get_range(model=snuba_tsdb.models.group, keys=error_issue_ids))
-        if perf_issue_ids:
-            results.update(
-                get_range(model=snuba_tsdb.models.group_performance, keys=perf_issue_ids)
-            )
         if generic_issue_ids:
             results.update(get_range(model=snuba_tsdb.models.group_generic, keys=generic_issue_ids))
         return results

+ 0 - 1
src/sentry/features/__init__.py

@@ -91,7 +91,6 @@ default_manager.add("organizations:issue-details-tag-improvements", Organization
 default_manager.add("organizations:issue-list-removal-action", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
 default_manager.add("organizations:issue-list-trend-sort", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
 default_manager.add("organizations:issue-platform", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
-default_manager.add("organizations:issue-platform-search-perf-issues", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
 default_manager.add("organizations:issue-search-allow-postgres-only-search", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
 default_manager.add("organizations:issue-search-use-cdc-primary", OrganizationFeature, FeatureHandlerStrategy.REMOTE)
 default_manager.add("organizations:issue-search-use-cdc-secondary", OrganizationFeature, FeatureHandlerStrategy.REMOTE)

+ 4 - 11
src/sentry/issues/search.py

@@ -246,22 +246,15 @@ def _query_params_for_generic(
     return None
 
 
-def get_search_strategies(
-    organization: Organization, actor: Optional[Any]
-) -> Mapping[int, GroupSearchStrategy]:
+def get_search_strategies() -> Mapping[int, GroupSearchStrategy]:
     strategies = {}
     for group_category in GroupCategory:
         if group_category == GroupCategory.ERROR:
             strategy = _query_params_for_error
         elif group_category == GroupCategory.PERFORMANCE:
-            if not features.has(
-                "organizations:issue-platform-search-perf-issues", organization, actor=actor
-            ):
-                strategy = _query_params_for_perf
-            else:
-                strategy = functools.partial(
-                    _query_params_for_generic, categories=[GroupCategory.PERFORMANCE]
-                )
+            strategy = functools.partial(
+                _query_params_for_generic, categories=[GroupCategory.PERFORMANCE]
+            )
         else:
             strategy = functools.partial(
                 _query_params_for_generic, categories=[GroupCategory.PROFILE]

+ 7 - 18
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, features, tagstore
+from sentry import eventstore, eventtypes, tagstore
 from sentry.constants import DEFAULT_LOGGER_NAME, LOG_LEVELS, MAX_CULPRIT_LENGTH
 from sentry.db.models import (
     BaseManager,
@@ -34,7 +34,6 @@ from sentry.db.models import (
 )
 from sentry.eventstore.models import GroupEvent
 from sentry.issues.grouptype import ErrorGroupType, GroupCategory, get_group_type_by_type_id
-from sentry.issues.query import apply_performance_conditions
 from sentry.models.grouphistory import record_group_history_from_activity_type
 from sentry.snuba.dataset import Dataset
 from sentry.types.activity import ActivityType
@@ -208,24 +207,14 @@ def get_oldest_or_latest_event_for_environments(
     if len(environments) > 0:
         conditions.append(["environment", "IN", environments])
 
-    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,
-            project_ids=[group.project_id],
-        )
-        dataset = Dataset.Transactions
+    if group.issue_category == GroupCategory.ERROR:
+        dataset = Dataset.Events
     else:
-        if group.issue_category == GroupCategory.ERROR:
-            dataset = Dataset.Events
-        else:
-            dataset = Dataset.IssuePlatform
+        dataset = Dataset.IssuePlatform
 
-        _filter = eventstore.Filter(
-            conditions=conditions, project_ids=[group.project_id], group_ids=[group.id]
-        )
+    _filter = eventstore.Filter(
+        conditions=conditions, project_ids=[group.project_id], group_ids=[group.id]
+    )
 
     events = eventstore.get_events(
         filter=_filter,

+ 0 - 5
src/sentry/rules/history/preview_strategy.py

@@ -1,6 +1,5 @@
 from typing import Any, Dict, Sequence
 
-from sentry import features
 from sentry.issues.grouptype import GroupCategory
 from sentry.models import Organization
 from sentry.snuba.dataset import Dataset
@@ -20,10 +19,6 @@ To add support for a new issue category/dataset:
 def get_dataset_from_category(category: int, organization: Organization) -> Dataset:
     if category == GroupCategory.ERROR.value:
         return Dataset.Events
-    elif category == GroupCategory.PERFORMANCE.value and not features.has(
-        "organizations:issue-platform-search-perf-issues", organization
-    ):
-        return Dataset.Transactions
     return Dataset.IssuePlatform
 
 

+ 1 - 34
src/sentry/search/events/datasets/discover.py

@@ -17,10 +17,8 @@ from snuba_sdk import (
     OrderBy,
 )
 
-from sentry import features
 from sentry.api.event_search import SearchFilter, SearchKey, SearchValue
 from sentry.exceptions import InvalidSearchQuery
-from sentry.issues.grouptype import GroupCategory
 from sentry.models import Group, Project
 from sentry.models.transaction_threshold import (
     TRANSACTION_METRICS,
@@ -1604,10 +1602,6 @@ class DiscoverDatasetConfig(DatasetConfig):
         # `unknown` is a special value for when there is no issue associated with the event
         group_short_ids = [v for v in value if v and v != "unknown"]
         general_group_filter_values = ["" for v in value if not v or v == "unknown"]
-        perf_group_filter_values = ["" for v in value if not v or v == "unknown"]
-
-        general_groups = []
-        performance_groups = []
 
         if group_short_ids and self.builder.params.organization is not None:
             try:
@@ -1618,21 +1612,7 @@ class DiscoverDatasetConfig(DatasetConfig):
             except Exception:
                 raise InvalidSearchQuery(f"Invalid value '{group_short_ids}' for 'issue:' filter")
             else:
-                org = None
-                if groups:
-                    org = groups[0].project.organization
-                for group in groups:
-                    if group.issue_category == GroupCategory.PERFORMANCE and not features.has(
-                        "organizations:issue-platform-search-perf-issues", org
-                    ):
-                        performance_groups.append(group.id)
-                    else:
-                        general_groups.append(group.id)
-                general_groups = sorted(general_groups)
-                performance_groups = sorted(performance_groups)
-
-                general_group_filter_values.extend(general_groups)
-                perf_group_filter_values.extend(performance_groups)
+                general_group_filter_values.extend(sorted([group.id for group in groups]))
 
         if general_group_filter_values:
             return self.builder.convert_search_filter_to_condition(
@@ -1647,19 +1627,6 @@ class DiscoverDatasetConfig(DatasetConfig):
                 )
             )
 
-        if performance_groups:
-            return self.builder.convert_search_filter_to_condition(
-                SearchFilter(
-                    SearchKey("performance.issue_ids"),
-                    operator,
-                    SearchValue(
-                        perf_group_filter_values
-                        if search_filter.is_in_filter
-                        else perf_group_filter_values[0]
-                    ),
-                )
-            )
-
         return None
 
     def _message_filter_converter(self, search_filter: SearchFilter) -> Optional[WhereType]:

+ 2 - 2
src/sentry/search/snuba/executors.py

@@ -276,7 +276,7 @@ class AbstractQueryExecutor(metaclass=ABCMeta):
             ),
         )
 
-        strategy = get_search_strategies(organization, actor)[group_category]
+        strategy = get_search_strategies()[group_category]
         snuba_query_params = strategy(
             pinned_query_partial,
             selected_columns,
@@ -358,7 +358,7 @@ class AbstractQueryExecutor(metaclass=ABCMeta):
         if not group_categories:
             group_categories = {
                 gc
-                for gc in get_search_strategies(organization, actor).keys()
+                for gc in get_search_strategies().keys()
                 if gc != GroupCategory.PROFILE.value
                 or features.has("organizations:issue-platform", organization, actor=actor)
             }

+ 3 - 11
src/sentry/tagstore/snuba/backend.py

@@ -11,10 +11,8 @@ from pytz import UTC
 from sentry_relay.consts import SPAN_STATUS_CODE_TO_NAME
 from snuba_sdk import Column, Condition, Direction, Entity, Function, Op, OrderBy, Query, Request
 
-from sentry import features
 from sentry.api.utils import default_start_end_dates
 from sentry.issues.grouptype import GroupCategory
-from sentry.issues.query import apply_performance_conditions
 from sentry.models import (
     Group,
     Project,
@@ -693,15 +691,9 @@ class SnubaTagStorage(TagStorage):
     def apply_group_filters_conditions(self, group: Group, conditions, filters):
         dataset = Dataset.Events
         if group:
-            if group.issue_category == GroupCategory.PERFORMANCE and not features.has(
-                "organizations:issue-platform-search-perf-issues", group.organization
-            ):
-                dataset = Dataset.Transactions
-                apply_performance_conditions(conditions, group)
-            else:
-                filters["group_id"] = [group.id]
-                if not group.issue_category == GroupCategory.ERROR:
-                    dataset = Dataset.IssuePlatform
+            filters["group_id"] = [group.id]
+            if group.issue_category != GroupCategory.ERROR:
+                dataset = Dataset.IssuePlatform
         return dataset, conditions, filters
 
     def get_group_tag_value_count(self, group, environment_id, key, tenant_ids=None):

Some files were not shown because too many files changed in this diff