From 239f756a07c2d91233367fcae006af24f28ee1b9 Mon Sep 17 00:00:00 2001 From: Jonas Stendahl Date: Tue, 14 Nov 2023 19:10:15 +0100 Subject: [PATCH] Make async gRPC less noisy --- sentry_sdk/integrations/grpc/aio/server.py | 4 +++- tests/integrations/grpc/test_grpc_aio.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/grpc/aio/server.py b/sentry_sdk/integrations/grpc/aio/server.py index 56d21a90a1..ba19eb947c 100644 --- a/sentry_sdk/integrations/grpc/aio/server.py +++ b/sentry_sdk/integrations/grpc/aio/server.py @@ -13,7 +13,7 @@ try: import grpc from grpc import HandlerCallDetails, RpcMethodHandler - from grpc.aio import ServicerContext + from grpc.aio import AbortError, ServicerContext except ImportError: raise DidNotEnable("grpcio is not installed") @@ -52,6 +52,8 @@ async def wrapped(request, context): with hub.start_transaction(transaction=transaction): try: return await handler.unary_unary(request, context) + except AbortError: + raise except Exception as exc: event, hint = event_from_exception( exc, diff --git a/tests/integrations/grpc/test_grpc_aio.py b/tests/integrations/grpc/test_grpc_aio.py index d5a716bb4b..0b8571adca 100644 --- a/tests/integrations/grpc/test_grpc_aio.py +++ b/tests/integrations/grpc/test_grpc_aio.py @@ -124,6 +124,21 @@ async def test_grpc_server_exception(capture_events, grpc_server): assert event["exception"]["values"][0]["mechanism"]["type"] == "grpc" +@pytest.mark.asyncio +async def test_grpc_server_abort(capture_events, grpc_server): + events = capture_events() + + async with grpc.aio.insecure_channel("localhost:{}".format(AIO_PORT)) as channel: + stub = gRPCTestServiceStub(channel) + try: + await stub.TestServe(gRPCTestMessage(text="abort")) + raise AssertionError() + except Exception: + pass + + assert len(events) == 1 + + @pytest.mark.asyncio async def test_grpc_client_starts_span( grpc_server, sentry_init, capture_events_forksafe @@ -218,6 +233,9 @@ async def TestServe(cls, request, context): # noqa: N802 if request.text == "exception": raise cls.TestException() + if request.text == "abort": + await context.abort(grpc.StatusCode.ABORTED) + return gRPCTestMessage(text=request.text) @classmethod