From 0ff1d224122c2fd494826a15d72384a565126cce Mon Sep 17 00:00:00 2001 From: Alan West <3676547+alanwest@users.noreply.github.com> Date: Thu, 3 Mar 2022 19:08:39 -0800 Subject: [PATCH] Clear InstrumentIdenity map when meter is disposed --- src/OpenTelemetry/Metrics/MetricReaderExt.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/OpenTelemetry/Metrics/MetricReaderExt.cs b/src/OpenTelemetry/Metrics/MetricReaderExt.cs index c9c2cbe9885..d2182db6466 100644 --- a/src/OpenTelemetry/Metrics/MetricReaderExt.cs +++ b/src/OpenTelemetry/Metrics/MetricReaderExt.cs @@ -15,6 +15,7 @@ // using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics.Metrics; using OpenTelemetry.Internal; @@ -27,7 +28,7 @@ namespace OpenTelemetry.Metrics public abstract partial class MetricReader { private readonly HashSet metricStreamNames = new HashSet(StringComparer.OrdinalIgnoreCase); - private readonly Dictionary instrumentIdentityToMetric = new Dictionary(); + private readonly ConcurrentDictionary instrumentIdentityToMetric = new ConcurrentDictionary(); private readonly object instrumentCreationLock = new object(); private int maxMetricStreams; private int maxMetricPointsPerMetricStream; @@ -231,6 +232,7 @@ private Batch GetMetricsBatch() if (metric.InstrumentDisposed) { metricPointSize = metric.Snapshot(); + this.instrumentIdentityToMetric.TryRemove(metric.InstrumentIdentity, out var _); this.metrics[i] = null; } else