Skip to content

Commit

Permalink
feat(eap): add ability to shut off snql access to datasets (#6913)
Browse files Browse the repository at this point in the history
We want to be able to shut off snql access to datasets so we don't have
to support it anymore once the product is using the new EAP API. add
this as a runtime configurable shut off switch
  • Loading branch information
volokluev authored Feb 25, 2025
1 parent 551ed4f commit e13f865
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
10 changes: 9 additions & 1 deletion snuba/request/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import sentry_sdk

from snuba import environment, state
from snuba import environment, settings, state
from snuba.attribution import get_app_id
from snuba.attribution.attribution_info import AttributionInfo
from snuba.clickhouse.query_dsl.accessors import get_object_ids_in_query_ast
Expand Down Expand Up @@ -114,8 +114,16 @@ def build_request(
referrer: str,
custom_processing: Optional[CustomProcessors] = None,
) -> Request:

with sentry_sdk.start_span(description="build_request", op="validate") as span:
try:
dataset_name = get_dataset_name(dataset)
if state.get_config(
f"snql_disabled_dataset__{dataset_name}",
dataset_name in settings.SNQL_DISABLED_DATASETS,
):
raise InvalidQueryException(f"snql is disabled for dataset {dataset}")

request_parts = schema.validate(body)
referrer = _get_referrer(request_parts, referrer)
settings_obj = _get_settings_object(settings_class, request_parts, referrer)
Expand Down
1 change: 1 addition & 0 deletions snuba/settings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@ class RedisClusters(TypedDict):
VALIDATE_DATASET_YAMLS_ON_STARTUP = False

MAX_ONGOING_MUTATIONS_FOR_DELETE = 5
SNQL_DISABLED_DATASETS: set[str] = set([])


def _load_settings(obj: MutableMapping[str, Any] = locals()) -> None:
Expand Down
20 changes: 20 additions & 0 deletions tests/request/test_build_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import pytest

from snuba import state
from snuba.datasets.entities.entity_key import EntityKey
from snuba.datasets.entities.factory import get_entity
from snuba.datasets.factory import get_dataset
Expand All @@ -16,6 +17,7 @@
in_condition,
)
from snuba.query.data_source.simple import Entity
from snuba.query.exceptions import InvalidQueryException
from snuba.query.expressions import Column, Expression, FunctionCall, Literal
from snuba.query.logical import Query
from snuba.query.query_settings import HTTPQuerySettings
Expand Down Expand Up @@ -184,3 +186,21 @@ def test_tenant_ids(
)
assert request.referrer == expected_referrer
assert request.attribution_info.tenant_ids == expected_tenant_ids


@pytest.mark.redis_db
def test_disabled_dataset() -> None:
state.set_config("snql_disabled_dataset__events", True)
dataset = get_dataset("events")
schema = RequestSchema.build(HTTPQuerySettings)

with pytest.raises(InvalidQueryException):
build_request(
{},
parse_snql_query,
HTTPQuerySettings,
schema,
dataset,
Timer("test"),
"my_request",
)

0 comments on commit e13f865

Please sign in to comment.