Skip to content

Commit 2bba6b0

Browse files
stormshield-fabscijothomasutpilla
authored
Use generics to dispatch updates in ValueMap (#2004)
Co-authored-by: Cijo Thomas <cijo.thomas@gmail.com> Co-authored-by: Cijo Thomas <cithomas@microsoft.com> Co-authored-by: Utkarsh Umesan Pillai <66651184+utpilla@users.noreply.github.com>
1 parent 6a16baf commit 2bba6b0

File tree

4 files changed

+190
-111
lines changed

4 files changed

+190
-111
lines changed

opentelemetry-sdk/CHANGELOG.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
The custom exporters and processors can't directly access the `LogData::LogRecord::attributes`, as
1717
these are private to opentelemetry-sdk. Instead, they would now use LogRecord::attributes_iter()
1818
method to access them.
19-
19+
- Fixed various Metric aggregation bug related to
20+
ObservableCounter,UpDownCounter including
21+
[#1517](https://github.com/open-telemetry/opentelemetry-rust/issues/1517).
22+
[#2004](https://github.com/open-telemetry/opentelemetry-rust/pull/2004)
2023

2124
## v0.24.1
2225

opentelemetry-sdk/src/metrics/internal/mod.rs

+14
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub(crate) use exponential_histogram::{EXPO_MAX_SCALE, EXPO_MIN_SCALE};
1515
/// Marks a type that can have a value added and retrieved atomically. Required since
1616
/// different types have different backing atomic mechanisms
1717
pub(crate) trait AtomicTracker<T>: Sync + Send + 'static {
18+
fn store(&self, value: T);
1819
fn add(&self, value: T);
1920
fn get_value(&self) -> T;
2021
fn get_and_reset_value(&self) -> T;
@@ -90,6 +91,10 @@ impl Number<f64> for f64 {
9091
}
9192

9293
impl AtomicTracker<u64> for AtomicU64 {
94+
fn store(&self, value: u64) {
95+
self.store(value, Ordering::Relaxed);
96+
}
97+
9398
fn add(&self, value: u64) {
9499
self.fetch_add(value, Ordering::Relaxed);
95100
}
@@ -112,6 +117,10 @@ impl AtomicallyUpdate<u64> for u64 {
112117
}
113118

114119
impl AtomicTracker<i64> for AtomicI64 {
120+
fn store(&self, value: i64) {
121+
self.store(value, Ordering::Relaxed);
122+
}
123+
115124
fn add(&self, value: i64) {
116125
self.fetch_add(value, Ordering::Relaxed);
117126
}
@@ -146,6 +155,11 @@ impl F64AtomicTracker {
146155
}
147156

148157
impl AtomicTracker<f64> for F64AtomicTracker {
158+
fn store(&self, value: f64) {
159+
let mut guard = self.inner.lock().expect("F64 mutex was poisoned");
160+
*guard = value;
161+
}
162+
149163
fn add(&self, value: f64) {
150164
let mut guard = self.inner.lock().expect("F64 mutex was poisoned");
151165
*guard += value;

0 commit comments

Comments
 (0)