Skip to content

Commit 905073c

Browse files
scttcpergeorge-sentry
authored andcommitted
perf(issues): Fix N+1 queries in starred views endpoint (#112424)
1 parent 5602945 commit 905073c

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/sentry/api/serializers/models/groupsearchview.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from collections.abc import MutableMapping
22
from typing import Any, TypedDict
33

4+
from django.db.models import prefetch_related_objects
5+
46
from sentry.api.serializers import Serializer, register
57
from sentry.models.groupsearchview import GroupSearchView
68
from sentry.models.groupsearchviewlastvisited import GroupSearchViewLastVisited
@@ -33,6 +35,7 @@ def __init__(self, *args, **kwargs):
3335
super().__init__(*args, **kwargs)
3436

3537
def get_attrs(self, item_list, user, **kwargs) -> MutableMapping[Any, Any]:
38+
prefetch_related_objects(item_list, "projects")
3639
attrs: MutableMapping[Any, Any] = {}
3740

3841
last_visited_views = GroupSearchViewLastVisited.objects.filter(
@@ -68,7 +71,7 @@ def get_attrs(self, item_list, user, **kwargs) -> MutableMapping[Any, Any]:
6871
return attrs
6972

7073
def serialize(self, obj, attrs, user, **kwargs) -> GroupSearchViewSerializerResponse:
71-
projects = [-1] if obj.is_all_projects else list(obj.projects.values_list("id", flat=True))
74+
projects = [-1] if obj.is_all_projects else [p.id for p in obj.projects.all()]
7275

7376
return {
7477
"id": str(obj.id),

src/sentry/api/serializers/models/groupsearchviewstarred.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from sentry.api.serializers import Serializer, register, serialize
44
from sentry.api.serializers.models.groupsearchview import (
55
GroupSearchViewSerializer,
6-
GroupSearchViewSerializerResponse,
76
)
87
from sentry.models.groupsearchviewstarred import GroupSearchViewStarred
98
from sentry.models.savedsearch import SORT_LITERALS
@@ -28,13 +27,14 @@ def __init__(self, *args, **kwargs):
2827
self.organization = kwargs.pop("organization", None)
2928
super().__init__(*args, **kwargs)
3029

31-
def serialize(self, obj, attrs, user, **kwargs) -> GroupSearchViewStarredSerializerResponse:
32-
serialized_view: GroupSearchViewSerializerResponse = serialize(
33-
obj.group_search_view,
30+
def get_attrs(self, item_list, user, **kwargs):
31+
views = [item.group_search_view for item in item_list]
32+
serialized_views = serialize(
33+
views,
3434
user,
35-
serializer=GroupSearchViewSerializer(
36-
organization=self.organization,
37-
),
35+
serializer=GroupSearchViewSerializer(organization=self.organization),
3836
)
37+
return dict(zip(item_list, serialized_views))
3938

40-
return serialized_view
39+
def serialize(self, obj, attrs, user, **kwargs) -> GroupSearchViewStarredSerializerResponse:
40+
return attrs

0 commit comments

Comments
 (0)