mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-01-14 02:33:21 +02:00
Make scope attributes as identifying for Tracer (#5924)
Towards https://github.com/open-telemetry/opentelemetry-go/issues/3368
This commit is contained in:
parent
30c0f3fa6e
commit
3742c54497
@ -29,6 +29,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5892)
|
||||
- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5911)
|
||||
- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5915)
|
||||
- Support scope attributes and make them as identifying for `Tracer` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/trace`. (#5924)
|
||||
|
||||
<!-- Released section -->
|
||||
<!-- Don't change this section unless doing release -->
|
||||
|
@ -87,6 +87,7 @@ func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
|
||||
name: name,
|
||||
version: c.InstrumentationVersion(),
|
||||
schema: c.SchemaURL(),
|
||||
attrs: c.InstrumentationAttributes(),
|
||||
}
|
||||
|
||||
if p.tracers == nil {
|
||||
@ -102,7 +103,12 @@ func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
|
||||
return t
|
||||
}
|
||||
|
||||
type il struct{ name, version, schema string }
|
||||
type il struct {
|
||||
name string
|
||||
version string
|
||||
schema string
|
||||
attrs attribute.Set
|
||||
}
|
||||
|
||||
// tracer is a placeholder for a trace.Tracer.
|
||||
//
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
"go.opentelemetry.io/otel/trace/embedded"
|
||||
"go.opentelemetry.io/otel/trace/noop"
|
||||
@ -237,17 +238,18 @@ func TestSpanContextPropagatedWithNonRecordingSpan(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTracerIdentity(t *testing.T) {
|
||||
type id struct{ name, ver, url string }
|
||||
type id struct{ name, ver, url, attr string }
|
||||
|
||||
ids := []id{
|
||||
{"name-a", "version-a", "url-a"},
|
||||
{"name-a", "version-a", "url-b"},
|
||||
{"name-a", "version-b", "url-a"},
|
||||
{"name-a", "version-b", "url-b"},
|
||||
{"name-b", "version-a", "url-a"},
|
||||
{"name-b", "version-a", "url-b"},
|
||||
{"name-b", "version-b", "url-a"},
|
||||
{"name-b", "version-b", "url-b"},
|
||||
{"name-a", "version-a", "url-a", ""},
|
||||
{"name-a", "version-a", "url-a", "attr"},
|
||||
{"name-a", "version-a", "url-b", ""},
|
||||
{"name-a", "version-b", "url-a", ""},
|
||||
{"name-a", "version-b", "url-b", ""},
|
||||
{"name-b", "version-a", "url-a", ""},
|
||||
{"name-b", "version-a", "url-b", ""},
|
||||
{"name-b", "version-b", "url-a", ""},
|
||||
{"name-b", "version-b", "url-b", ""},
|
||||
}
|
||||
|
||||
provider := &tracerProvider{}
|
||||
@ -256,6 +258,7 @@ func TestTracerIdentity(t *testing.T) {
|
||||
i.name,
|
||||
trace.WithInstrumentationVersion(i.ver),
|
||||
trace.WithSchemaURL(i.url),
|
||||
trace.WithInstrumentationAttributes(attribute.String("key", i.attr)),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -139,9 +139,10 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
|
||||
name = defaultTracerName
|
||||
}
|
||||
is := instrumentation.Scope{
|
||||
Name: name,
|
||||
Version: c.InstrumentationVersion(),
|
||||
SchemaURL: c.SchemaURL(),
|
||||
Name: name,
|
||||
Version: c.InstrumentationVersion(),
|
||||
SchemaURL: c.SchemaURL(),
|
||||
Attributes: c.InstrumentationAttributes(),
|
||||
}
|
||||
|
||||
t, ok := func() (trace.Tracer, bool) {
|
||||
@ -168,7 +169,7 @@ func (p *TracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.T
|
||||
// slowing down all tracing consumers.
|
||||
// - Logging code may be instrumented with tracing and deadlock because it could try
|
||||
// acquiring the same non-reentrant mutex.
|
||||
global.Info("Tracer created", "name", name, "version", is.Version, "schemaURL", is.SchemaURL)
|
||||
global.Info("Tracer created", "name", name, "version", is.Version, "schemaURL", is.SchemaURL, "attributes", is.Attributes)
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
@ -387,7 +387,7 @@ func TestTracerProviderReturnsSameTracer(t *testing.T) {
|
||||
|
||||
t0, t1, t2 := p.Tracer("t0"), p.Tracer("t1"), p.Tracer("t0", trace.WithInstrumentationAttributes(attribute.String("foo", "bar")))
|
||||
assert.NotSame(t, t0, t1)
|
||||
assert.Same(t, t0, t2) // TODO (#3368): Change to assert.NotSame.
|
||||
assert.NotSame(t, t0, t2)
|
||||
assert.NotSame(t, t1, t2)
|
||||
|
||||
t3, t4, t5 := p.Tracer("t0"), p.Tracer("t1"), p.Tracer("t0", trace.WithInstrumentationAttributes(attribute.String("foo", "bar")))
|
||||
|
Loading…
Reference in New Issue
Block a user