diff --git a/CHANGELOG.md b/CHANGELOG.md index 4957a64cb70..f323aa8c247 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6392) - Ensure the `noopSpan.tracerProvider` method is not inlined in `go.opentelemetry.io/otel/trace` so the `go.opentelemetry.io/auto` instrumentation can instrument non-recording spans. (#6456) - Use a `sync.Pool` instead of allocating `metricdata.ResourceMetrics` in `go.opentelemetry.io/otel/exporters/prometheus`. (#6472) +- `TracerProvider` and all implementations of Trace API interfaces embed the `go.opentelemetry.io/otel/trace/noop` type so that the Trace SDK is future-compatible with newer versions of Trace API that may have new methods added. (#6638) +- `MeterProvider` and all implementations of Metric API interfaces embed the `go.opentelemetry.io/otel/metric/noop` type so that the Metrics SDK is future-compatible with newer versions of Metrics API that may have new methods added. (#6638) +- `LoggerProvider` and all implementations of Logs API interfaces embed the `go.opentelemetry.io/otel/log/noop` type so that the Logs SDK is future-compatible with newer versions of Logs API that may have new methods added. (#6638) diff --git a/sdk/log/logger.go b/sdk/log/logger.go index cd3580ec043..745e3bf2cc9 100644 --- a/sdk/log/logger.go +++ b/sdk/log/logger.go @@ -9,7 +9,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/log" - "go.opentelemetry.io/otel/log/embedded" + "go.opentelemetry.io/otel/log/noop" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/trace" ) @@ -20,7 +20,7 @@ var now = time.Now var _ log.Logger = (*logger)(nil) type logger struct { - embedded.Logger + noop.Logger // Embed noop implementation for future-compatibility. provider *LoggerProvider instrumentationScope instrumentation.Scope diff --git a/sdk/log/provider.go b/sdk/log/provider.go index 359357b7e89..2f39169dc84 100644 --- a/sdk/log/provider.go +++ b/sdk/log/provider.go @@ -12,7 +12,6 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/internal/global" "go.opentelemetry.io/otel/log" - "go.opentelemetry.io/otel/log/embedded" "go.opentelemetry.io/otel/log/noop" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/resource" @@ -60,7 +59,7 @@ func newProviderConfig(opts []LoggerProviderOption) providerConfig { // LoggerProvider handles the creation and coordination of Loggers. All Loggers // created by a LoggerProvider will be associated with the same Resource. type LoggerProvider struct { - embedded.LoggerProvider + noop.LoggerProvider // Embed noop implementation for future-compatibility. resource *resource.Resource processors []Processor diff --git a/sdk/metric/instrument.go b/sdk/metric/instrument.go index 18891ed5b1a..6eeb97abc97 100644 --- a/sdk/metric/instrument.go +++ b/sdk/metric/instrument.go @@ -13,7 +13,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" + "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/metric/internal/aggregate" "go.opentelemetry.io/otel/sdk/metric/internal/x" @@ -180,10 +180,10 @@ func (i instID) normalize() instID { type int64Inst struct { measures []aggregate.Measure[int64] - embedded.Int64Counter - embedded.Int64UpDownCounter - embedded.Int64Histogram - embedded.Int64Gauge + noop.Int64Counter // Embed noop implementation for future-compatibility. + noop.Int64UpDownCounter // Embed noop implementation for future-compatibility. + noop.Int64Histogram // Embed noop implementation for future-compatibility. + noop.Int64Gauge // Embed noop implementation for future-compatibility. } var ( @@ -221,10 +221,10 @@ func (i *int64Inst) aggregate( type float64Inst struct { measures []aggregate.Measure[float64] - embedded.Float64Counter - embedded.Float64UpDownCounter - embedded.Float64Histogram - embedded.Float64Gauge + noop.Float64Counter // Embed noop implementation for future-compatibility. + noop.Float64UpDownCounter // Embed noop implementation for future-compatibility. + noop.Float64Histogram // Embed noop implementation for future-compatibility. + noop.Float64Gauge // Embed noop implementation for future-compatibility. } var ( @@ -268,9 +268,9 @@ type float64Observable struct { metric.Float64Observable *observable[float64] - embedded.Float64ObservableCounter - embedded.Float64ObservableUpDownCounter - embedded.Float64ObservableGauge + noop.Float64ObservableCounter // Embed noop implementation for future-compatibility. + noop.Float64ObservableUpDownCounter // Embed noop implementation for future-compatibility. + noop.Float64ObservableGauge // Embed noop implementation for future-compatibility. } var ( @@ -289,9 +289,9 @@ type int64Observable struct { metric.Int64Observable *observable[int64] - embedded.Int64ObservableCounter - embedded.Int64ObservableUpDownCounter - embedded.Int64ObservableGauge + noop.Int64ObservableCounter // Embed noop implementation for future-compatibility. + noop.Int64ObservableUpDownCounter // Embed noop implementation for future-compatibility. + noop.Int64ObservableGauge // Embed noop implementation for future-compatibility. } var ( diff --git a/sdk/metric/meter.go b/sdk/metric/meter.go index c500fd9f2ac..e65aa0658ee 100644 --- a/sdk/metric/meter.go +++ b/sdk/metric/meter.go @@ -10,7 +10,7 @@ import ( "go.opentelemetry.io/otel/internal/global" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" + "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/metric/internal/aggregate" @@ -25,7 +25,7 @@ var ErrInstrumentName = errors.New("invalid instrument name") // produced by an instrumentation scope will use metric instruments from a // single meter. type meter struct { - embedded.Meter + noop.Meter // Embed noop implementation for future-compatibility. scope instrumentation.Scope pipes pipelines @@ -480,7 +480,7 @@ func warnRepeatedObservableCallbacks(id Instrument) { func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) (metric.Registration, error) { if len(insts) == 0 { // Don't allocate a observer if not needed. - return noopRegister{}, nil + return noop.Registration{}, nil } var err error @@ -513,7 +513,7 @@ func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) if len(validInstruments) == 0 { // All insts use drop aggregation or are invalid. - return noopRegister{}, err + return noop.Registration{}, err } unregs := make([]func(), len(m.pipes)) @@ -537,7 +537,7 @@ func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) } type observer struct { - embedded.Observer + noop.Observer // Embed noop implementation for future-compatibility. pipe *pipeline float64 map[observableID[float64]]struct{} @@ -625,12 +625,6 @@ func (r observer) ObserveInt64(o metric.Int64Observable, v int64, opts ...metric } } -type noopRegister struct{ embedded.Registration } - -func (noopRegister) Unregister() error { - return nil -} - // int64InstProvider provides int64 OpenTelemetry instruments. type int64InstProvider struct{ *meter } @@ -754,7 +748,7 @@ func (p float64InstProvider) lookupHistogram(name string, cfg metric.Float64Hist } type int64Observer struct { - embedded.Int64Observer + noop.Int64Observer // Embed noop implementation for future-compatibility. measures[int64] } @@ -764,7 +758,7 @@ func (o int64Observer) Observe(val int64, opts ...metric.ObserveOption) { } type float64Observer struct { - embedded.Float64Observer + noop.Float64Observer // Embed noop implementation for future-compatibility. measures[float64] } diff --git a/sdk/metric/pipeline.go b/sdk/metric/pipeline.go index 2240c26e9b4..91671aeeb4c 100644 --- a/sdk/metric/pipeline.go +++ b/sdk/metric/pipeline.go @@ -12,7 +12,7 @@ import ( "sync/atomic" "go.opentelemetry.io/otel/internal/global" - "go.opentelemetry.io/otel/metric/embedded" + "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/metric/exemplar" "go.opentelemetry.io/otel/sdk/metric/internal" @@ -606,7 +606,8 @@ func newPipelines(res *resource.Resource, readers []Reader, views []View, exempl } type unregisterFuncs struct { - embedded.Registration + noop.Registration // Embed noop implementation for future-compatibility. + f []func() } diff --git a/sdk/metric/provider.go b/sdk/metric/provider.go index 2fca89e5a8e..f9eba49a237 100644 --- a/sdk/metric/provider.go +++ b/sdk/metric/provider.go @@ -9,7 +9,6 @@ import ( "go.opentelemetry.io/otel/internal/global" "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" "go.opentelemetry.io/otel/metric/noop" "go.opentelemetry.io/otel/sdk/instrumentation" ) @@ -19,7 +18,7 @@ import ( // the same Views applied to them, and have their produced metric telemetry // passed to the configured Readers. type MeterProvider struct { - embedded.MeterProvider + noop.MeterProvider // Embed noop implementation for future-compatibility. pipes pipelines meters cache[instrumentation.Scope, *meter] diff --git a/sdk/trace/provider.go b/sdk/trace/provider.go index 0e2a2e7c60d..23de4fc8a07 100644 --- a/sdk/trace/provider.go +++ b/sdk/trace/provider.go @@ -14,7 +14,6 @@ import ( "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/trace" - "go.opentelemetry.io/otel/trace/embedded" "go.opentelemetry.io/otel/trace/noop" ) @@ -64,7 +63,7 @@ func (cfg tracerProviderConfig) MarshalLog() interface{} { // TracerProvider is an OpenTelemetry TracerProvider. It provides Tracers to // instrumentation so it can trace operational flow through a system. type TracerProvider struct { - embedded.TracerProvider + noop.TracerProvider // Embed noop implementation for future-compatibility. mu sync.Mutex namedTracer map[instrumentation.Scope]*tracer diff --git a/sdk/trace/span.go b/sdk/trace/span.go index 8f4fc385082..c77c4061f46 100644 --- a/sdk/trace/span.go +++ b/sdk/trace/span.go @@ -22,7 +22,7 @@ import ( "go.opentelemetry.io/otel/sdk/resource" semconv "go.opentelemetry.io/otel/semconv/v1.26.0" "go.opentelemetry.io/otel/trace" - "go.opentelemetry.io/otel/trace/embedded" + "go.opentelemetry.io/otel/trace/noop" ) // ReadOnlySpan allows reading information from the data structure underlying a @@ -99,7 +99,7 @@ type ReadWriteSpan interface { // recordingSpan is an implementation of the OpenTelemetry Span API // representing the individual component of a trace that is sampled. type recordingSpan struct { - embedded.Span + noop.Span // Embed noop implementation for future-compatibility. // mu protects the contents of this span. mu sync.Mutex @@ -876,7 +876,7 @@ func (s *recordingSpan) runtimeTrace(ctx context.Context) context.Context { // that wraps a SpanContext. It performs no operations other than to return // the wrapped SpanContext or TracerProvider that created it. type nonRecordingSpan struct { - embedded.Span + noop.Span // Embed noop implementation for future-compatibility. // tracer is the SDK tracer that created this span. tracer *tracer diff --git a/sdk/trace/tracer.go b/sdk/trace/tracer.go index 0b65ae9ab70..7db8634d560 100644 --- a/sdk/trace/tracer.go +++ b/sdk/trace/tracer.go @@ -9,11 +9,11 @@ import ( "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/trace" - "go.opentelemetry.io/otel/trace/embedded" + "go.opentelemetry.io/otel/trace/noop" ) type tracer struct { - embedded.Tracer + noop.Tracer // Embed noop implementation for future-compatibility. provider *TracerProvider instrumentationScope instrumentation.Scope