From cfcbe916129c3c1f24c2f309ca40a7c716ab55fa Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 15:21:23 -0800 Subject: [PATCH 01/11] QueryBuilders --- src/sentry/search/events/builder/discover.py | 6 ++++++ src/sentry/search/events/builder/metrics.py | 7 +++++++ src/sentry/search/events/builder/sessions.py | 3 +++ 3 files changed, 16 insertions(+) diff --git a/src/sentry/search/events/builder/discover.py b/src/sentry/search/events/builder/discover.py index 5155fc8f3f8b73..378e047d996fe6 100644 --- a/src/sentry/search/events/builder/discover.py +++ b/src/sentry/search/events/builder/discover.py @@ -1440,6 +1440,9 @@ def get_snql_query(self) -> Request: limitby=self.limitby, ), flags=Flags(turbo=self.turbo), + tenant_ids={"organization_id": self.params.organization.id} + if self.params.organization + else None, ) @classmethod @@ -1611,6 +1614,9 @@ def get_snql_query(self) -> Request: granularity=self.granularity, limit=self.limit, ), + tenant_ids={"organization_id": self.params.organization.id} + if self.params.organization + else None, ) def run_query(self, referrer: str, use_cache: bool = False) -> Any: diff --git a/src/sentry/search/events/builder/metrics.py b/src/sentry/search/events/builder/metrics.py index 5abac7fbf5fd79..6ef06edf4ad1bc 100644 --- a/src/sentry/search/events/builder/metrics.py +++ b/src/sentry/search/events/builder/metrics.py @@ -460,6 +460,7 @@ def get_metrics_layer_snql_query(self) -> Request: granularity=self.granularity, ), flags=Flags(turbo=self.turbo), + tenant_ids={"organization_id": self.organization_id}, ) def get_snql_query(self) -> Request: @@ -511,6 +512,7 @@ def get_snql_query(self) -> Request: granularity=self.granularity, ), flags=Flags(turbo=self.turbo), + tenant_ids={"organization_id": self.organization_id}, ) def _create_query_framework(self) -> Tuple[str, Dict[str, QueryFramework]]: @@ -955,6 +957,9 @@ def get_snql_query(self) -> List[Request]: This is because different functions will use different entities """ + + tenant_ids = {"organization_id": self.organization_id} + # No need for primary from the query framework since there's no orderby to worry about if self.use_metrics_layer: prefix = "generic_" if self.dataset is Dataset.PerformanceMetrics else "" @@ -980,6 +985,7 @@ def get_snql_query(self) -> List[Request]: orderby=[], granularity=self.granularity, ), + tenant_ids=tenant_ids, ) ] _, query_framework = self._create_query_framework() @@ -1001,6 +1007,7 @@ def get_snql_query(self) -> List[Request]: granularity=self.granularity, limit=self.limit, ), + tenant_ids=tenant_ids, ) ) diff --git a/src/sentry/search/events/builder/sessions.py b/src/sentry/search/events/builder/sessions.py index b218b3638dd3fd..4e2d9e09dcb2b8 100644 --- a/src/sentry/search/events/builder/sessions.py +++ b/src/sentry/search/events/builder/sessions.py @@ -72,4 +72,7 @@ def get_snql_query(self) -> Request: limitby=self.limitby, ), flags=Flags(turbo=self.turbo), + tenant_ids={"organization_id": self.params.organization.id} + if self.params.organization + else None, ) From f58a0a2000a8b97e1ae503c681737c476bcc7338 Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 15:33:50 -0800 Subject: [PATCH 02/11] get_series --- src/sentry/search/events/builder/metrics.py | 3 +++ src/sentry/snuba/metrics/datasource.py | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sentry/search/events/builder/metrics.py b/src/sentry/search/events/builder/metrics.py index 6ef06edf4ad1bc..50402ed32b0468 100644 --- a/src/sentry/search/events/builder/metrics.py +++ b/src/sentry/search/events/builder/metrics.py @@ -732,6 +732,9 @@ def run_query(self, referrer: str, use_cache: bool = False) -> Any: app_id="default", query=query, flags=Flags(turbo=self.turbo), + tenant_ids={"organization_id": self.params.organization.id} + if self.params.organization + else None, ) current_result = raw_snql_query( request, diff --git a/src/sentry/snuba/metrics/datasource.py b/src/sentry/snuba/metrics/datasource.py index e83afbe38ddbba..b512d39166902c 100644 --- a/src/sentry/snuba/metrics/datasource.py +++ b/src/sentry/snuba/metrics/datasource.py @@ -674,6 +674,8 @@ def get_series( ) -> dict: """Get time series for the given query""" + organization_id = projects[0].organization_id if projects else None + if metrics_query.interval is not None: interval = metrics_query.interval else: @@ -767,7 +769,10 @@ def get_series( initial_snuba_query = next(iter(snuba_queries.values()))["totals"] request = Request( - dataset=Dataset.Metrics.value, app_id="default", query=initial_snuba_query + dataset=Dataset.Metrics.value, + app_id="default", + query=initial_snuba_query, + tenant_ids={"organization_id": organization_id} if organization_id else None, ) initial_query_results = raw_snql_query( request, use_cache=False, referrer="api.metrics.totals.initial_query" From d87ca86ecb19911cfb1aa9d5162844a11f39a9ed Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 15:53:51 -0800 Subject: [PATCH 03/11] refactor --- src/sentry/search/events/builder/discover.py | 14 ++++++++------ src/sentry/search/events/builder/metrics.py | 14 +++++--------- src/sentry/search/events/builder/sessions.py | 4 +--- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/sentry/search/events/builder/discover.py b/src/sentry/search/events/builder/discover.py index 378e047d996fe6..5c7bf81c3e8104 100644 --- a/src/sentry/search/events/builder/discover.py +++ b/src/sentry/search/events/builder/discover.py @@ -207,6 +207,12 @@ def __init__( "columns": set(), } + # Base Tenant IDs for any Snuba Request built/executed using a QueryBuilder + org_id = self.organization_id or ( + self.params.organization.id if self.params.organization else None + ) + self.tenant_ids = {"organization_id": org_id} if org_id else None + # Function is a subclass of CurriedFunction self.where: List[WhereType] = [] self.having: List[WhereType] = [] @@ -1440,9 +1446,7 @@ def get_snql_query(self) -> Request: limitby=self.limitby, ), flags=Flags(turbo=self.turbo), - tenant_ids={"organization_id": self.params.organization.id} - if self.params.organization - else None, + tenant_ids=self.tenant_ids, ) @classmethod @@ -1614,9 +1618,7 @@ def get_snql_query(self) -> Request: granularity=self.granularity, limit=self.limit, ), - tenant_ids={"organization_id": self.params.organization.id} - if self.params.organization - else None, + tenant_ids=self.tenant_ids, ) def run_query(self, referrer: str, use_cache: bool = False) -> Any: diff --git a/src/sentry/search/events/builder/metrics.py b/src/sentry/search/events/builder/metrics.py index 50402ed32b0468..53cbe293065fde 100644 --- a/src/sentry/search/events/builder/metrics.py +++ b/src/sentry/search/events/builder/metrics.py @@ -460,7 +460,7 @@ def get_metrics_layer_snql_query(self) -> Request: granularity=self.granularity, ), flags=Flags(turbo=self.turbo), - tenant_ids={"organization_id": self.organization_id}, + tenant_ids=self.tenant_ids, ) def get_snql_query(self) -> Request: @@ -512,7 +512,7 @@ def get_snql_query(self) -> Request: granularity=self.granularity, ), flags=Flags(turbo=self.turbo), - tenant_ids={"organization_id": self.organization_id}, + tenant_ids=self.tenant_ids, ) def _create_query_framework(self) -> Tuple[str, Dict[str, QueryFramework]]: @@ -732,9 +732,7 @@ def run_query(self, referrer: str, use_cache: bool = False) -> Any: app_id="default", query=query, flags=Flags(turbo=self.turbo), - tenant_ids={"organization_id": self.params.organization.id} - if self.params.organization - else None, + tenant_ids=self.tenant_ids, ) current_result = raw_snql_query( request, @@ -961,8 +959,6 @@ def get_snql_query(self) -> List[Request]: This is because different functions will use different entities """ - tenant_ids = {"organization_id": self.organization_id} - # No need for primary from the query framework since there's no orderby to worry about if self.use_metrics_layer: prefix = "generic_" if self.dataset is Dataset.PerformanceMetrics else "" @@ -988,7 +984,7 @@ def get_snql_query(self) -> List[Request]: orderby=[], granularity=self.granularity, ), - tenant_ids=tenant_ids, + tenant_ids=self.tenant_ids, ) ] _, query_framework = self._create_query_framework() @@ -1010,7 +1006,7 @@ def get_snql_query(self) -> List[Request]: granularity=self.granularity, limit=self.limit, ), - tenant_ids=tenant_ids, + tenant_ids=self.tenant_ids, ) ) diff --git a/src/sentry/search/events/builder/sessions.py b/src/sentry/search/events/builder/sessions.py index 4e2d9e09dcb2b8..b6aef681d15e38 100644 --- a/src/sentry/search/events/builder/sessions.py +++ b/src/sentry/search/events/builder/sessions.py @@ -72,7 +72,5 @@ def get_snql_query(self) -> Request: limitby=self.limitby, ), flags=Flags(turbo=self.turbo), - tenant_ids={"organization_id": self.params.organization.id} - if self.params.organization - else None, + tenant_ids=self.tenant_ids, ) From 92110d4e6cbd28bf6ec209eaf3c1f6276b8bec2d Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 16:02:34 -0800 Subject: [PATCH 04/11] get_series --- src/sentry/api/endpoints/organization_metrics.py | 1 + src/sentry/release_health/metrics_sessions_v2.py | 7 ++++++- src/sentry/search/events/builder/metrics.py | 2 ++ src/sentry/snuba/metrics/datasource.py | 16 +++++++++++++--- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/sentry/api/endpoints/organization_metrics.py b/src/sentry/api/endpoints/organization_metrics.py index d3dca6e817ae8e..059a51b07bafee 100644 --- a/src/sentry/api/endpoints/organization_metrics.py +++ b/src/sentry/api/endpoints/organization_metrics.py @@ -164,6 +164,7 @@ def data_fn(offset: int, limit: int): projects, query.to_metrics_query(), use_case_id=get_use_case_id(request.GET.get("useCase", "release-health")), + tenant_ids={"organization_id": organization.id}, ) data["query"] = query.query except ( diff --git a/src/sentry/release_health/metrics_sessions_v2.py b/src/sentry/release_health/metrics_sessions_v2.py index e2bcc5afc0a813..ded129612bb6e5 100644 --- a/src/sentry/release_health/metrics_sessions_v2.py +++ b/src/sentry/release_health/metrics_sessions_v2.py @@ -567,7 +567,12 @@ def run_sessions_query( # TODO: Stop passing project IDs everywhere projects = Project.objects.get_many_from_cache(project_ids) try: - metrics_results = get_series(projects, metrics_query, use_case_id=UseCaseKey.RELEASE_HEALTH) + metrics_results = get_series( + projects, + metrics_query, + use_case_id=UseCaseKey.RELEASE_HEALTH, + tenant_ids={"organization_id": org_id}, + ) except OrderByNotSupportedOverCompositeEntityException: raise InvalidParams(f"Cannot order by {query.raw_orderby[0]} with the current filters") except UtilsInvalidParams as e: diff --git a/src/sentry/search/events/builder/metrics.py b/src/sentry/search/events/builder/metrics.py index 53cbe293065fde..03a11942424ce8 100644 --- a/src/sentry/search/events/builder/metrics.py +++ b/src/sentry/search/events/builder/metrics.py @@ -636,6 +636,7 @@ def run_query(self, referrer: str, use_cache: bool = False) -> Any: if self.is_performance else UseCaseKey.RELEASE_HEALTH, include_meta=True, + tenant_ids=self.tenant_ids, ) except Exception as err: raise IncompatibleMetricsQuery(err) @@ -1033,6 +1034,7 @@ def run_query(self, referrer: str, use_cache: bool = False) -> Any: if self.is_performance else UseCaseKey.RELEASE_HEALTH, include_meta=True, + tenant_ids=self.tenant_ids, ) except Exception as err: raise IncompatibleMetricsQuery(err) diff --git a/src/sentry/snuba/metrics/datasource.py b/src/sentry/snuba/metrics/datasource.py index b512d39166902c..d53862782fb502 100644 --- a/src/sentry/snuba/metrics/datasource.py +++ b/src/sentry/snuba/metrics/datasource.py @@ -1,3 +1,5 @@ +from __future__ import annotations + """ Module that gets both metadata and time series from Snuba. For metadata, it fetch metrics metadata (metric names, tag names, tag values, ...) from snuba. @@ -671,10 +673,12 @@ def get_series( metrics_query: MetricsQuery, use_case_id: UseCaseKey, include_meta: bool = False, + tenant_ids: dict[str, Any] | None = None, ) -> dict: """Get time series for the given query""" organization_id = projects[0].organization_id if projects else None + tenant_ids = tenant_ids or {"organization_id": organization_id} if organization_id else None if metrics_query.interval is not None: interval = metrics_query.interval @@ -772,7 +776,7 @@ def get_series( dataset=Dataset.Metrics.value, app_id="default", query=initial_snuba_query, - tenant_ids={"organization_id": organization_id} if organization_id else None, + tenant_ids=tenant_ids, ) initial_query_results = raw_snql_query( request, use_cache=False, referrer="api.metrics.totals.initial_query" @@ -811,7 +815,10 @@ def get_series( snuba_query = _apply_group_limit_filters(snuba_query, group_limit_filters) request = Request( - dataset=Dataset.Metrics.value, app_id="default", query=snuba_query + dataset=Dataset.Metrics.value, + app_id="default", + query=snuba_query, + tenant_ids=tenant_ids, ) snuba_result = raw_snql_query( request, use_cache=False, referrer=f"api.metrics.{key}.second_query" @@ -840,7 +847,10 @@ def get_series( snuba_query = _apply_group_limit_filters(snuba_query, group_limit_filters) request = Request( - dataset=Dataset.Metrics.value, app_id="default", query=snuba_query + dataset=Dataset.Metrics.value, + app_id="default", + query=snuba_query, + tenant_ids=tenant_ids, ) snuba_result = raw_snql_query( request, From 4226518e6ee693b9a7c0e9c270d033a8aafc71e1 Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 16:06:25 -0800 Subject: [PATCH 05/11] outcomes_query_timeseries --- src/sentry/api/endpoints/organization_stats_v2.py | 4 +++- src/sentry/api/endpoints/project_key_stats.py | 6 +++++- src/sentry/snuba/outcomes.py | 6 ++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/sentry/api/endpoints/organization_stats_v2.py b/src/sentry/api/endpoints/organization_stats_v2.py index 977751d7efad98..44769337ea4ac8 100644 --- a/src/sentry/api/endpoints/organization_stats_v2.py +++ b/src/sentry/api/endpoints/organization_stats_v2.py @@ -183,7 +183,9 @@ def get(self, request: Request, organization) -> Response: result_timeseries = ( None if "project_id" in query.query_groupby - else run_outcomes_query_timeseries(query) + else run_outcomes_query_timeseries( + query, tenant_ids={"organization_id": organization.id} + ) ) with sentry_sdk.start_span( op="outcomes.endpoint", description="massage_outcomes_result" diff --git a/src/sentry/api/endpoints/project_key_stats.py b/src/sentry/api/endpoints/project_key_stats.py index 6decee7b2dbeb9..bc99c4946658f8 100644 --- a/src/sentry/api/endpoints/project_key_stats.py +++ b/src/sentry/api/endpoints/project_key_stats.py @@ -68,7 +68,11 @@ def get(self, request: Request, project, key_id) -> Response: {"organization_id": project.organization_id}, ) results = massage_outcomes_result( - query_definition, [], run_outcomes_query_timeseries(query_definition) + query_definition, + [], + run_outcomes_query_timeseries( + query_definition, tenant_ids={"organization_id": project.organization_id} + ), ) except Exception: raise ParseError(detail="Invalid request data") diff --git a/src/sentry/snuba/outcomes.py b/src/sentry/snuba/outcomes.py index 16ef503225714e..0a02935e099b30 100644 --- a/src/sentry/snuba/outcomes.py +++ b/src/sentry/snuba/outcomes.py @@ -313,7 +313,7 @@ def run_outcomes_query_totals(query: QueryDefinition) -> ResultSet: return _format_rows(result["data"], query) -def run_outcomes_query_timeseries(query: QueryDefinition) -> ResultSet: +def run_outcomes_query_timeseries(query: QueryDefinition, tenant_ids=None) -> ResultSet: snql_query = Query( match=Entity(query.match), select=query.select_params, @@ -324,7 +324,9 @@ def run_outcomes_query_timeseries(query: QueryDefinition) -> ResultSet: granularity=Granularity(query.rollup), ) request = Request(dataset=query.dataset.value, app_id="default", query=snql_query) - result_timeseries = raw_snql_query(request, referrer="outcomes.timeseries") + result_timeseries = raw_snql_query( + request, referrer="outcomes.timeseries", tenant_ids=tenant_ids + ) return _format_rows(result_timeseries["data"], query) From 786dbe8c8bcf8a05f5bcda8097c244c188de43f6 Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 16:10:59 -0800 Subject: [PATCH 06/11] mypy --- src/sentry/snuba/outcomes.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sentry/snuba/outcomes.py b/src/sentry/snuba/outcomes.py index 0a02935e099b30..a6c4d218ecbcdf 100644 --- a/src/sentry/snuba/outcomes.py +++ b/src/sentry/snuba/outcomes.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from abc import ABC, abstractmethod from typing import Any, Dict, List, Mapping, MutableMapping, Optional, Sequence, Tuple @@ -313,7 +315,9 @@ def run_outcomes_query_totals(query: QueryDefinition) -> ResultSet: return _format_rows(result["data"], query) -def run_outcomes_query_timeseries(query: QueryDefinition, tenant_ids=None) -> ResultSet: +def run_outcomes_query_timeseries( + query: QueryDefinition, tenant_ids: dict[str, Any] | None = None +) -> ResultSet: snql_query = Query( match=Entity(query.match), select=query.select_params, From 7a4e825db8fc016b6284564edd96be43f1fd102e Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Tue, 7 Mar 2023 16:20:53 -0800 Subject: [PATCH 07/11] outcomes.totals --- src/sentry/api/endpoints/organization_stats_v2.py | 7 +++---- src/sentry/snuba/outcomes.py | 14 +++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/sentry/api/endpoints/organization_stats_v2.py b/src/sentry/api/endpoints/organization_stats_v2.py index 44769337ea4ac8..754de447ccd657 100644 --- a/src/sentry/api/endpoints/organization_stats_v2.py +++ b/src/sentry/api/endpoints/organization_stats_v2.py @@ -173,19 +173,18 @@ def get(self, request: Request, organization) -> Response: Select a field, define a date range, and group or filter by columns. """ with self.handle_query_errors(): + tenant_ids = {"organization_id": organization.id} with sentry_sdk.start_span(op="outcomes.endpoint", description="build_outcomes_query"): query = self.build_outcomes_query( request, organization, ) with sentry_sdk.start_span(op="outcomes.endpoint", description="run_outcomes_query"): - result_totals = run_outcomes_query_totals(query) + result_totals = run_outcomes_query_totals(query, tenant_ids=tenant_ids) result_timeseries = ( None if "project_id" in query.query_groupby - else run_outcomes_query_timeseries( - query, tenant_ids={"organization_id": organization.id} - ) + else run_outcomes_query_timeseries(query, tenant_ids=tenant_ids) ) with sentry_sdk.start_span( op="outcomes.endpoint", description="massage_outcomes_result" diff --git a/src/sentry/snuba/outcomes.py b/src/sentry/snuba/outcomes.py index a6c4d218ecbcdf..6cece3bcbeb33f 100644 --- a/src/sentry/snuba/outcomes.py +++ b/src/sentry/snuba/outcomes.py @@ -300,7 +300,9 @@ def get_conditions(self, query: QueryDict, params: Mapping[Any, Any]) -> List[An return query_conditions -def run_outcomes_query_totals(query: QueryDefinition) -> ResultSet: +def run_outcomes_query_totals( + query: QueryDefinition, tenant_ids: dict[str, Any] | None = None +) -> ResultSet: snql_query = Query( match=Entity(query.match), select=query.select_params, @@ -310,7 +312,9 @@ def run_outcomes_query_totals(query: QueryDefinition) -> ResultSet: offset=Offset(0), granularity=Granularity(query.rollup), ) - request = Request(dataset=query.dataset.value, app_id="default", query=snql_query) + request = Request( + dataset=query.dataset.value, app_id="default", query=snql_query, tenant_ids=tenant_ids + ) result = raw_snql_query(request, referrer="outcomes.totals") return _format_rows(result["data"], query) @@ -327,10 +331,10 @@ def run_outcomes_query_timeseries( offset=Offset(0), granularity=Granularity(query.rollup), ) - request = Request(dataset=query.dataset.value, app_id="default", query=snql_query) - result_timeseries = raw_snql_query( - request, referrer="outcomes.timeseries", tenant_ids=tenant_ids + request = Request( + dataset=query.dataset.value, app_id="default", query=snql_query, tenant_ids=tenant_ids ) + result_timeseries = raw_snql_query(request, referrer="outcomes.timeseries") return _format_rows(result_timeseries["data"], query) From 49dca4862fe2ccc79e2b18f6befac7a1ec39a99c Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Wed, 8 Mar 2023 14:33:14 -0800 Subject: [PATCH 08/11] snuba_search --- src/sentry/search/snuba/executors.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sentry/search/snuba/executors.py b/src/sentry/search/snuba/executors.py index 36ecf2dc1c3e18..e777c85fa3f264 100644 --- a/src/sentry/search/snuba/executors.py +++ b/src/sentry/search/snuba/executors.py @@ -278,7 +278,7 @@ def _prepare_params_for_category( ) strategy = SEARCH_STRATEGIES.get(group_category, _query_params_for_generic) - return strategy( + snuba_query_params = strategy( pinned_query_partial, selected_columns, aggregations, @@ -290,6 +290,8 @@ def _prepare_params_for_category( conditions, actor, ) + snuba_query_params.kwargs["tenant_ids"] = {"organization_id": organization_id} + return snuba_query_params def snuba_search( self, From 7dd5c697e7c699c0fc2873b64f7776eced6bd0ca Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Wed, 8 Mar 2023 14:35:39 -0800 Subject: [PATCH 09/11] cdc --- src/sentry/search/snuba/executors.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/sentry/search/snuba/executors.py b/src/sentry/search/snuba/executors.py index e777c85fa3f264..8afb8215a43639 100644 --- a/src/sentry/search/snuba/executors.py +++ b/src/sentry/search/snuba/executors.py @@ -1007,6 +1007,8 @@ def query( op = Op.GTE if cursor.is_prev else Op.LTE having.append(Condition(sort_func, op, cursor.value)) + tenant_ids = {"organization_id": projects[0].organization_id} if projects else None + query = Query( match=Join([Relationship(e_event, "grouped", e_group)]), select=[ @@ -1019,7 +1021,12 @@ def query( orderby=[OrderBy(sort_func, direction=Direction.DESC)], limit=Limit(limit + 1), ) - request = Request(dataset="events", app_id="cdc", query=query) + request = Request( + dataset="events", + app_id="cdc", + query=query, + tenant_ids=tenant_ids, + ) data = snuba.raw_snql_query(request, referrer="search.snuba.cdc_search.query")["data"] hits_query = Query( @@ -1031,7 +1038,9 @@ def query( ) hits = None if count_hits: - request = Request(dataset="events", app_id="cdc", query=hits_query) + request = Request( + dataset="events", app_id="cdc", query=hits_query, tenant_ids=tenant_ids + ) hits = snuba.raw_snql_query(request, referrer="search.snuba.cdc_search.hits")["data"][ 0 ]["count"] From e9e3f6b8627586e6b7e9cdbaa7a5b0620fc95ce9 Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Wed, 8 Mar 2023 14:49:28 -0800 Subject: [PATCH 10/11] group serializer --- src/sentry/api/serializers/models/group.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/sentry/api/serializers/models/group.py b/src/sentry/api/serializers/models/group.py index 9f00c5d44f55ff..5dd114edf9be8f 100644 --- a/src/sentry/api/serializers/models/group.py +++ b/src/sentry/api/serializers/models/group.py @@ -532,6 +532,9 @@ def _get_group_snuba_stats( start=start, orderby="group_id", referrer="group.unhandled-flag", + tenant_ids={"organization_id": item_list[0].project.organization_id} + if item_list + else None, ) for x in rv["data"]: unhandled[x["group_id"]] = x["unhandled"] @@ -1017,9 +1020,6 @@ def _execute_error_seen_stats_query( if environment_ids: filters["environment"] = environment_ids - org_id = item_list[0].project.organization_id if item_list else None - tenant_ids = {"organization_id": org_id} if org_id else dict() - return aliased_query( dataset=Dataset.Events, start=start, @@ -1029,7 +1029,9 @@ def _execute_error_seen_stats_query( filter_keys=filters, aggregations=aggregations, referrer="serializers.GroupSerializerSnuba._execute_error_seen_stats_query", - tenant_ids=tenant_ids, + tenant_ids={"organization_id": item_list[0].project.organization_id} + if item_list + else None, ) @staticmethod @@ -1060,6 +1062,9 @@ def _execute_perf_seen_stats_query( filter_keys=filters, aggregations=aggregations, referrer="serializers.GroupSerializerSnuba._execute_perf_seen_stats_query", + tenant_ids={"organization_id": item_list[0].project.organization_id} + if item_list + else None, ) @staticmethod @@ -1086,6 +1091,9 @@ def _execute_generic_seen_stats_query( filter_keys=filters, aggregations=aggregations, referrer="serializers.GroupSerializerSnuba._execute_generic_seen_stats_query", + tenant_ids={"organization_id": item_list[0].project.organization_id} + if item_list + else None, ) @staticmethod From 978eaa73d66b537659fbe5702123f66d655206b6 Mon Sep 17 00:00:00 2001 From: Rahul Saini Date: Wed, 8 Mar 2023 14:52:18 -0800 Subject: [PATCH 11/11] typing --- src/sentry/search/snuba/executors.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sentry/search/snuba/executors.py b/src/sentry/search/snuba/executors.py index 8afb8215a43639..85b19dd80aed0d 100644 --- a/src/sentry/search/snuba/executors.py +++ b/src/sentry/search/snuba/executors.py @@ -290,7 +290,8 @@ def _prepare_params_for_category( conditions, actor, ) - snuba_query_params.kwargs["tenant_ids"] = {"organization_id": organization_id} + if snuba_query_params is not None: + snuba_query_params.kwargs["tenant_ids"] = {"organization_id": organization_id} return snuba_query_params def snuba_search(