From f6fb7a6d53146e8ac493747c4bc4c9a7f83c8968 Mon Sep 17 00:00:00 2001 From: Julian Tescher Date: Thu, 9 Nov 2023 18:24:28 -0500 Subject: [PATCH] Fix metric export data for unused gauges (#1363) --- opentelemetry-sdk/CHANGELOG.md | 4 ++++ opentelemetry-sdk/src/metrics/internal/last_value.rs | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 2e3efa34e3..efdbe4a960 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,10 @@ ## vNext +### Fixed + +- Fix metric export corruption if gauges have not received a last value. (#1363) + ## v0.21.0 ### Added diff --git a/opentelemetry-sdk/src/metrics/internal/last_value.rs b/opentelemetry-sdk/src/metrics/internal/last_value.rs index 28e9a0a107..57f35fc166 100644 --- a/opentelemetry-sdk/src/metrics/internal/last_value.rs +++ b/opentelemetry-sdk/src/metrics/internal/last_value.rs @@ -55,8 +55,12 @@ impl> LastValue { pub(crate) fn compute_aggregation(&self, dest: &mut Vec>) { let mut values = match self.values.lock() { Ok(guard) if !guard.is_empty() => guard, - _ => return, + _ => { + dest.clear(); // poisoned or no values recorded yet + return; + } }; + let n = values.len(); if n > dest.capacity() { dest.reserve(n - dest.capacity());