From d6894e456fbdc200e2f14d170830fd552ddaea1c Mon Sep 17 00:00:00 2001 From: brunobrolesi Date: Sat, 8 Mar 2025 20:19:25 -0300 Subject: [PATCH] feat: use portable-atomic to enable using opentelemetry-sdk for xtensa arch --- opentelemetry-sdk/Cargo.toml | 3 +++ opentelemetry-sdk/src/metrics/internal/mod.rs | 27 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index ab7c13ba19..908aa3d422 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -28,6 +28,9 @@ tokio-stream = { workspace = true, optional = true } http = { workspace = true, optional = true } tracing = {workspace = true, optional = true} +[target.'cfg(any(target_arch = "xtensa"))'.dependencies] +portable-atomic = {workspace = true} + [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index 6316c97b23..b30f1bd0c2 100644 --- a/opentelemetry-sdk/src/metrics/internal/mod.rs +++ b/opentelemetry-sdk/src/metrics/internal/mod.rs @@ -9,7 +9,14 @@ use core::fmt; use std::collections::{HashMap, HashSet}; use std::mem::swap; use std::ops::{Add, AddAssign, DerefMut, Sub}; -use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize, Ordering}; +use std::sync::atomic::{Ordering}; + +#[cfg(not(any(target_arch = "xtensa")))] +use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; + +#[cfg(any(target_arch = "xtensa"))] +use portable_atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; + use std::sync::{Arc, OnceLock, RwLock}; use aggregate::{is_under_cardinality_limit, STREAM_CARDINALITY_LIMIT}; @@ -439,8 +446,8 @@ mod tests { #[test] fn can_add_and_get_u64_atomic_value() { let atomic = u64::new_atomic_tracker(0); - atomic.add(15); - atomic.add(10); + AtomicTracker::add(&atomic,15); + AtomicTracker::add(&atomic,10); let value = atomic.get_value(); assert_eq!(value, 25); @@ -449,7 +456,7 @@ mod tests { #[test] fn can_reset_u64_atomic_value() { let atomic = u64::new_atomic_tracker(0); - atomic.add(15); + AtomicTracker::add(&atomic,15); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); @@ -478,8 +485,8 @@ mod tests { #[test] fn can_add_and_get_i64_atomic_value() { let atomic = i64::new_atomic_tracker(0); - atomic.add(15); - atomic.add(-10); + AtomicTracker::add(&atomic,15); + AtomicTracker::add(&atomic,-10); let value = atomic.get_value(); assert_eq!(value, 5); @@ -488,7 +495,7 @@ mod tests { #[test] fn can_reset_i64_atomic_value() { let atomic = i64::new_atomic_tracker(0); - atomic.add(15); + AtomicTracker::add(&atomic,15); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); @@ -517,8 +524,8 @@ mod tests { #[test] fn can_add_and_get_f64_atomic_value() { let atomic = f64::new_atomic_tracker(0.0); - atomic.add(15.3); - atomic.add(10.4); + AtomicTracker::add(&atomic,15.3); + AtomicTracker::add(&atomic,10.4); let value = atomic.get_value(); @@ -528,7 +535,7 @@ mod tests { #[test] fn can_reset_f64_atomic_value() { let atomic = f64::new_atomic_tracker(0.0); - atomic.add(15.5); + AtomicTracker::add(&atomic,15.5); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value();