Skip to content
Open
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: 2 additions & 0 deletions sentry_sdk/integrations/dramatiq.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ def after_process_message(
transaction.__exit__(type(exception), exception, None)
scope_manager.__exit__(type(exception), exception, None)

after_skip_message = after_process_message


def _make_message_event_processor(
message: "Message[R]", integration: "DramatiqIntegration"
Expand Down
30 changes: 28 additions & 2 deletions tests/integrations/dramatiq/test_dramatiq.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import pytest
import uuid

import dramatiq
import pytest
from dramatiq.brokers.stub import StubBroker
from dramatiq.middleware import Middleware, SkipMessage

import sentry_sdk
from sentry_sdk.tracing import TransactionSource
from sentry_sdk import start_transaction
from sentry_sdk.consts import SPANSTATUS
from sentry_sdk.integrations.dramatiq import DramatiqIntegration
from sentry_sdk.integrations.logging import ignore_logger
from sentry_sdk.tracing import Transaction, TransactionSource

ignore_logger("dramatiq.worker.WorkerThread")

Expand Down Expand Up @@ -386,3 +387,28 @@ def dummy_actor():
worker.join()

assert events == []


@pytest.mark.parametrize("broker", [1.0], indirect=True)
def test_that_skip_message_cleans_up_scope_and_transaction(
broker, worker, capture_events
):
transactions: list[Transaction] = []

class SkipMessageMiddleware(Middleware):
def before_process_message(self, broker, message):
transactions.append(sentry_sdk.get_current_scope().transaction)
raise SkipMessage()

broker.add_middleware(SkipMessageMiddleware())

@dramatiq.actor(max_retries=0)
def skipped_actor(): ...

skipped_actor.send()

broker.join(skipped_actor.queue_name)
worker.join()

(transaction,) = transactions
assert transaction.timestamp is not None