Skip to content

[DoNotMerge] sdk: implementations to embed noop instead of embedded #6638

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

<!-- Released section -->
<!-- Don't change this section unless doing release -->
Expand Down
4 changes: 2 additions & 2 deletions sdk/log/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand All @@ -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
Expand Down
3 changes: 1 addition & 2 deletions sdk/log/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand Down
30 changes: 15 additions & 15 deletions sdk/metric/instrument.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 (
Expand Down Expand Up @@ -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 (
Expand Down Expand Up @@ -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 (
Expand All @@ -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 (
Expand Down
20 changes: 7 additions & 13 deletions sdk/metric/meter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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))
Expand All @@ -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{}
Expand Down Expand Up @@ -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 }

Expand Down Expand Up @@ -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]
}

Expand All @@ -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]
}

Expand Down
5 changes: 3 additions & 2 deletions sdk/metric/pipeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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()
}

Expand Down
3 changes: 1 addition & 2 deletions sdk/metric/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand All @@ -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]
Expand Down
3 changes: 1 addition & 2 deletions sdk/trace/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions sdk/trace/span.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions sdk/trace/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading