diff --git a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md index 673bb28c5..4c9b233a7 100644 --- a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased + - Make `SpanProcessor.on_start` accept parent Context + ([#1251](https://github.com/open-telemetry/opentelemetry-python/pull/1251)) + ## Version 0.14b0 Released 2020-10-13 diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py index 603ea5024..d94cf0f10 100644 --- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py @@ -17,7 +17,7 @@ import logging import threading import typing -from opentelemetry.context import attach, detach, set_value +from opentelemetry.context import Context, attach, detach, set_value from opentelemetry.sdk.trace import Span, SpanProcessor from opentelemetry.sdk.trace.export import SpanExporter from opentelemetry.trace import INVALID_TRACE_ID @@ -81,7 +81,9 @@ class DatadogExportSpanProcessor(SpanProcessor): self.done = False self.worker_thread.start() - def on_start(self, span: Span) -> None: + def on_start( + self, span: Span, parent_context: typing.Optional[Context] = None + ) -> None: ctx = span.get_span_context() trace_id = ctx.trace_id diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index 98e894f94..bd8370c10 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -21,6 +21,7 @@ from unittest import mock from ddtrace.internal.writer import AgentWriter from opentelemetry import trace as trace_api +from opentelemetry.context import Context from opentelemetry.exporter import datadog from opentelemetry.sdk import trace from opentelemetry.sdk.trace import Resource, sampling @@ -482,6 +483,21 @@ class TestDatadogSpanExporter(unittest.TestCase): tracer_provider.shutdown() + def test_span_processor_accepts_parent_context(self): + span_processor = mock.Mock( + wraps=datadog.DatadogExportSpanProcessor(self.exporter) + ) + tracer_provider = trace.TracerProvider() + tracer_provider.add_span_processor(span_processor) + tracer = tracer_provider.get_tracer(__name__) + + context = Context() + span = tracer.start_span("foo", context=context) + + span_processor.on_start.assert_called_once_with( + span, parent_context=context + ) + def test_origin(self): context = trace_api.SpanContext( trace_id=0x000000000000000000000000DEADBEEF,