From 2469880027b7cf3dfdac6b41aecee057e801a0f2 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Wed, 21 Sep 2022 09:46:32 -0700 Subject: [PATCH] Set MeterProvider resource for all pipelines Resolves #3208 --- sdk/metric/meter_test.go | 2 ++ sdk/metric/pipeline.go | 4 ++-- sdk/metric/pipeline_registry_test.go | 25 ++++++++++++++++++++----- sdk/metric/provider.go | 2 +- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/sdk/metric/meter_test.go b/sdk/metric/meter_test.go index 8efcbd6b261..b92cf227f99 100644 --- a/sdk/metric/meter_test.go +++ b/sdk/metric/meter_test.go @@ -31,6 +31,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) { @@ -469,6 +470,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 d4f7d4f8082..b0617dc461a 100644 --- a/sdk/metric/pipeline.go +++ b/sdk/metric/pipeline.go @@ -165,10 +165,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 d4e47f35eb5..f52ee5fe1fb 100644 --- a/sdk/metric/pipeline_registry_test.go +++ b/sdk/metric/pipeline_registry_test.go @@ -23,10 +23,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 { @@ -324,9 +326,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) }) } @@ -350,6 +352,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{} })) @@ -358,14 +373,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) @@ -387,7 +402,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 7f8f32bf104..64c8692c6a4 100644 --- a/sdk/metric/provider.go +++ b/sdk/metric/provider.go @@ -51,7 +51,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,