Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions snuba/web/db_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,9 @@ def _raw_query(
error_code = cause.code
status = get_query_status_from_error_codes(error_code)
if error_code == ErrorCodes.TOO_MANY_BYTES:
calculated_cause = RateLimitExceeded(
"Query scanned more than the allocated amount of bytes"
)
# Since we overwrite the original cause with a new error, we need to
# manually add the quota_allowance attribute to the new exception
cause.extra_data["quota_allowance"] = stats["quota_allowance"]

with configure_scope() as scope:
fingerprint = ["{{default}}", str(cause.code), dataset_name]
Expand Down
41 changes: 41 additions & 0 deletions tests/test_snql_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1360,6 +1360,45 @@ def test_allocation_policy_max_bytes_to_read(self) -> None:
== "Query scanned more than the allocated amount of bytes"
)

expected_quota_allowance = {
"details": {
"MaxBytesPolicy123": {
"can_run": True,
"max_threads": 0,
"max_bytes_to_read": 1,
"explanation": {
"storage_key": "doesntmatter",
},
"is_throttled": True,
"throttle_threshold": MAX_THRESHOLD,
"rejection_threshold": MAX_THRESHOLD,
"quota_used": 0,
"quota_unit": NO_UNITS,
"suggestion": NO_SUGGESTION,
}
},
"summary": {
"threads_used": 0,
"max_bytes_to_read": 1,
"is_successful": False,
"is_rejected": False,
"is_throttled": True,
"rejection_storage_key": None,
"throttle_storage_key": "doesntmatter",
"rejected_by": {},
"throttled_by": {
"policy": "MaxBytesPolicy123",
"quota_used": 0,
"quota_unit": NO_UNITS,
"suggestion": NO_SUGGESTION,
"storage_key": "doesntmatter",
"throttle_threshold": MAX_THRESHOLD,
},
},
}

assert response.json["quota_allowance"] == expected_quota_allowance

def test_allocation_policy_violation(self) -> None:
with patch(
"snuba.web.db_query._get_allocation_policies",
Expand Down Expand Up @@ -1427,6 +1466,8 @@ def test_allocation_policy_violation(self) -> None:
== f"Query on could not be run due to allocation policies, info: {info}"
)

assert response.json["quota_allowance"] == info

def test_tags_key_column(self) -> None:
response = self.post(
"/events/snql",
Expand Down
Loading