diff --git a/CHANGELOG.md b/CHANGELOG.md index 208d45e11c6..89f7552df4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - The metric portion of the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) has been reintroduced. (#3192) - The OpenCensus bridge example (`go.opentelemetry.io/otel/example/opencensus`) has been reintroduced. (#3206) +### Fixed + +- Set the `MeterProvider` resource on all exported metric data. (#3218) + ## [0.32.0] Revised Metric SDK (Alpha) - 2022-09-18 ### Changed diff --git a/sdk/metric/meter_test.go b/sdk/metric/meter_test.go index 72e67ba021b..004eb12f8a5 100644 --- a/sdk/metric/meter_test.go +++ b/sdk/metric/meter_test.go @@ -28,6 +28,7 @@ import ( "go.opentelemetry.io/otel/sdk/instrumentation" "go.opentelemetry.io/otel/sdk/metric/metricdata" "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest" + "go.opentelemetry.io/otel/sdk/resource" ) func TestMeterRegistry(t *testing.T) { @@ -466,6 +467,7 @@ func TestMetersProvideScope(t *testing.T) { assert.NoError(t, err) want := metricdata.ResourceMetrics{ + Resource: resource.Default(), ScopeMetrics: []metricdata.ScopeMetrics{ { Scope: instrumentation.Scope{ diff --git a/sdk/metric/pipeline.go b/sdk/metric/pipeline.go index 60e147d25e7..6783aef5d0f 100644 --- a/sdk/metric/pipeline.go +++ b/sdk/metric/pipeline.go @@ -162,10 +162,10 @@ type pipelineRegistry struct { pipelines map[Reader]*pipeline } -func newPipelineRegistries(views map[Reader][]view.View) *pipelineRegistry { +func newPipelineRegistries(res *resource.Resource, views map[Reader][]view.View) *pipelineRegistry { pipelines := map[Reader]*pipeline{} for rdr := range views { - pipe := &pipeline{} + pipe := &pipeline{resource: res} rdr.register(pipe) pipelines[rdr] = pipe } diff --git a/sdk/metric/pipeline_registry_test.go b/sdk/metric/pipeline_registry_test.go index 3455269fa81..1182eeca06a 100644 --- a/sdk/metric/pipeline_registry_test.go +++ b/sdk/metric/pipeline_registry_test.go @@ -20,10 +20,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric/unit" "go.opentelemetry.io/otel/sdk/metric/aggregation" "go.opentelemetry.io/otel/sdk/metric/internal" "go.opentelemetry.io/otel/sdk/metric/view" + "go.opentelemetry.io/otel/sdk/resource" ) type invalidAggregation struct { @@ -321,9 +323,9 @@ func TestPipelineRegistryCreateAggregators(t *testing.T) { for _, tt := range testCases { t.Run(tt.name, func(t *testing.T) { - reg := newPipelineRegistries(tt.views) + reg := newPipelineRegistries(resource.Empty(), tt.views) testPipelineRegistryCreateIntAggregators(t, reg, tt.wantCount) - reg = newPipelineRegistries(tt.views) + reg = newPipelineRegistries(resource.Empty(), tt.views) testPipelineRegistryCreateFloatAggregators(t, reg, tt.wantCount) }) } @@ -347,6 +349,19 @@ func testPipelineRegistryCreateFloatAggregators(t *testing.T, reg *pipelineRegis require.Len(t, aggs, wantCount) } +func TestPipelineRegistryResource(t *testing.T) { + v, err := view.New(view.MatchInstrumentName("bar"), view.WithRename("foo")) + require.NoError(t, err) + views := map[Reader][]view.View{ + NewManualReader(): {{}, v}, + } + res := resource.NewSchemaless(attribute.String("key", "val")) + reg := newPipelineRegistries(res, views) + for _, p := range reg.pipelines { + assert.True(t, res.Equal(p.resource), "resource not set") + } +} + func TestPipelineRegistryCreateAggregatorsIncompatibleInstrument(t *testing.T) { testRdrHistogram := NewManualReader(WithAggregationSelector(func(ik view.InstrumentKind) aggregation.Aggregation { return aggregation.ExplicitBucketHistogram{} })) @@ -355,14 +370,14 @@ func TestPipelineRegistryCreateAggregatorsIncompatibleInstrument(t *testing.T) { {}, }, } - reg := newPipelineRegistries(views) + reg := newPipelineRegistries(resource.Empty(), views) inst := view.Instrument{Name: "foo", Kind: view.AsyncGauge} intAggs, err := createAggregators[int64](reg, inst, unit.Dimensionless) assert.Error(t, err) assert.Len(t, intAggs, 0) - reg = newPipelineRegistries(views) + reg = newPipelineRegistries(resource.Empty(), views) floatAggs, err := createAggregators[float64](reg, inst, unit.Dimensionless) assert.Error(t, err) @@ -384,7 +399,7 @@ func TestPipelineRegistryCreateAggregatorsDuplicateErrors(t *testing.T) { fooInst := view.Instrument{Name: "foo", Kind: view.SyncCounter} barInst := view.Instrument{Name: "bar", Kind: view.SyncCounter} - reg := newPipelineRegistries(views) + reg := newPipelineRegistries(resource.Empty(), views) intAggs, err := createAggregators[int64](reg, fooInst, unit.Dimensionless) assert.NoError(t, err) diff --git a/sdk/metric/provider.go b/sdk/metric/provider.go index 481547d7062..d3a940bce58 100644 --- a/sdk/metric/provider.go +++ b/sdk/metric/provider.go @@ -48,7 +48,7 @@ func NewMeterProvider(options ...Option) *MeterProvider { flush, sdown := conf.readerSignals() - registry := newPipelineRegistries(conf.readers) + registry := newPipelineRegistries(conf.res, conf.readers) return &MeterProvider{ res: conf.res,