Skip to content

Commit 95bafd2

Browse files
feat(CapMan): More tenant_ids for TSDB Queries (#45274)
### Overview - Added `organization_id` to more Snuba Requests, specifically targeting `tsdb-modelid:4` queries as they are the biggest chunk of queries Snuba is handling in production - Most calls to `tsdb.get_range` handled as well, some I wasn't able to figure out - More context: #44788
1 parent 74d6d29 commit 95bafd2

File tree

17 files changed

+61
-9
lines changed

17 files changed

+61
-9
lines changed

src/sentry/api/endpoints/group_details.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,11 @@ def _get_context_plugins(self, request: Request, group):
120120

121121
@staticmethod
122122
def __group_hourly_daily_stats(group: Group, environment_ids: Sequence[int]):
123-
get_range = functools.partial(tsdb.get_range, environment_ids=environment_ids)
123+
get_range = functools.partial(
124+
tsdb.get_range,
125+
environment_ids=environment_ids,
126+
tenant_ids={"organization_id": group.project.organization_id},
127+
)
124128
model = get_issue_tsdb_group_model(group.issue_category)
125129
now = timezone.now()
126130
hourly_stats = tsdb.rollup(

src/sentry/api/endpoints/group_stats.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ def get(self, request: Request, group) -> Response:
1919
raise ResourceDoesNotExist
2020

2121
data = tsdb.get_range(
22-
model=tsdb.models.group, keys=[group.id], **self._parse_args(request, environment_id)
22+
model=tsdb.models.group,
23+
keys=[group.id],
24+
**self._parse_args(request, environment_id),
25+
tenant_ids={"organization_id": group.project.organization_id},
2326
)[group.id]
2427

2528
return Response(data)

src/sentry/api/endpoints/integrations/sentry_apps/interaction.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ def get(self, request: Request, sentry_app) -> Response:
2929
"""
3030

3131
views = tsdb.get_range(
32-
model=tsdb.models.sentry_app_viewed, keys=[sentry_app.id], **self._parse_args(request)
32+
model=tsdb.models.sentry_app_viewed,
33+
keys=[sentry_app.id],
34+
**self._parse_args(request),
35+
tenant_ids={"organization_id": sentry_app.owner.id},
3336
)[sentry_app.id]
3437

3538
component_interactions = tsdb.get_range(
@@ -39,6 +42,7 @@ def get(self, request: Request, sentry_app) -> Response:
3942
for component in sentry_app.components.all()
4043
],
4144
**self._parse_args(request),
45+
tenant_ids={"organization_id": sentry_app.owner.id},
4246
)
4347

4448
return Response(

src/sentry/api/endpoints/organization_stats.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ def get(self, request: Request, organization) -> Response:
8989
if stat_model is None:
9090
raise ValueError(f"Invalid group: {group}, stat: {stat}")
9191
data = tsdb.get_range(
92-
model=stat_model, keys=keys, **self._parse_args(request, **query_kwargs)
92+
model=stat_model,
93+
keys=keys,
94+
**self._parse_args(request, **query_kwargs),
95+
tenant_ids={"organization_id": organization.id},
9396
)
9497

9598
if group == "organization":

src/sentry/api/endpoints/project_group_stats.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ def get(self, request: Request, project) -> Response:
3737
return Response(status=204)
3838

3939
data = tsdb.get_range(
40-
model=tsdb.models.group, keys=group_ids, **self._parse_args(request, environment_id)
40+
model=tsdb.models.group,
41+
keys=group_ids,
42+
**self._parse_args(request, environment_id),
43+
tenant_ids={"organization_id": project.organization_id},
4144
)
4245

4346
return Response({str(k): v for k, v in data.items()})

src/sentry/api/endpoints/project_servicehook_stats.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ def get(self, request: Request, project, hook_id) -> Response:
2020

2121
stats = {}
2222
for model, name in ((tsdb.models.servicehook_fired, "total"),):
23-
result = tsdb.get_range(model=model, keys=[hook.id], **stat_args)[hook.id]
23+
result = tsdb.get_range(
24+
model=model,
25+
keys=[hook.id],
26+
**stat_args,
27+
tenant_ids={"organization_id": project.organization_id},
28+
)[hook.id]
2429
for ts, count in result:
2530
stats.setdefault(int(ts), {})[name] = count
2631

src/sentry/api/endpoints/project_stats.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ def get(self, request: Request, project) -> Response:
6262
raise ValueError("Invalid stat: %s" % stat)
6363

6464
data = tsdb.get_range(
65-
model=stat_model, keys=[project.id], **self._parse_args(request, **query_kwargs)
65+
model=stat_model,
66+
keys=[project.id],
67+
**self._parse_args(request, **query_kwargs),
68+
tenant_ids={"organization_id": project.organization_id},
6669
)[project.id]
6770

6871
return Response(data)

src/sentry/api/endpoints/team_stats.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def get(self, request: Request, team) -> Response:
5151
model=tsdb.models.project,
5252
keys=[p.id for p in projects],
5353
**self._parse_args(request, environment_id),
54+
tenant_ids={"organization_id": team.organization_id},
5455
).values()
5556
)
5657

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,13 @@ def query_tsdb(self, groups: Sequence[Group], query_params, **kwargs):
153153
except Environment.DoesNotExist:
154154
stats = {g.id: tsdb.make_series(0, **query_params) for g in groups}
155155
else:
156+
org_id = groups[0].project.organization_id if groups else None
156157
stats = tsdb.get_range(
157158
model=tsdb.models.group,
158159
keys=[g.id for g in groups],
159160
environment_ids=environment and [environment.id],
160161
**query_params,
162+
tenant_ids={"organization_id": org_id} if org_id else None,
161163
)
162164

163165
return stats
@@ -344,6 +346,7 @@ def query_tsdb(
344346
generic_issue_ids.append(group.id)
345347

346348
results = {}
349+
347350
get_range = functools.partial(
348351
snuba_tsdb.get_range,
349352
environment_ids=environment_ids,

src/sentry/digests/notifications.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,13 @@ def fetch_state(project: Project, records: Sequence[Record]) -> Mapping[str, Any
8282
"rules": Rule.objects.in_bulk(
8383
itertools.chain.from_iterable(record.value.rules for record in records)
8484
),
85-
"event_counts": tsdb.get_sums(tsdb.models.group, list(groups.keys()), start, end),
85+
"event_counts": tsdb.get_sums(
86+
tsdb.models.group,
87+
list(groups.keys()),
88+
start,
89+
end,
90+
tenant_ids={"organization_id": project.organization_id},
91+
),
8692
"user_counts": tsdb.get_distinct_counts_totals(
8793
tsdb.models.users_affected_by_group, list(groups.keys()), start, end
8894
),

0 commit comments

Comments
 (0)