From 91601ce87bf4449cc40b593c3073135db593a3c0 Mon Sep 17 00:00:00 2001 From: Luong Tran Date: Sat, 16 Nov 2024 16:18:42 +0700 Subject: [PATCH 1/4] fix: AtomicI64, AtomicU64 for build mipsel processor --- Cargo.toml | 2 ++ opentelemetry-sdk/Cargo.toml | 1 + opentelemetry-sdk/src/metrics/internal/mod.rs | 13 +++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3f119360d1..488ab83e6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,3 +59,5 @@ url = { version = "2.5", default-features = false } opentelemetry = { path = "opentelemetry" } opentelemetry_sdk = { path = "opentelemetry-sdk" } opentelemetry-stdout = { path = "opentelemetry-stdout" } +url = { version = "2.5.2", default-features = false } #https://github.com/servo/rust-url/issues/992 +portable-atomic = "1.9.0" diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index 56491c6ac2..f8b6788d6e 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -28,6 +28,7 @@ tokio = { workspace = true, features = ["rt", "time"], optional = true } tokio-stream = { workspace = true, optional = true } http = { workspace = true, optional = true } tracing = {workspace = true, optional = true} +portable-atomic = {workspace = true} [package.metadata.docs.rs] all-features = true diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index 6316c97b23..6494cd4b74 100644 --- a/opentelemetry-sdk/src/metrics/internal/mod.rs +++ b/opentelemetry-sdk/src/metrics/internal/mod.rs @@ -16,6 +16,7 @@ use aggregate::{is_under_cardinality_limit, STREAM_CARDINALITY_LIMIT}; pub(crate) use aggregate::{AggregateBuilder, AggregateFns, ComputeAggregation, Measure}; pub(crate) use exponential_histogram::{EXPO_MAX_SCALE, EXPO_MIN_SCALE}; use opentelemetry::{otel_warn, KeyValue}; +use portable_atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; // TODO Replace it with LazyLock once it is stable pub(crate) static STREAM_OVERFLOW_ATTRIBUTES: OnceLock> = OnceLock::new(); @@ -439,8 +440,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); + atomic.add(15, Ordering::Relaxed); + atomic.add(10, Ordering::Relaxed); let value = atomic.get_value(); assert_eq!(value, 25); @@ -449,7 +450,7 @@ mod tests { #[test] fn can_reset_u64_atomic_value() { let atomic = u64::new_atomic_tracker(0); - atomic.add(15); + atomic.add(15, Ordering::Relaxed); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); @@ -478,8 +479,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); + atomic.add(15, Ordering::Relaxed); + atomic.add(-10, Ordering::Relaxed); let value = atomic.get_value(); assert_eq!(value, 5); @@ -488,7 +489,7 @@ mod tests { #[test] fn can_reset_i64_atomic_value() { let atomic = i64::new_atomic_tracker(0); - atomic.add(15); + atomic.add(15, Ordering::Relaxed); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); From 1d76c6d66c733000905f8e1e1f9645c5e9b0b96d Mon Sep 17 00:00:00 2001 From: Luong Tran Date: Sat, 16 Nov 2024 16:54:53 +0700 Subject: [PATCH 2/4] fix: use add function of mod.rs --- opentelemetry-sdk/src/metrics/internal/mod.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index 6494cd4b74..b0c3fa01f5 100644 --- a/opentelemetry-sdk/src/metrics/internal/mod.rs +++ b/opentelemetry-sdk/src/metrics/internal/mod.rs @@ -440,8 +440,8 @@ mod tests { #[test] fn can_add_and_get_u64_atomic_value() { let atomic = u64::new_atomic_tracker(0); - atomic.add(15, Ordering::Relaxed); - atomic.add(10, Ordering::Relaxed); + atomic.add(15); + atomic.add(10); let value = atomic.get_value(); assert_eq!(value, 25); @@ -450,7 +450,7 @@ mod tests { #[test] fn can_reset_u64_atomic_value() { let atomic = u64::new_atomic_tracker(0); - atomic.add(15, Ordering::Relaxed); + atomic.add(15); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); @@ -479,8 +479,8 @@ mod tests { #[test] fn can_add_and_get_i64_atomic_value() { let atomic = i64::new_atomic_tracker(0); - atomic.add(15, Ordering::Relaxed); - atomic.add(-10, Ordering::Relaxed); + atomic.add(15); + atomic.add(-10); let value = atomic.get_value(); assert_eq!(value, 5); @@ -489,7 +489,7 @@ mod tests { #[test] fn can_reset_i64_atomic_value() { let atomic = i64::new_atomic_tracker(0); - atomic.add(15, Ordering::Relaxed); + atomic.add(15); let value = atomic.get_and_reset_value(); let value2 = atomic.get_value(); From a04c8fb7d682ab05134f3ba91c6dc4564cb861b2 Mon Sep 17 00:00:00 2001 From: Luong Tran Date: Sat, 16 Nov 2024 17:52:10 +0700 Subject: [PATCH 3/4] fix: check arch to use atomic --- opentelemetry-sdk/Cargo.toml | 2 ++ opentelemetry-sdk/src/metrics/internal/mod.rs | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index f8b6788d6e..98bd622948 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -28,6 +28,8 @@ tokio = { workspace = true, features = ["rt", "time"], optional = true } tokio-stream = { workspace = true, optional = true } http = { workspace = true, optional = true } tracing = {workspace = true, optional = true} + +[target.'cfg(any(target_arch = "powerpc", target_arch = "mips"))'.dependencies] portable-atomic = {workspace = true} [package.metadata.docs.rs] diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index b0c3fa01f5..737d6eb4bb 100644 --- a/opentelemetry-sdk/src/metrics/internal/mod.rs +++ b/opentelemetry-sdk/src/metrics/internal/mod.rs @@ -16,10 +16,16 @@ use aggregate::{is_under_cardinality_limit, STREAM_CARDINALITY_LIMIT}; pub(crate) use aggregate::{AggregateBuilder, AggregateFns, ComputeAggregation, Measure}; pub(crate) use exponential_histogram::{EXPO_MAX_SCALE, EXPO_MIN_SCALE}; use opentelemetry::{otel_warn, KeyValue}; + +#[cfg(any(target_arch = "mips", target_arch = "powerpc"))] use portable_atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; // TODO Replace it with LazyLock once it is stable pub(crate) static STREAM_OVERFLOW_ATTRIBUTES: OnceLock> = OnceLock::new(); +#[cfg(not(any(target_arch = "mips", target_arch = "powerpc")))] +use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; + +use crate::metrics::AttributeSet; #[inline] fn stream_overflow_attributes() -> &'static Vec { @@ -440,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); @@ -450,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(); @@ -479,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); @@ -489,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(); From f00061257b2bcd7305d0f28db7dcfeb0aa0dfb73 Mon Sep 17 00:00:00 2001 From: Luong Tran Date: Thu, 6 Feb 2025 11:51:46 +0700 Subject: [PATCH 4/4] fix: rebase new version of opentelemetry --- Cargo.toml | 3 +-- opentelemetry-sdk/src/metrics/internal/mod.rs | 16 ++++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 488ab83e6d..d3559c790b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,11 +53,10 @@ tracing = { version = ">=0.1.40", default-features = false } tracing-core = { version = ">=0.1.33", default-features = false } tracing-subscriber = { version = "0.3", default-features = false } url = { version = "2.5", default-features = false } +portable-atomic = "1.9.0" # Aviod use of crates.io version of these crates through the tracing-opentelemetry dependencies [patch.crates-io] opentelemetry = { path = "opentelemetry" } opentelemetry_sdk = { path = "opentelemetry-sdk" } opentelemetry-stdout = { path = "opentelemetry-stdout" } -url = { version = "2.5.2", default-features = false } #https://github.com/servo/rust-url/issues/992 -portable-atomic = "1.9.0" diff --git a/opentelemetry-sdk/src/metrics/internal/mod.rs b/opentelemetry-sdk/src/metrics/internal/mod.rs index 737d6eb4bb..016ee22bba 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 = "mips", target_arch = "powerpc")))] +use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; + +#[cfg(any(target_arch = "mips", target_arch = "powerpc"))] +use portable_atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; + use std::sync::{Arc, OnceLock, RwLock}; use aggregate::{is_under_cardinality_limit, STREAM_CARDINALITY_LIMIT}; @@ -17,15 +24,8 @@ pub(crate) use aggregate::{AggregateBuilder, AggregateFns, ComputeAggregation, M pub(crate) use exponential_histogram::{EXPO_MAX_SCALE, EXPO_MIN_SCALE}; use opentelemetry::{otel_warn, KeyValue}; -#[cfg(any(target_arch = "mips", target_arch = "powerpc"))] -use portable_atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; - // TODO Replace it with LazyLock once it is stable pub(crate) static STREAM_OVERFLOW_ATTRIBUTES: OnceLock> = OnceLock::new(); -#[cfg(not(any(target_arch = "mips", target_arch = "powerpc")))] -use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, AtomicUsize}; - -use crate::metrics::AttributeSet; #[inline] fn stream_overflow_attributes() -> &'static Vec {