diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index 2a8b753e5fc..7b94704a573 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -40,7 +40,7 @@ def __init__(self, *args, **kwargs): def get_spans(tracer, exporter, shutdown=True): if shutdown: - tracer.source.shutdown() + tracer.span_processor.shutdown() spans = [ call_args[-1]["spans"] diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index d1aa2261148..e5e8f64e304 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -16,6 +16,8 @@ ([#1289](https://github.com/open-telemetry/opentelemetry-python/pull/1289)) - Set initial checkpoint timestamp in aggregators ([#1237](https://github.com/open-telemetry/opentelemetry-python/pull/1237)) +- Remove TracerProvider coupling from Tracer init + ([#1295](https://github.com/open-telemetry/opentelemetry-python/pull/1295)) ## Version 0.14b0 diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 400600bec83..04faa19ec20 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -705,19 +705,22 @@ class _Span(Span): class Tracer(trace_api.Tracer): """See `opentelemetry.trace.Tracer`. - - Args: - name: The name of the tracer. - shutdown_on_exit: Register an atexit hook to shut down the tracer when - the application exits. """ def __init__( self, - source: "TracerProvider", + sampler: sampling.Sampler, + resource: Resource, + span_processor: Union[ + SynchronousMultiSpanProcessor, ConcurrentMultiSpanProcessor + ], + ids_generator: trace_api.IdsGenerator, instrumentation_info: InstrumentationInfo, ) -> None: - self.source = source + self.sampler = sampler + self.resource = resource + self.span_processor = span_processor + self.ids_generator = ids_generator self.instrumentation_info = instrumentation_info def start_as_current_span( @@ -759,7 +762,7 @@ def start_span( # pylint: disable=too-many-locals # is_valid determines root span if parent_span_context is None or not parent_span_context.is_valid: parent_span_context = None - trace_id = self.source.ids_generator.generate_trace_id() + trace_id = self.ids_generator.generate_trace_id() trace_flags = None trace_state = None else: @@ -772,7 +775,7 @@ def start_span( # pylint: disable=too-many-locals # exported. # The sampler may also add attributes to the newly-created span, e.g. # to include information about the sampling result. - sampling_result = self.source.sampler.should_sample( + sampling_result = self.sampler.should_sample( context, trace_id, name, attributes, links, ) @@ -783,7 +786,7 @@ def start_span( # pylint: disable=too-many-locals ) span_context = trace_api.SpanContext( trace_id, - self.source.ids_generator.generate_span_id(), + self.ids_generator.generate_span_id(), is_remote=False, trace_flags=trace_flags, trace_state=trace_state, @@ -796,10 +799,10 @@ def start_span( # pylint: disable=too-many-locals name=name, context=span_context, parent=parent_span_context, - sampler=self.source.sampler, - resource=self.source.resource, + sampler=self.sampler, + resource=self.resource, attributes=sampling_result.attributes.copy(), - span_processor=self.source._active_span_processor, + span_processor=self.span_processor, kind=kind, links=links, instrumentation_info=self.instrumentation_info, @@ -888,7 +891,10 @@ def get_tracer( instrumenting_module_name = "ERROR:MISSING MODULE NAME" logger.error("get_tracer called with missing module name.") return Tracer( - self, + self.sampler, + self.resource, + self._active_span_processor, + self.ids_generator, InstrumentationInfo( instrumenting_module_name, instrumenting_library_version ),