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
4 changes: 2 additions & 2 deletions src/instana/tracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from instana.recorder import StanRecorder
from instana.sampling import InstanaSampler, Sampler
from instana.span.kind import EXIT_SPANS
from instana.span.span import InstanaSpan
from instana.span.span import InstanaSpan, get_current_span
from instana.span_context import SpanContext
from instana.util.ids import generate_id

Expand Down Expand Up @@ -118,7 +118,7 @@ def start_span(
record_exception: bool = True,
set_status_on_exception: bool = True,
) -> InstanaSpan:
parent_context = span_context
parent_context = span_context if span_context else get_current_span().get_span_context()

if parent_context is not None and not isinstance(parent_context, SpanContext):
raise TypeError("parent_context must be an Instana SpanContext or None.")
Expand Down
30 changes: 26 additions & 4 deletions tests/test_tracer.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# (c) Copyright IBM Corp. 2024

from opentelemetry.trace import set_span_in_context
from opentelemetry.trace.span import _SPAN_ID_MAX_VALUE, INVALID_SPAN_ID
import pytest

from opentelemetry.trace.span import _SPAN_ID_MAX_VALUE

from instana.agent.test import TestAgent
from instana.recorder import StanRecorder
from instana.sampling import InstanaSampler
from instana.span.span import InstanaSpan
from instana.span.span import InstanaSpan, get_current_span, INVALID_SPAN_ID, INVALID_SPAN
from instana.span_context import SpanContext
from instana.tracer import InstanaTracer, InstanaTracerProvider
from opentelemetry.trace.span import _SPAN_ID_MAX_VALUE, INVALID_SPAN_ID


def test_tracer_defaults(tracer_provider: InstanaTracerProvider) -> None:
Expand Down Expand Up @@ -99,6 +99,28 @@ def test_tracer_start_as_current_span(tracer_provider: InstanaTracerProvider) ->
assert span.name == span_name


def test_tracer_nested_span(tracer_provider: InstanaTracerProvider) -> None:
tracer = InstanaTracer(
tracer_provider.sampler,
tracer_provider._span_processor,
tracer_provider._exporter,
tracer_provider._propagators,
)
parent_span_name = "parent-span"
child_span_name = "child-span"
with tracer.start_as_current_span(name=parent_span_name) as pspan:
assert get_current_span() is pspan
with tracer.start_as_current_span(name=child_span_name) as cspan:
assert get_current_span() is cspan
assert cspan.parent_id == pspan.context.span_id
# child span goes out of scope
assert cspan.end_time is not None
assert get_current_span() is pspan
# parent span goes out of scope
assert pspan.end_time is not None
assert get_current_span() is INVALID_SPAN


def test_tracer_create_span_context(
span_context: SpanContext, tracer_provider: InstanaTracerProvider
) -> None:
Expand Down