otel: go.opentelemetry.io/otel/bridge/opentracing/migration Index | Files

package migration

import "go.opentelemetry.io/otel/bridge/opentracing/migration"

This package provides interfaces and functions that are useful for providing a cooperation of the OpenTelemetry tracers with the OpenTracing API.


Package Files

api.go defer.go

func SkipContextSetup Uses

func SkipContextSetup(ctx context.Context) bool

SkipContextSetup can tell the OpenTelemetry tracer to skip the context setup during the span creation in the Start() function.

func WithDeferredSetup Uses

func WithDeferredSetup(ctx context.Context) context.Context

WithDeferredSetup returns a context that can tell the OpenTelemetry tracer to skip the context setup in the Start() function.

type DeferredContextSetupTracerExtension Uses

type DeferredContextSetupTracerExtension interface {
    // DeferredContextSetupHook is called by the bridge
    // OpenTracing tracer when opentracing.ContextWithSpan is
    // called. This allows the OpenTelemetry tracer to set up the
    // context in a way it would normally do during the Start()
    // function. Since OpenTracing API does not support
    // configuration of the context during span creation, it needs
    // to be deferred until the call to the
    // opentracing.ContextWithSpan happens. When bridge
    // OpenTracing tracer calls OpenTelemetry tracer's Start()
    // function, it passes a context that shouldn't be modified.
    DeferredContextSetupHook(ctx context.Context, span trace.Span) context.Context

DeferredContextSetupTracerExtension is an interface an OpenTelemetry tracer may implement in order to cooperate with the calls to the OpenTracing API.

Tracers implementing this interface should also use the SkipContextSetup() function during creation of the span in the Start() function to skip the configuration of the context.

type OverrideTracerSpanExtension Uses

type OverrideTracerSpanExtension interface {
    // OverrideTracer makes the span to return the passed tracer
    // from its Tracer() function.
    // You don't need to implement this function if your
    // OpenTelemetry tracer cooperates well with the OpenTracing
    // API calls. In such case, there is no need to use the
    // WrapperTracer and thus no need to override the result of
    // the Tracer() function.
    OverrideTracer(tracer trace.Tracer)

OverrideTracerSpanExtension is an interface an OpenTelemetry span may implement in order to cooperate with the calls to the OpenTracing API.

TODO(krnowak): I'm actually not so sold on the idea… The reason for introducing this interface was to have a span "created" by the WrapperTracer return WrapperTracer from the Tracer() function, not the real OpenTelemetry tracer that actually created the span. I'm thinking that I could create a wrapperSpan type that wraps an OpenTelemetry Span object and have WrapperTracer to alter the current OpenTelemetry span in the context so it points to the wrapped object, so the code in the tracer like `trace.SpanFromContent().(*realSpan)` would still work. Another argument for getting rid of this interface is that is only called by the WrapperTracer - WrapperTracer likely shouldn't require any changes in the underlying OpenTelemetry tracer to have things somewhat working.

See the "tracer mess" test in mix_test.go.

Package migration imports 2 packages (graph) and is imported by 2 packages. Updated 2020-11-18. Refresh now. Tools for package owners.