Skip to content

Commit

Permalink
error code
Browse files Browse the repository at this point in the history
  • Loading branch information
Rachel Chen authored and Rachel Chen committed Jan 31, 2025
1 parent e55a1a2 commit d18c096
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 7 deletions.
3 changes: 2 additions & 1 deletion snuba/web/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import annotations

from dataclasses import dataclass
from typing import Any, Mapping, TypedDict, cast
from typing import Any, Mapping, NotRequired, TypedDict, cast

from snuba.reader import Column, Result, Row, transform_rows
from snuba.utils.serializable_exception import JsonSerializable, SerializableException
Expand All @@ -11,6 +11,7 @@ class QueryExtraData(TypedDict):
stats: Mapping[str, Any]
sql: str
experiments: Mapping[str, Any]
code: NotRequired[int]


class QueryException(SerializableException):
Expand Down
11 changes: 11 additions & 0 deletions snuba/web/db_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,17 @@ def _raw_query(
error_code=error_code,
triggered_rate_limiter=str(trigger_rate_limiter),
)
if error_code == 241:
raise QueryException.from_args(
cause.__class__.__name__,
str(cause),
{
"stats": stats,
"sql": sql,
"experiments": clickhouse_query.get_experiments(),
"code": 241,
},
) from cause
raise QueryException.from_args(
# This exception needs to have the message of the cause in it for sentry
# to pick it up properly
Expand Down
7 changes: 5 additions & 2 deletions snuba/web/rpc/v1/endpoint_time_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

from snuba import environment
from snuba.utils.metrics.wrapper import MetricsWrapper
from snuba.web import QueryException
from snuba.web.rpc import RPCEndpoint, TraceItemDataResolver
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.v1.resolvers import ResolverTimeSeries
Expand Down Expand Up @@ -112,8 +113,10 @@ def _execute(self, in_msg: TimeSeriesRequest) -> TimeSeriesResponse:
resolver = self.get_resolver(in_msg.meta.trace_item_type)
try:
return resolver.resolve(in_msg)
except Exception as e:
if "DB::Exception: Memory limit (for query) exceeded" in str(e):
except QueryException as e:
if e.extra[
"code"
] == 241 or "DB::Exception: Memory limit (for query) exceeded" in str(e):
metrics.increment("endpoint_trace_item_table_OOM")
sentry_sdk.capture_exception(e)
raise BadSnubaRPCRequestException(str(e))
7 changes: 5 additions & 2 deletions snuba/web/rpc/v1/endpoint_trace_item_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

from snuba import environment
from snuba.utils.metrics.wrapper import MetricsWrapper
from snuba.web import QueryException
from snuba.web.rpc import RPCEndpoint, TraceItemDataResolver
from snuba.web.rpc.common.exceptions import BadSnubaRPCRequestException
from snuba.web.rpc.v1.resolvers import ResolverTraceItemTable
Expand Down Expand Up @@ -111,8 +112,10 @@ def _execute(self, in_msg: TraceItemTableRequest) -> TraceItemTableResponse:
resolver = self.get_resolver(in_msg.meta.trace_item_type)
try:
return resolver.resolve(in_msg)
except Exception as e:
if "DB::Exception: Memory limit (for query) exceeded" in str(e):
except QueryException as e:
if e.extra[
"code"
] == 241 or "DB::Exception: Memory limit (for query) exceeded" in str(e):
metrics.increment("endpoint_trace_item_table_OOM")
sentry_sdk.capture_exception(e)
raise BadSnubaRPCRequestException(str(e))
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,6 @@ def resolve(self, in_msg: TimeSeriesRequest) -> TimeSeriesResponse:
request=snuba_request,
timer=self._timer,
)

response_meta = extract_response_meta(
in_msg.meta.request_id,
in_msg.meta.debug,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,6 @@ def resolve(self, in_msg: TraceItemTableRequest) -> TraceItemTableResponse:
request=snuba_request,
timer=self._timer,
)

column_values = _convert_results(in_msg, res.result.get("data", []))
response_meta = extract_response_meta(
in_msg.meta.request_id,
Expand Down

0 comments on commit d18c096

Please sign in to comment.