Skip to content

Commit

Permalink
fix: allow user override of id generator (#1315)
Browse files Browse the repository at this point in the history
  • Loading branch information
RogerHYang authored Feb 27, 2025
1 parent b59d70a commit 1916749
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
set_value,
)
from opentelemetry.sdk.trace import TracerProvider as OTelTracerProvider
from opentelemetry.sdk.trace.id_generator import IdGenerator
from opentelemetry.sdk.trace.id_generator import IdGenerator, RandomIdGenerator
from opentelemetry.trace import (
INVALID_SPAN,
INVALID_SPAN_ID,
Expand Down Expand Up @@ -612,7 +612,10 @@ def __init__(self, wrapped: Tracer, config: TraceConfig) -> None:

@property
def id_generator(self) -> IdGenerator:
return self._self_id_generator
ans = getattr(self.__wrapped__, "id_generator", None)
if ans and ans.__class__ is RandomIdGenerator:
return self._self_id_generator
return cast(IdGenerator, ans)

@contextmanager
def start_as_current_span(
Expand Down
21 changes: 17 additions & 4 deletions python/openinference-instrumentation/tests/test_id_generator.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
from random import seed

import pytest
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter
from opentelemetry.sdk.trace.id_generator import RandomIdGenerator

from openinference.instrumentation import OITracer, TraceConfig


def test_id_generator_is_unaffected_by_seed() -> None:
@pytest.mark.parametrize(
"override",
[
pytest.param(True, id="should-allow-user-override"),
pytest.param(False, id="should-be-unaffected-by-seed"),
],
)
def test_id_generator(override: bool) -> None:
in_memory_span_exporter = InMemorySpanExporter()
tracer_provider = TracerProvider()
tracer_provider = (
TracerProvider(id_generator=type("Foo", (RandomIdGenerator,), {})())
if override
else TracerProvider()
)
tracer_provider.add_span_processor(SimpleSpanProcessor(in_memory_span_exporter))
tracer = tracer_provider.get_tracer(__name__)
oi_tracer = OITracer(tracer, TraceConfig())
Expand All @@ -21,5 +34,5 @@ def test_id_generator_is_unaffected_by_seed() -> None:
tr.start_span("child").end()
spans = in_memory_span_exporter.get_finished_spans()
assert len(spans) == n * 2 * 2
assert len(set(span.context.trace_id for span in spans)) == (n + 1)
assert len(set(span.context.span_id for span in spans)) == (n + 1) * 2
assert len(set(span.context.trace_id for span in spans)) == 1 if override else (n + 1)
assert len(set(span.context.span_id for span in spans)) == 2 if override else (n + 1) * 2

0 comments on commit 1916749

Please sign in to comment.