Skip to content

Commit

Permalink
fix(otel): NoOpSpan updates scope (#1834)
Browse files Browse the repository at this point in the history
When using otel as the instrumentor, the NoOpSpan needs to update the scope when
it's used as a context manager. If it does not, then this differs from the usual
behaviour of a span and the end user may start seeing an unexpected `None` on
the scope.
  • Loading branch information
Zylphrex committed Jan 17, 2023
1 parent de84c4c commit 1445c73
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
8 changes: 0 additions & 8 deletions sentry_sdk/tracing.py
Expand Up @@ -859,14 +859,6 @@ def __repr__(self):
# type: () -> str
return self.__class__.__name__

def __enter__(self):
# type: () -> NoOpSpan
return self

def __exit__(self, ty, value, tb):
# type: (Optional[Any], Optional[Any], Optional[Any]) -> None
pass

def start_child(self, instrumenter=INSTRUMENTER.SENTRY, **kwargs):
# type: (str, **Any) -> NoOpSpan
return NoOpSpan()
Expand Down
12 changes: 9 additions & 3 deletions tests/tracing/test_noop_span.py
Expand Up @@ -11,17 +11,21 @@
def test_noop_start_transaction(sentry_init):
sentry_init(instrumenter="otel", debug=True)

transaction = sentry_sdk.start_transaction(op="task", name="test_transaction_name")
assert isinstance(transaction, NoOpSpan)
with sentry_sdk.start_transaction(
op="task", name="test_transaction_name"
) as transaction:
assert isinstance(transaction, NoOpSpan)
assert sentry_sdk.Hub.current.scope.span is transaction

transaction.name = "new name"
transaction.name = "new name"


def test_noop_start_span(sentry_init):
sentry_init(instrumenter="otel", debug=True)

with sentry_sdk.start_span(op="http", description="GET /") as span:
assert isinstance(span, NoOpSpan)
assert sentry_sdk.Hub.current.scope.span is span

span.set_tag("http.status_code", "418")
span.set_data("http.entity_type", "teapot")
Expand All @@ -35,6 +39,7 @@ def test_noop_transaction_start_child(sentry_init):

with transaction.start_child(op="child_task") as child:
assert isinstance(child, NoOpSpan)
assert sentry_sdk.Hub.current.scope.span is child


def test_noop_span_start_child(sentry_init):
Expand All @@ -44,3 +49,4 @@ def test_noop_span_start_child(sentry_init):

with span.start_child(op="child_task") as child:
assert isinstance(child, NoOpSpan)
assert sentry_sdk.Hub.current.scope.span is child

0 comments on commit 1445c73

Please sign in to comment.