diff --git a/CHANGELOG.md b/CHANGELOG.md index f7003689d..ae08281b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,7 +37,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Rename `MergeItererator` to `MergeIterator` in the `go.opentelemetry.io/otel/label` package. (#1244) - Move the `go.opentelemetry.io/otel/api/metric/metrictest` package into `go.opentelemetry.io/oteltest` as part of #964. (#1252) - Move the `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric` as part of #1303. (#1321) -- Move the `go.opentelemetry.io/otel/api/metric/registry` package into `go.opentelemetry.io/otel/metric/registry as a part of #1303. (#1316) +- Move the `go.opentelemetry.io/otel/api/metric/registry` package into `go.opentelemetry.io/otel/metric/registry` as a part of #1303. (#1316) - Move the `Number` type (together with related functions) from `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric/number` as a part of #1303. (#1316) - The function signature of the Span `AddEvent` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required name and a variable number of `EventOption`s. (#1254) - The function signature of the Span `RecordError` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required error value and a variable number of `EventOption`s. (#1254) @@ -63,6 +63,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - The `go.opentelemetry.io/otel/api/global` packages global TextMapPropagator now delegates functionality to a globally set delegate for all previously returned propagators. (#1258) - Fix condition in `label.Any`. (#1299) +- Fix global `TracerProvider` to pass options to its configured provider. (#1329) ## [0.13.0] - 2020-10-08 diff --git a/internal/global/trace.go b/internal/global/trace.go index 5868cb462..7b6993153 100644 --- a/internal/global/trace.go +++ b/internal/global/trace.go @@ -84,7 +84,7 @@ func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T defer p.mtx.Unlock() if p.delegate != nil { - return p.delegate.Tracer(name) + return p.delegate.Tracer(name, opts...) } t := &tracer{name: name, opts: opts} diff --git a/internal/global/trace_test.go b/internal/global/trace_test.go index a1bc3dd15..6e53c4594 100644 --- a/internal/global/trace_test.go +++ b/internal/global/trace_test.go @@ -23,6 +23,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/internal/global" "go.opentelemetry.io/otel/oteltest" + "go.opentelemetry.io/otel/trace" ) func TestTraceWithSDK(t *testing.T) { @@ -61,3 +62,32 @@ func TestTraceWithSDK(t *testing.T) { assert.ElementsMatch(t, expected, filterNames(sr.Started())) assert.ElementsMatch(t, expected, filterNames(sr.Completed())) } + +type fnTracerProvider struct { + tracer func(string, ...trace.TracerOption) trace.Tracer +} + +func (fn fnTracerProvider) Tracer(instrumentationName string, opts ...trace.TracerOption) trace.Tracer { + return fn.tracer(instrumentationName, opts...) +} + +func TestTraceProviderDelegates(t *testing.T) { + global.ResetForTest() + + // Retrieve the placeholder TracerProvider. + gtp := otel.GetTracerProvider() + + // Configure it with a spy. + called := false + otel.SetTracerProvider(fnTracerProvider{ + tracer: func(name string, opts ...trace.TracerOption) trace.Tracer { + called = true + assert.Equal(t, "abc", name) + assert.Equal(t, []trace.TracerOption{trace.WithInstrumentationVersion("xyz")}, opts) + return trace.NewNoopTracerProvider().Tracer("") + }, + }) + + gtp.Tracer("abc", trace.WithInstrumentationVersion("xyz")) + assert.True(t, called, "expected configured TraceProvider to be called") +}