From cd478d036a9b3db862fa345c210fc769ea826632 Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Mon, 7 Apr 2025 21:09:35 +0200 Subject: [PATCH 1/8] add shutdown with timeout for log exporter --- opentelemetry-otlp/src/exporter/http/logs.rs | 7 ++++++- opentelemetry-otlp/src/exporter/tonic/logs.rs | 3 ++- opentelemetry-otlp/src/logs.rs | 6 +++--- opentelemetry-sdk/CHANGELOG.md | 3 ++- opentelemetry-sdk/benches/log_enabled.rs | 3 ++- opentelemetry-sdk/src/logs/export.rs | 6 ++++-- opentelemetry-sdk/src/logs/in_memory_exporter.rs | 7 ++++++- opentelemetry-sdk/src/logs/log_processor.rs | 3 ++- .../src/logs/log_processor_with_async_runtime.rs | 7 ++++++- opentelemetry-sdk/src/logs/logger_provider.rs | 4 ++-- opentelemetry-sdk/src/logs/simple_log_processor.rs | 6 +++++- opentelemetry-stdout/src/logs/exporter.rs | 3 ++- stress/src/logs.rs | 3 ++- 13 files changed, 44 insertions(+), 17 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/logs.rs b/opentelemetry-otlp/src/exporter/http/logs.rs index 8515796ee2..d8a5b4895c 100644 --- a/opentelemetry-otlp/src/exporter/http/logs.rs +++ b/opentelemetry-otlp/src/exporter/http/logs.rs @@ -3,6 +3,7 @@ use http::{header::CONTENT_TYPE, Method}; use opentelemetry::otel_debug; use opentelemetry_sdk::error::{OTelSdkError, OTelSdkResult}; use opentelemetry_sdk::logs::{LogBatch, LogExporter}; +use std::time; impl LogExporter for OtlpHttpClient { async fn export(&self, batch: LogBatch<'_>) -> OTelSdkResult { @@ -46,7 +47,7 @@ impl LogExporter for OtlpHttpClient { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { let mut client_guard = self.client.lock().map_err(|e| { OTelSdkError::InternalFailure(format!("Failed to acquire client lock: {}", e)) })?; @@ -58,6 +59,10 @@ impl LogExporter for OtlpHttpClient { Ok(()) } + fn shutdown(&self) -> OTelSdkResult { + self.shutdown_with_timeout(time::Duration::from_secs(5)) + } + fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) { self.resource = resource.into(); } diff --git a/opentelemetry-otlp/src/exporter/tonic/logs.rs b/opentelemetry-otlp/src/exporter/tonic/logs.rs index cbcf5284b3..26765ef07a 100644 --- a/opentelemetry-otlp/src/exporter/tonic/logs.rs +++ b/opentelemetry-otlp/src/exporter/tonic/logs.rs @@ -5,6 +5,7 @@ use opentelemetry_proto::tonic::collector::logs::v1::{ }; use opentelemetry_sdk::error::{OTelSdkError, OTelSdkResult}; use opentelemetry_sdk::logs::{LogBatch, LogExporter}; +use std::time; use tokio::sync::Mutex; use tonic::{codegen::CompressionEncoding, service::Interceptor, transport::Channel, Request}; @@ -84,7 +85,7 @@ impl LogExporter for TonicLogsClient { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { // TODO: Implement actual shutdown // Due to the use of tokio::sync::Mutex to guard // the inner client, we need to await the call to lock the mutex diff --git a/opentelemetry-otlp/src/logs.rs b/opentelemetry-otlp/src/logs.rs index 7a8e66f6f8..bae7504331 100644 --- a/opentelemetry-otlp/src/logs.rs +++ b/opentelemetry-otlp/src/logs.rs @@ -4,9 +4,9 @@ #[cfg(feature = "grpc-tonic")] use opentelemetry::otel_debug; -use std::fmt::Debug; - use opentelemetry_sdk::{error::OTelSdkResult, logs::LogBatch}; +use std::fmt::Debug; +use std::time; use crate::{ExporterBuildError, HasExportConfig, NoExporterBuilderSet}; @@ -157,7 +157,7 @@ impl opentelemetry_sdk::logs::LogExporter for LogExporter { } } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { match &self.client { #[cfg(feature = "grpc-tonic")] SupportedTransportClient::Tonic(client) => client.shutdown(), diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index 5948747d44..b31db88076 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -24,7 +24,8 @@ also modified to suppress telemetry before invoking exporters. - *Breaking* change for custom `MetricReader` authors. The `shutdown_with_timeout` method is added to `MetricReader` trait. `collect` method on `MetricReader` modified to return `OTelSdkResult`. - +- *Breaking* The `shutdown_with_timeout` method is added to LogExporter trait. This is breaking change for custom `LogExporter` authors. +- ## 0.29.0 Released 2025-Mar-21 diff --git a/opentelemetry-sdk/benches/log_enabled.rs b/opentelemetry-sdk/benches/log_enabled.rs index c5298cf928..d20bd26d56 100644 --- a/opentelemetry-sdk/benches/log_enabled.rs +++ b/opentelemetry-sdk/benches/log_enabled.rs @@ -21,6 +21,7 @@ use opentelemetry_sdk::logs::{ use opentelemetry_sdk::Resource; #[cfg(not(target_os = "windows"))] use pprof::criterion::{Output, PProfProfiler}; +use std::time; #[derive(Debug)] struct NoopExporter; @@ -29,7 +30,7 @@ impl LogExporter for NoopExporter { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } diff --git a/opentelemetry-sdk/src/logs/export.rs b/opentelemetry-sdk/src/logs/export.rs index 5ef91c77c8..bddff17149 100644 --- a/opentelemetry-sdk/src/logs/export.rs +++ b/opentelemetry-sdk/src/logs/export.rs @@ -6,6 +6,7 @@ use crate::Resource; use opentelemetry::logs::Severity; use opentelemetry::InstrumentationScope; use std::fmt::Debug; +use std::time; /// A batch of log records to be exported by a `LogExporter`. /// @@ -134,10 +135,11 @@ pub trait LogExporter: Send + Sync + Debug { &self, batch: LogBatch<'_>, ) -> impl std::future::Future + Send; - /// Shuts down the exporter. + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult; + /// Shuts down the exporter with a default timeout. fn shutdown(&self) -> OTelSdkResult { - Ok(()) + self.shutdown_with_timeout(time::Duration::from_secs(5)) } #[cfg(feature = "spec_unstable_logs_enabled")] /// Check if logs are enabled. diff --git a/opentelemetry-sdk/src/logs/in_memory_exporter.rs b/opentelemetry-sdk/src/logs/in_memory_exporter.rs index 63737997a9..5bdec94be9 100644 --- a/opentelemetry-sdk/src/logs/in_memory_exporter.rs +++ b/opentelemetry-sdk/src/logs/in_memory_exporter.rs @@ -7,6 +7,7 @@ use opentelemetry::InstrumentationScope; use std::borrow::Cow; use std::sync::atomic::AtomicBool; use std::sync::{Arc, Mutex}; +use std::time; /// An in-memory logs exporter that stores logs data in memory.. /// @@ -205,7 +206,7 @@ impl LogExporter for InMemoryLogExporter { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { self.shutdown_called .store(true, std::sync::atomic::Ordering::Relaxed); if self.should_reset_on_shutdown { @@ -214,6 +215,10 @@ impl LogExporter for InMemoryLogExporter { Ok(()) } + fn shutdown(&self) -> OTelSdkResult { + self.shutdown_with_timeout(time::Duration::from_secs(5)) + } + fn set_resource(&mut self, resource: &Resource) { let mut res_guard = self.resource.lock().expect("Resource lock poisoned"); *res_guard = resource.clone(); diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 3463c8be59..5dc57a1ad5 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -81,6 +81,7 @@ pub(crate) mod tests { use opentelemetry::logs::{Logger, LoggerProvider}; use opentelemetry::{InstrumentationScope, Key}; use std::sync::{Arc, Mutex}; + use std::time; #[derive(Debug, Clone)] pub(crate) struct MockLogExporter { @@ -92,7 +93,7 @@ pub(crate) mod tests { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } diff --git a/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs b/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs index 961fa99f9f..1976a0f454 100644 --- a/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs +++ b/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs @@ -309,6 +309,7 @@ mod tests { use opentelemetry::KeyValue; use opentelemetry::{InstrumentationScope, Key}; use std::sync::{Arc, Mutex}; + use std::time; use std::time::Duration; #[derive(Debug, Clone)] @@ -321,10 +322,14 @@ mod tests { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } + fn shutdown(&self) -> OTelSdkResult { + self.shutdown_with_timeout(time::Duration::from_secs(5)) + } + fn set_resource(&mut self, resource: &Resource) { self.resource .lock() diff --git a/opentelemetry-sdk/src/logs/logger_provider.rs b/opentelemetry-sdk/src/logs/logger_provider.rs index f70a4edb41..254f7378cf 100644 --- a/opentelemetry-sdk/src/logs/logger_provider.rs +++ b/opentelemetry-sdk/src/logs/logger_provider.rs @@ -291,7 +291,7 @@ mod tests { use std::fmt::{Debug, Formatter}; use std::sync::atomic::AtomicU64; use std::sync::Mutex; - use std::thread; + use std::{thread, time}; struct ShutdownTestLogProcessor { is_shutdown: Arc>, @@ -364,7 +364,7 @@ mod tests { *res = resource.clone(); } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } } diff --git a/opentelemetry-sdk/src/logs/simple_log_processor.rs b/opentelemetry-sdk/src/logs/simple_log_processor.rs index 5cbda696fc..c8df8b06fd 100644 --- a/opentelemetry-sdk/src/logs/simple_log_processor.rs +++ b/opentelemetry-sdk/src/logs/simple_log_processor.rs @@ -164,6 +164,7 @@ mod tests { use opentelemetry::KeyValue; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex}; + use std::time; use std::time::Duration; #[derive(Debug, Clone)] @@ -195,6 +196,9 @@ mod tests { } Ok(()) } + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { + Ok(()) + } } #[test] @@ -460,7 +464,7 @@ mod tests { } impl LogExporter for ReentrantLogExporter { - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } diff --git a/opentelemetry-stdout/src/logs/exporter.rs b/opentelemetry-stdout/src/logs/exporter.rs index c7a8397a30..eacd986447 100644 --- a/opentelemetry-stdout/src/logs/exporter.rs +++ b/opentelemetry-stdout/src/logs/exporter.rs @@ -5,6 +5,7 @@ use opentelemetry_sdk::logs::LogBatch; use opentelemetry_sdk::Resource; use std::sync::atomic; use std::sync::atomic::Ordering; +use std::time; /// An OpenTelemetry exporter that writes Logs to stdout on export. pub struct LogExporter { @@ -57,7 +58,7 @@ impl opentelemetry_sdk::logs::LogExporter for LogExporter { } } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { self.is_shutdown.store(true, atomic::Ordering::SeqCst); Ok(()) } diff --git a/stress/src/logs.rs b/stress/src/logs.rs index 8df5cb3ce4..88ec1ee5af 100644 --- a/stress/src/logs.rs +++ b/stress/src/logs.rs @@ -24,6 +24,7 @@ use opentelemetry_sdk::logs::concurrent_log_processor::SimpleConcurrentLogProces use opentelemetry_sdk::logs::SdkLoggerProvider; use opentelemetry_sdk::logs::{LogBatch, LogExporter}; use opentelemetry_sdk::Resource; +use std::time; use tracing::error; use tracing_subscriber::prelude::*; @@ -52,7 +53,7 @@ impl LogExporter for NoopExporter { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { Ok(()) } From 45cfe3fcc105c5eebc57e2bd69f60f39b3f1581d Mon Sep 17 00:00:00 2001 From: Mohammad Vatandoost Date: Mon, 14 Apr 2025 19:29:51 +0200 Subject: [PATCH 2/8] Update CHANGELOG.md --- opentelemetry-sdk/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index d069221fb6..c0847444d1 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -26,7 +26,6 @@ also modified to suppress telemetry before invoking exporters. instead of the string `"true"`. [#2878](https://github.com/open-telemetry/opentelemetry-rust/issues/2878) - *Breaking* The `shutdown_with_timeout` method is added to LogExporter trait. This is breaking change for custom `LogExporter` authors. -- [#2905](https://github.com/open-telemetry/opentelemetry-rust/pull/2905) - *Breaking* `MetricError`, `MetricResult` no longer public (except when `spec_unstable_metrics_views` feature flag is enabled). `OTelSdkResult` should be used instead, wherever applicable. [#2906](https://github.com/open-telemetry/opentelemetry-rust/pull/2906) From d776d6cb316bb0b80ad78a549367024384a8bd35 Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Wed, 16 Apr 2025 17:35:43 +0200 Subject: [PATCH 3/8] add default implementation for shutdown_with_timeout in logexporter trait --- opentelemetry-appender-log/Cargo.toml | 10 ---------- opentelemetry-appender-tracing/Cargo.toml | 13 ------------- opentelemetry-jaeger-propagator/Cargo.toml | 3 --- opentelemetry-otlp/Cargo.toml | 9 --------- opentelemetry-proto/Cargo.toml | 7 ------- opentelemetry-sdk/CHANGELOG.md | 2 +- opentelemetry-sdk/Cargo.toml | 8 -------- opentelemetry-sdk/src/logs/export.rs | 4 +++- opentelemetry-sdk/src/logs/in_memory_exporter.rs | 4 ---- opentelemetry-semantic-conventions/Cargo.toml | 4 ---- opentelemetry-stdout/Cargo.toml | 9 --------- opentelemetry-zipkin/Cargo.toml | 9 --------- opentelemetry/Cargo.toml | 7 ------- 13 files changed, 4 insertions(+), 85 deletions(-) diff --git a/opentelemetry-appender-log/Cargo.toml b/opentelemetry-appender-log/Cargo.toml index e9df4e8e31..35d8e0ec3d 100644 --- a/opentelemetry-appender-log/Cargo.toml +++ b/opentelemetry-appender-log/Cargo.toml @@ -29,15 +29,5 @@ spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] with-serde = ["log/kv_serde", "serde"] experimental_metadata_attributes = ["dep:opentelemetry-semantic-conventions"] -[dev-dependencies] -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = [ - "testing", - "spec_unstable_logs_enabled", -] } -opentelemetry-stdout = { workspace = true, features = ["logs"] } -log = { workspace = true, features = ["kv_serde"] } -tokio = { workspace = true } -serde = { workspace = true, features = ["std", "derive"] } - [lints] workspace = true diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index 43346bfe06..7d9621f4c6 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -20,19 +20,6 @@ tracing-log = { workspace = true, optional = true } tracing-subscriber = { workspace = true, features = ["registry", "std"] } tracing-opentelemetry = { workspace = true, optional = true } -[dev-dependencies] -log = { workspace = true } -opentelemetry-stdout = { workspace = true, features = ["logs"] } -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["logs", "testing"] } -tracing = { workspace = true, features = ["std"]} -tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] } -tracing-log = { workspace = true } -criterion = { workspace = true } -tokio = { workspace = true, features = ["full"]} - -[target.'cfg(not(target_os = "windows"))'.dev-dependencies] -pprof = { version = "0.14", features = ["flamegraph", "criterion"] } - [features] default = [] experimental_metadata_attributes = ["dep:tracing-log"] diff --git a/opentelemetry-jaeger-propagator/Cargo.toml b/opentelemetry-jaeger-propagator/Cargo.toml index 0d15822ead..6d84f6ef39 100644 --- a/opentelemetry-jaeger-propagator/Cargo.toml +++ b/opentelemetry-jaeger-propagator/Cargo.toml @@ -25,9 +25,6 @@ opentelemetry = { version = "0.29", default-features = false, features = [ "trace", ], path = "../opentelemetry" } -[dev-dependencies] -opentelemetry = { features = ["testing"], path = "../opentelemetry" } - [features] default = ["internal-logs"] internal-logs = ["opentelemetry/internal-logs"] diff --git a/opentelemetry-otlp/Cargo.toml b/opentelemetry-otlp/Cargo.toml index 4b9be0c4e6..d67be6fb04 100644 --- a/opentelemetry-otlp/Cargo.toml +++ b/opentelemetry-otlp/Cargo.toml @@ -43,15 +43,6 @@ serde = { workspace = true, features = ["derive"], optional = true } thiserror = { workspace = true } serde_json = { workspace = true, optional = true } -[dev-dependencies] -tokio-stream = { workspace = true, features = ["net"] } -# need tokio runtime to run smoke tests. -opentelemetry_sdk = { features = ["trace", "rt-tokio", "testing"], path = "../opentelemetry-sdk" } -tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } -futures-util = { workspace = true } -temp-env = { workspace = true } -tonic = { workspace = true, features = ["router", "server"] } - [features] # telemetry pillars and functions trace = ["opentelemetry/trace", "opentelemetry_sdk/trace", "opentelemetry-proto/trace"] diff --git a/opentelemetry-proto/Cargo.toml b/opentelemetry-proto/Cargo.toml index d4ee2ffc74..0621c73435 100644 --- a/opentelemetry-proto/Cargo.toml +++ b/opentelemetry-proto/Cargo.toml @@ -60,12 +60,5 @@ serde = { workspace = true, optional = true, features = ["serde_derive"] } hex = { workspace = true, optional = true } base64 = { workspace = true, optional = true } -[dev-dependencies] -opentelemetry = { features = ["testing"], path = "../opentelemetry" } -tonic-build = { workspace = true } -prost-build = { workspace = true } -tempfile = { workspace = true } -serde_json = { workspace = true } - [lints] workspace = true diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index c0847444d1..128cbc8c8f 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -25,7 +25,7 @@ also modified to suppress telemetry before invoking exporters. - Fixed the overflow attribute to correctly use the boolean value `true` instead of the string `"true"`. [#2878](https://github.com/open-telemetry/opentelemetry-rust/issues/2878) -- *Breaking* The `shutdown_with_timeout` method is added to LogExporter trait. This is breaking change for custom `LogExporter` authors. +- The `shutdown_with_timeout` method is added to LogExporter trait. - *Breaking* `MetricError`, `MetricResult` no longer public (except when `spec_unstable_metrics_views` feature flag is enabled). `OTelSdkResult` should be used instead, wherever applicable. [#2906](https://github.com/open-telemetry/opentelemetry-rust/pull/2906) diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index 171296e3ef..e51573e02c 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -31,14 +31,6 @@ http = { workspace = true, optional = true } all-features = true rustdoc-args = ["--cfg", "docsrs"] -[dev-dependencies] -criterion = { workspace = true, features = ["html_reports"] } -rstest = { workspace = true } -temp-env = { workspace = true } - -[target.'cfg(not(target_os = "windows"))'.dev-dependencies] -pprof = { version = "0.14", features = ["flamegraph", "criterion"] } - [features] default = ["trace", "metrics", "logs", "internal-logs"] trace = ["opentelemetry/trace", "rand", "percent-encoding"] diff --git a/opentelemetry-sdk/src/logs/export.rs b/opentelemetry-sdk/src/logs/export.rs index bddff17149..af0653d50c 100644 --- a/opentelemetry-sdk/src/logs/export.rs +++ b/opentelemetry-sdk/src/logs/export.rs @@ -136,7 +136,9 @@ pub trait LogExporter: Send + Sync + Debug { batch: LogBatch<'_>, ) -> impl std::future::Future + Send; /// Shuts down the exporter. - fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult; + fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { + Ok(()) + } /// Shuts down the exporter with a default timeout. fn shutdown(&self) -> OTelSdkResult { self.shutdown_with_timeout(time::Duration::from_secs(5)) diff --git a/opentelemetry-sdk/src/logs/in_memory_exporter.rs b/opentelemetry-sdk/src/logs/in_memory_exporter.rs index 5bdec94be9..fe988e26b0 100644 --- a/opentelemetry-sdk/src/logs/in_memory_exporter.rs +++ b/opentelemetry-sdk/src/logs/in_memory_exporter.rs @@ -215,10 +215,6 @@ impl LogExporter for InMemoryLogExporter { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { - self.shutdown_with_timeout(time::Duration::from_secs(5)) - } - fn set_resource(&mut self, resource: &Resource) { let mut res_guard = self.resource.lock().expect("Resource lock poisoned"); *res_guard = resource.clone(); diff --git a/opentelemetry-semantic-conventions/Cargo.toml b/opentelemetry-semantic-conventions/Cargo.toml index d531708b5c..076960194c 100644 --- a/opentelemetry-semantic-conventions/Cargo.toml +++ b/opentelemetry-semantic-conventions/Cargo.toml @@ -24,10 +24,6 @@ rustdoc-args = ["--cfg", "docsrs"] default = [] semconv_experimental = [] -[dev-dependencies] -opentelemetry = { default-features = false, path = "../opentelemetry" } # for doctests -opentelemetry_sdk = { features = ["trace"], path = "../opentelemetry-sdk" } # for doctests - [lints] workspace = true diff --git a/opentelemetry-stdout/Cargo.toml b/opentelemetry-stdout/Cargo.toml index 8aac5a2730..afe248e754 100644 --- a/opentelemetry-stdout/Cargo.toml +++ b/opentelemetry-stdout/Cargo.toml @@ -31,15 +31,6 @@ chrono = { workspace = true, features = ["now"] } opentelemetry = { version = "0.29", path = "../opentelemetry" } opentelemetry_sdk = { version = "0.29", path = "../opentelemetry-sdk" } -[dev-dependencies] -opentelemetry = { path = "../opentelemetry", features = ["metrics"] } -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["rt-tokio", "metrics"] } -opentelemetry-appender-tracing = { workspace = true } -tracing = { workspace = true, features = ["std"]} -tracing-subscriber = { workspace = true, features = ["registry", "std"] } -tokio = { workspace = true, features = ["full"] } -once_cell = { workspace = true } - [lints] workspace = true diff --git a/opentelemetry-zipkin/Cargo.toml b/opentelemetry-zipkin/Cargo.toml index ebd988e784..a96a5b5468 100644 --- a/opentelemetry-zipkin/Cargo.toml +++ b/opentelemetry-zipkin/Cargo.toml @@ -38,15 +38,6 @@ http = { workspace = true } reqwest = { workspace = true, optional = true } thiserror = { workspace = true } -[dev-dependencies] -async-trait = { workspace = true } -bytes = { workspace = true } -futures-util = { workspace = true, features = ["io"] } -http-body-util = { workspace = true } -hyper-util = { workspace = true, features = ["client-legacy", "http1", "tokio"] } -opentelemetry_sdk = { default-features = false, features = ["trace", "testing"], path = "../opentelemetry-sdk" } -temp-env = { workspace = true } - [lints] workspace = true diff --git a/opentelemetry/Cargo.toml b/opentelemetry/Cargo.toml index eb874d42da..254825e20a 100644 --- a/opentelemetry/Cargo.toml +++ b/opentelemetry/Cargo.toml @@ -41,13 +41,6 @@ logs = [] spec_unstable_logs_enabled = ["logs"] internal-logs = ["tracing"] -[dev-dependencies] -opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["spec_unstable_logs_enabled"]} # for documentation tests -criterion = { workspace = true } -rand = { workspace = true, features = ["os_rng", "thread_rng"] } -tokio = { version = "1.0", features = ["full"] } -futures = "0.3" - [[bench]] name = "metrics" harness = false From 690c830af83223ec46809aac1463c7bb1e058b50 Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Wed, 16 Apr 2025 17:39:10 +0200 Subject: [PATCH 4/8] merge with master --- opentelemetry-appender-log/Cargo.toml | 10 ++++++++++ opentelemetry-appender-tracing/Cargo.toml | 13 +++++++++++++ opentelemetry-jaeger-propagator/Cargo.toml | 3 +++ opentelemetry-otlp/Cargo.toml | 9 +++++++++ opentelemetry-proto/Cargo.toml | 7 +++++++ opentelemetry-sdk/Cargo.toml | 8 ++++++++ opentelemetry-semantic-conventions/Cargo.toml | 4 ++++ opentelemetry-stdout/Cargo.toml | 9 +++++++++ opentelemetry-zipkin/Cargo.toml | 9 +++++++++ opentelemetry/Cargo.toml | 7 +++++++ 10 files changed, 79 insertions(+) diff --git a/opentelemetry-appender-log/Cargo.toml b/opentelemetry-appender-log/Cargo.toml index 35d8e0ec3d..e9df4e8e31 100644 --- a/opentelemetry-appender-log/Cargo.toml +++ b/opentelemetry-appender-log/Cargo.toml @@ -29,5 +29,15 @@ spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled"] with-serde = ["log/kv_serde", "serde"] experimental_metadata_attributes = ["dep:opentelemetry-semantic-conventions"] +[dev-dependencies] +opentelemetry_sdk = { path = "../opentelemetry-sdk", features = [ + "testing", + "spec_unstable_logs_enabled", +] } +opentelemetry-stdout = { workspace = true, features = ["logs"] } +log = { workspace = true, features = ["kv_serde"] } +tokio = { workspace = true } +serde = { workspace = true, features = ["std", "derive"] } + [lints] workspace = true diff --git a/opentelemetry-appender-tracing/Cargo.toml b/opentelemetry-appender-tracing/Cargo.toml index 7d9621f4c6..43346bfe06 100644 --- a/opentelemetry-appender-tracing/Cargo.toml +++ b/opentelemetry-appender-tracing/Cargo.toml @@ -20,6 +20,19 @@ tracing-log = { workspace = true, optional = true } tracing-subscriber = { workspace = true, features = ["registry", "std"] } tracing-opentelemetry = { workspace = true, optional = true } +[dev-dependencies] +log = { workspace = true } +opentelemetry-stdout = { workspace = true, features = ["logs"] } +opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["logs", "testing"] } +tracing = { workspace = true, features = ["std"]} +tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] } +tracing-log = { workspace = true } +criterion = { workspace = true } +tokio = { workspace = true, features = ["full"]} + +[target.'cfg(not(target_os = "windows"))'.dev-dependencies] +pprof = { version = "0.14", features = ["flamegraph", "criterion"] } + [features] default = [] experimental_metadata_attributes = ["dep:tracing-log"] diff --git a/opentelemetry-jaeger-propagator/Cargo.toml b/opentelemetry-jaeger-propagator/Cargo.toml index 6d84f6ef39..0d15822ead 100644 --- a/opentelemetry-jaeger-propagator/Cargo.toml +++ b/opentelemetry-jaeger-propagator/Cargo.toml @@ -25,6 +25,9 @@ opentelemetry = { version = "0.29", default-features = false, features = [ "trace", ], path = "../opentelemetry" } +[dev-dependencies] +opentelemetry = { features = ["testing"], path = "../opentelemetry" } + [features] default = ["internal-logs"] internal-logs = ["opentelemetry/internal-logs"] diff --git a/opentelemetry-otlp/Cargo.toml b/opentelemetry-otlp/Cargo.toml index d67be6fb04..4b9be0c4e6 100644 --- a/opentelemetry-otlp/Cargo.toml +++ b/opentelemetry-otlp/Cargo.toml @@ -43,6 +43,15 @@ serde = { workspace = true, features = ["derive"], optional = true } thiserror = { workspace = true } serde_json = { workspace = true, optional = true } +[dev-dependencies] +tokio-stream = { workspace = true, features = ["net"] } +# need tokio runtime to run smoke tests. +opentelemetry_sdk = { features = ["trace", "rt-tokio", "testing"], path = "../opentelemetry-sdk" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } +futures-util = { workspace = true } +temp-env = { workspace = true } +tonic = { workspace = true, features = ["router", "server"] } + [features] # telemetry pillars and functions trace = ["opentelemetry/trace", "opentelemetry_sdk/trace", "opentelemetry-proto/trace"] diff --git a/opentelemetry-proto/Cargo.toml b/opentelemetry-proto/Cargo.toml index 0621c73435..d4ee2ffc74 100644 --- a/opentelemetry-proto/Cargo.toml +++ b/opentelemetry-proto/Cargo.toml @@ -60,5 +60,12 @@ serde = { workspace = true, optional = true, features = ["serde_derive"] } hex = { workspace = true, optional = true } base64 = { workspace = true, optional = true } +[dev-dependencies] +opentelemetry = { features = ["testing"], path = "../opentelemetry" } +tonic-build = { workspace = true } +prost-build = { workspace = true } +tempfile = { workspace = true } +serde_json = { workspace = true } + [lints] workspace = true diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index e51573e02c..171296e3ef 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -31,6 +31,14 @@ http = { workspace = true, optional = true } all-features = true rustdoc-args = ["--cfg", "docsrs"] +[dev-dependencies] +criterion = { workspace = true, features = ["html_reports"] } +rstest = { workspace = true } +temp-env = { workspace = true } + +[target.'cfg(not(target_os = "windows"))'.dev-dependencies] +pprof = { version = "0.14", features = ["flamegraph", "criterion"] } + [features] default = ["trace", "metrics", "logs", "internal-logs"] trace = ["opentelemetry/trace", "rand", "percent-encoding"] diff --git a/opentelemetry-semantic-conventions/Cargo.toml b/opentelemetry-semantic-conventions/Cargo.toml index 076960194c..d531708b5c 100644 --- a/opentelemetry-semantic-conventions/Cargo.toml +++ b/opentelemetry-semantic-conventions/Cargo.toml @@ -24,6 +24,10 @@ rustdoc-args = ["--cfg", "docsrs"] default = [] semconv_experimental = [] +[dev-dependencies] +opentelemetry = { default-features = false, path = "../opentelemetry" } # for doctests +opentelemetry_sdk = { features = ["trace"], path = "../opentelemetry-sdk" } # for doctests + [lints] workspace = true diff --git a/opentelemetry-stdout/Cargo.toml b/opentelemetry-stdout/Cargo.toml index afe248e754..8aac5a2730 100644 --- a/opentelemetry-stdout/Cargo.toml +++ b/opentelemetry-stdout/Cargo.toml @@ -31,6 +31,15 @@ chrono = { workspace = true, features = ["now"] } opentelemetry = { version = "0.29", path = "../opentelemetry" } opentelemetry_sdk = { version = "0.29", path = "../opentelemetry-sdk" } +[dev-dependencies] +opentelemetry = { path = "../opentelemetry", features = ["metrics"] } +opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["rt-tokio", "metrics"] } +opentelemetry-appender-tracing = { workspace = true } +tracing = { workspace = true, features = ["std"]} +tracing-subscriber = { workspace = true, features = ["registry", "std"] } +tokio = { workspace = true, features = ["full"] } +once_cell = { workspace = true } + [lints] workspace = true diff --git a/opentelemetry-zipkin/Cargo.toml b/opentelemetry-zipkin/Cargo.toml index a96a5b5468..ebd988e784 100644 --- a/opentelemetry-zipkin/Cargo.toml +++ b/opentelemetry-zipkin/Cargo.toml @@ -38,6 +38,15 @@ http = { workspace = true } reqwest = { workspace = true, optional = true } thiserror = { workspace = true } +[dev-dependencies] +async-trait = { workspace = true } +bytes = { workspace = true } +futures-util = { workspace = true, features = ["io"] } +http-body-util = { workspace = true } +hyper-util = { workspace = true, features = ["client-legacy", "http1", "tokio"] } +opentelemetry_sdk = { default-features = false, features = ["trace", "testing"], path = "../opentelemetry-sdk" } +temp-env = { workspace = true } + [lints] workspace = true diff --git a/opentelemetry/Cargo.toml b/opentelemetry/Cargo.toml index 254825e20a..eb874d42da 100644 --- a/opentelemetry/Cargo.toml +++ b/opentelemetry/Cargo.toml @@ -41,6 +41,13 @@ logs = [] spec_unstable_logs_enabled = ["logs"] internal-logs = ["tracing"] +[dev-dependencies] +opentelemetry_sdk = { path = "../opentelemetry-sdk", features = ["spec_unstable_logs_enabled"]} # for documentation tests +criterion = { workspace = true } +rand = { workspace = true, features = ["os_rng", "thread_rng"] } +tokio = { version = "1.0", features = ["full"] } +futures = "0.3" + [[bench]] name = "metrics" harness = false From 0ac3f376d1e7d717df5da0559d2e60bb8175f311 Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Wed, 16 Apr 2025 17:52:55 +0200 Subject: [PATCH 5/8] remove extra implementation of shutdown method --- opentelemetry-otlp/src/exporter/http/logs.rs | 4 ---- opentelemetry-sdk/src/logs/simple_log_processor.rs | 4 ---- 2 files changed, 8 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/logs.rs b/opentelemetry-otlp/src/exporter/http/logs.rs index d8a5b4895c..0cba45d99b 100644 --- a/opentelemetry-otlp/src/exporter/http/logs.rs +++ b/opentelemetry-otlp/src/exporter/http/logs.rs @@ -59,10 +59,6 @@ impl LogExporter for OtlpHttpClient { Ok(()) } - fn shutdown(&self) -> OTelSdkResult { - self.shutdown_with_timeout(time::Duration::from_secs(5)) - } - fn set_resource(&mut self, resource: &opentelemetry_sdk::Resource) { self.resource = resource.into(); } diff --git a/opentelemetry-sdk/src/logs/simple_log_processor.rs b/opentelemetry-sdk/src/logs/simple_log_processor.rs index c8df8b06fd..a52bd548d8 100644 --- a/opentelemetry-sdk/src/logs/simple_log_processor.rs +++ b/opentelemetry-sdk/src/logs/simple_log_processor.rs @@ -464,10 +464,6 @@ mod tests { } impl LogExporter for ReentrantLogExporter { - fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { - Ok(()) - } - async fn export(&self, _batch: LogBatch<'_>) -> OTelSdkResult { let logger = self.logger.lock().unwrap(); if let Some(logger) = logger.as_ref() { From dfa1f8cb79f874e7aff47109086afd7817b3110f Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Wed, 16 Apr 2025 17:59:59 +0200 Subject: [PATCH 6/8] remove extra implementation of shutdown methods --- opentelemetry-sdk/benches/log_enabled.rs | 4 ---- opentelemetry-sdk/src/logs/log_processor.rs | 4 ---- 2 files changed, 8 deletions(-) diff --git a/opentelemetry-sdk/benches/log_enabled.rs b/opentelemetry-sdk/benches/log_enabled.rs index d20bd26d56..f64948ff56 100644 --- a/opentelemetry-sdk/benches/log_enabled.rs +++ b/opentelemetry-sdk/benches/log_enabled.rs @@ -30,10 +30,6 @@ impl LogExporter for NoopExporter { Ok(()) } - fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { - Ok(()) - } - #[inline] fn event_enabled( &self, diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index 5dc57a1ad5..a37bff8d95 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -93,10 +93,6 @@ pub(crate) mod tests { Ok(()) } - fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { - Ok(()) - } - fn set_resource(&mut self, resource: &Resource) { self.resource .lock() From 29a41ae0e3d058ca5a4c02084c94aa795aacd6d6 Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Wed, 16 Apr 2025 18:53:16 +0200 Subject: [PATCH 7/8] remove unused package --- opentelemetry-sdk/benches/log_enabled.rs | 1 - opentelemetry-sdk/src/logs/log_processor.rs | 1 - 2 files changed, 2 deletions(-) diff --git a/opentelemetry-sdk/benches/log_enabled.rs b/opentelemetry-sdk/benches/log_enabled.rs index f64948ff56..164dccf0b3 100644 --- a/opentelemetry-sdk/benches/log_enabled.rs +++ b/opentelemetry-sdk/benches/log_enabled.rs @@ -21,7 +21,6 @@ use opentelemetry_sdk::logs::{ use opentelemetry_sdk::Resource; #[cfg(not(target_os = "windows"))] use pprof::criterion::{Output, PProfProfiler}; -use std::time; #[derive(Debug)] struct NoopExporter; diff --git a/opentelemetry-sdk/src/logs/log_processor.rs b/opentelemetry-sdk/src/logs/log_processor.rs index a37bff8d95..c37eefd9c5 100644 --- a/opentelemetry-sdk/src/logs/log_processor.rs +++ b/opentelemetry-sdk/src/logs/log_processor.rs @@ -81,7 +81,6 @@ pub(crate) mod tests { use opentelemetry::logs::{Logger, LoggerProvider}; use opentelemetry::{InstrumentationScope, Key}; use std::sync::{Arc, Mutex}; - use std::time; #[derive(Debug, Clone)] pub(crate) struct MockLogExporter { From e4874a928f9469b2a6d844976be98ad0e7b5d25f Mon Sep 17 00:00:00 2001 From: mohammadVatandoost Date: Fri, 18 Apr 2025 16:05:15 +0200 Subject: [PATCH 8/8] remove redundate trait implementation --- .../src/logs/log_processor_with_async_runtime.rs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs b/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs index 1976a0f454..94fd26be5a 100644 --- a/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs +++ b/opentelemetry-sdk/src/logs/log_processor_with_async_runtime.rs @@ -309,7 +309,6 @@ mod tests { use opentelemetry::KeyValue; use opentelemetry::{InstrumentationScope, Key}; use std::sync::{Arc, Mutex}; - use std::time; use std::time::Duration; #[derive(Debug, Clone)] @@ -322,14 +321,6 @@ mod tests { Ok(()) } - fn shutdown_with_timeout(&self, _timeout: time::Duration) -> OTelSdkResult { - Ok(()) - } - - fn shutdown(&self) -> OTelSdkResult { - self.shutdown_with_timeout(time::Duration::from_secs(5)) - } - fn set_resource(&mut self, resource: &Resource) { self.resource .lock()