Skip to content

Commit f1b62b0

Browse files
committed
Bug fix.
1 parent 695eb66 commit f1b62b0

File tree

2 files changed

+48
-16
lines changed

2 files changed

+48
-16
lines changed

src/OpenTelemetry/Metrics/MetricReaderExt.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,14 @@ internal List<Metric> AddMetricsListWithViews(Instrument instrument, List<Metric
137137
{
138138
bool shouldReclaimUnusedMetricPoints = this.parentProvider is MeterProviderSdk meterProviderSdk && meterProviderSdk.ShouldReclaimUnusedMetricPoints;
139139

140+
var cardinalityLimit = this.cardinalityLimit;
141+
140142
if (metricStreamConfig != null && metricStreamConfig.CardinalityLimit != null)
141143
{
142-
this.cardinalityLimit = metricStreamConfig.CardinalityLimit.Value;
144+
cardinalityLimit = metricStreamConfig.CardinalityLimit.Value;
143145
}
144146

145-
Metric metric = new(metricStreamIdentity, this.GetAggregationTemporality(metricStreamIdentity.InstrumentType), this.cardinalityLimit, this.emitOverflowAttribute, shouldReclaimUnusedMetricPoints, this.exemplarFilter);
147+
Metric metric = new(metricStreamIdentity, this.GetAggregationTemporality(metricStreamIdentity.InstrumentType), cardinalityLimit, this.emitOverflowAttribute, shouldReclaimUnusedMetricPoints, this.exemplarFilter);
146148

147149
this.instrumentIdentityToMetric[metricStreamIdentity] = metric;
148150
this.metrics![index] = metric;

test/OpenTelemetry.Tests/Metrics/MetricViewTests.cs

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -919,31 +919,61 @@ public void ViewConflict_OneInstrument_DifferentDescription()
919919
Assert.Equal(10, metricPoint2.GetSumLong());
920920
}
921921

922-
[Fact]
923-
public void CardinalityLimitofMatchingViewTakesPrecedenceOverMetricProviderWhenBothWereSet()
922+
[Theory]
923+
[InlineData(true)]
924+
[InlineData(false)]
925+
public void CardinalityLimitofMatchingViewTakesPrecedenceOverMeterProvider(bool setDefault)
924926
{
925927
using var meter = new Meter(Utils.GetCurrentMethodName());
926928
var exportedItems = new List<Metric>();
927929

928-
#pragma warning disable CS0618 // Type or member is obsolete
929-
using var container = this.BuildMeterProvider(out var meterProvider, builder => builder
930-
.AddMeter(meter.Name)
931-
.SetMaxMetricPointsPerMetricStream(3)
932-
.AddView((instrument) =>
930+
using var container = this.BuildMeterProvider(out var meterProvider, builder =>
931+
{
932+
if (setDefault)
933933
{
934-
return new MetricStreamConfiguration() { Name = "MetricStreamA", CardinalityLimit = 10000 };
935-
})
936-
.AddInMemoryExporter(exportedItems));
934+
#pragma warning disable CS0618 // Type or member is obsolete
935+
builder.SetMaxMetricPointsPerMetricStream(3);
937936
#pragma warning restore CS0618 // Type or member is obsolete
937+
}
938+
939+
builder
940+
.AddMeter(meter.Name)
941+
.AddView((instrument) =>
942+
{
943+
if (instrument.Name == "counter2")
944+
{
945+
return new MetricStreamConfiguration() { Name = "MetricStreamA", CardinalityLimit = 10000 };
946+
}
947+
948+
return null;
949+
})
950+
.AddInMemoryExporter(exportedItems);
951+
});
938952

939-
var counter = meter.CreateCounter<long>("counter");
940-
counter.Add(100);
953+
var counter1 = meter.CreateCounter<long>("counter1");
954+
counter1.Add(100);
955+
956+
var counter2 = meter.CreateCounter<long>("counter2");
957+
counter2.Add(100);
958+
959+
var counter3 = meter.CreateCounter<long>("counter3");
960+
counter3.Add(100);
941961

942962
meterProvider.ForceFlush(MaxTimeToAllowForFlush);
943963

944-
var metric = exportedItems[0];
964+
Assert.Equal(3, exportedItems.Count);
945965

946-
Assert.Equal(10000, metric.AggregatorStore.CardinalityLimit);
966+
Assert.Equal(10000, exportedItems[1].AggregatorStore.CardinalityLimit);
967+
if (setDefault)
968+
{
969+
Assert.Equal(3, exportedItems[0].AggregatorStore.CardinalityLimit);
970+
Assert.Equal(3, exportedItems[2].AggregatorStore.CardinalityLimit);
971+
}
972+
else
973+
{
974+
Assert.Equal(2000, exportedItems[0].AggregatorStore.CardinalityLimit);
975+
Assert.Equal(2000, exportedItems[2].AggregatorStore.CardinalityLimit);
976+
}
947977
}
948978

949979
[Fact]

0 commit comments

Comments
 (0)