Make SpanProcessor.on_start accept parent Context (#1251)

* context from Tracer.start_span is passed through to the SpanProcessor
* fix linting issue in falcon test app when linting with eachdist script
* fix global error handler test as it read installed extensions
* reset global Configuration object state after tests were run
This commit is contained in:
Mario Jonke
2020-10-16 23:11:20 +02:00
committed by GitHub
parent 55d5e62d4e
commit 33a404d918
3 changed files with 23 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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,