Skip to content
Merged
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
2 changes: 1 addition & 1 deletion src/sentry/eventstream/eap.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def delete_groups_from_eap_rpc(
),
filters=[filter_with_type],
)
response = snuba_rpc.rpc(request, DeleteTraceItemsResponse)
response = snuba_rpc.delete_trace_items_rpc(request)

return response

Expand Down
15 changes: 15 additions & 0 deletions src/sentry/utils/snuba_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
CreateSubscriptionRequest,
CreateSubscriptionResponse,
)
from sentry_protos.snuba.v1.endpoint_delete_trace_items_pb2 import (
DeleteTraceItemsRequest,
DeleteTraceItemsResponse,
)
from sentry_protos.snuba.v1.endpoint_get_trace_pb2 import GetTraceRequest, GetTraceResponse
from sentry_protos.snuba.v1.endpoint_get_traces_pb2 import GetTracesRequest, GetTracesResponse
from sentry_protos.snuba.v1.endpoint_time_series_pb2 import TimeSeriesRequest, TimeSeriesResponse
Expand Down Expand Up @@ -196,6 +200,17 @@ def trace_item_details_rpc(req: TraceItemDetailsRequest) -> TraceItemDetailsResp
return response


def delete_trace_items_rpc(req: DeleteTraceItemsRequest) -> DeleteTraceItemsResponse:
"""
An RPC which deletes trace items matching the filters specified in the request.
Used for deleting EAP trace items (e.g. occurrences).
"""
resp = _make_rpc_request("EndpointDeleteTraceItems", "v1", req.meta.referrer, req)
response = DeleteTraceItemsResponse()
response.ParseFromString(resp.data)
return response


def rpc(
req: SnubaRPCRequest,
resp_type: type[RPCResponseType],
Expand Down
8 changes: 4 additions & 4 deletions tests/sentry/eventstream/test_eap.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def setUp(self):
self.project_id = 123
self.group_ids = [1, 2, 3]

@patch("sentry.eventstream.eap.snuba_rpc.rpc")
@patch("sentry.eventstream.eap.snuba_rpc.delete_trace_items_rpc")
def test_deletion_with_error_dataset(self, mock_rpc):
mock_rpc.return_value = DeleteTraceItemsResponse(
meta=ResponseMeta(),
Expand All @@ -37,7 +37,7 @@ def test_deletion_with_error_dataset(self, mock_rpc):
assert len(request.filters) == 1
assert request.filters[0].item_type == TRACE_ITEM_TYPE_OCCURRENCE

@patch("sentry.eventstream.eap.snuba_rpc.rpc")
@patch("sentry.eventstream.eap.snuba_rpc.delete_trace_items_rpc")
def test_multiple_group_ids(self, mock_rpc):
mock_rpc.return_value = DeleteTraceItemsResponse(
meta=ResponseMeta(),
Expand All @@ -54,7 +54,7 @@ def test_multiple_group_ids(self, mock_rpc):
group_filter = request.filters[0].filter.and_filter.filters[1]
assert list(group_filter.comparison_filter.value.val_int_array.values) == many_group_ids

@patch("sentry.eventstream.eap.snuba_rpc.rpc")
@patch("sentry.eventstream.eap.snuba_rpc.delete_trace_items_rpc")
def test_eap_deletion_disabled_skips_deletion(self, mock_rpc):
with self.options({"eventstream.eap.deletion-enabled": False}):
delete_events_from_eap(
Expand All @@ -71,7 +71,7 @@ def test_empty_group_ids_raises_error(self):
group_ids=[],
)

@patch("sentry.eventstream.eap.snuba_rpc.rpc")
@patch("sentry.eventstream.eap.snuba_rpc.delete_trace_items_rpc")
def test_exception_does_not_propagate(self, mock_rpc):
mock_rpc.side_effect = Exception("RPC connection failed")

Expand Down
Loading