Skip to content

Commit 8b7ae64

Browse files
rorniccijothomas
andauthored
refactor: unify sdk error types (#3458)
Co-authored-by: Cijo Thomas <cithomas@microsoft.com> Co-authored-by: Cijo Thomas <cijo.thomas@gmail.com>
1 parent 61ff426 commit 8b7ae64

10 files changed

Lines changed: 34 additions & 100 deletions

File tree

opentelemetry-sdk/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
- Fix panic when `SpanProcessor::on_end` calls `Context::current()` ([#3262][3262]).
3535
- Updated `SpanProcessor::on_end` documentation to clarify that `Context::current()` returns the parent context, not the span's context
3636
- Fix `traceparent` headers with unknown flags (e.g. W3C random-trace-id flag `0x02`) being incorrectly rejected. Unknown flags are now accepted and zeroed out as required by the W3C trace-context spec. [#3435][3435]
37+
- **Breaking** `InMemoryExporterError` has been removed and replaced by `OTelSdkError`, and a new `JaegerRemoteSamplerBuildError` introduced to replace last uses of `TraceError`. [#3458][3458]
3738

3839
[3227]: https://github.com/open-telemetry/opentelemetry-rust/pull/3227
3940
[3277]: https://github.com/open-telemetry/opentelemetry-rust/pull/3277
@@ -43,6 +44,7 @@
4344
[3262]: https://github.com/open-telemetry/opentelemetry-rust/pull/3262
4445
[3407]: https://github.com/open-telemetry/opentelemetry-rust/pull/3407
4546
[3435]: https://github.com/open-telemetry/opentelemetry-rust/issues/3435
47+
[3458]: https://github.com/open-telemetry/opentelemetry-rust/pull/3458
4648

4749
- "spec_unstable_logs_enabled" feature flag is removed. The capability (and the
4850
backing specification) is now stable and is enabled by default.

opentelemetry-sdk/src/error.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,12 @@ pub enum OTelSdkError {
4141
InternalFailure(String),
4242
}
4343

44+
#[cfg(any(feature = "testing", test))]
45+
impl<T> From<std::sync::PoisonError<T>> for OTelSdkError {
46+
fn from(err: std::sync::PoisonError<T>) -> Self {
47+
OTelSdkError::InternalFailure(format!("Mutex poison error: {err}"))
48+
}
49+
}
50+
4451
/// A specialized `Result` type for Shutdown operations.
4552
pub type OTelSdkResult = Result<(), OTelSdkError>;

opentelemetry-sdk/src/lib.rs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -196,24 +196,3 @@ pub use resource::Resource;
196196

197197
pub mod error;
198198
pub use error::ExportError;
199-
200-
#[cfg(any(feature = "testing", test))]
201-
#[derive(thiserror::Error, Debug)]
202-
/// Errors that can occur during when returning telemetry from InMemoryLogExporter
203-
pub enum InMemoryExporterError {
204-
/// Operation failed due to an internal error.
205-
///
206-
/// The error message is intended for logging purposes only and should not
207-
/// be used to make programmatic decisions. It is implementation-specific
208-
/// and subject to change without notice. Consumers of this error should not
209-
/// rely on its content beyond logging.
210-
#[error("Unable to obtain telemetry. Reason: {0}")]
211-
InternalFailure(String),
212-
}
213-
214-
#[cfg(any(feature = "testing", test))]
215-
impl<T> From<std::sync::PoisonError<T>> for InMemoryExporterError {
216-
fn from(err: std::sync::PoisonError<T>) -> Self {
217-
InMemoryExporterError::InternalFailure(format!("Mutex poison error: {err}"))
218-
}
219-
}

opentelemetry-sdk/src/logs/in_memory_exporter.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::error::{OTelSdkError, OTelSdkResult};
22
use crate::logs::SdkLogRecord;
33
use crate::logs::{LogBatch, LogExporter};
4-
use crate::InMemoryExporterError;
54
use crate::Resource;
65
use opentelemetry::InstrumentationScope;
76
use std::borrow::Cow;
@@ -149,6 +148,10 @@ impl InMemoryLogExporter {
149148

150149
/// Returns the logs emitted via Logger as a vector of `LogDataWithResource`.
151150
///
151+
/// # Errors
152+
///
153+
/// Returns an `OTelSdkError`.
154+
///
152155
/// # Example
153156
///
154157
/// ```
@@ -158,9 +161,9 @@ impl InMemoryLogExporter {
158161
/// let emitted_logs = exporter.get_emitted_logs().unwrap();
159162
/// ```
160163
///
161-
pub fn get_emitted_logs(&self) -> Result<Vec<LogDataWithResource>, InMemoryExporterError> {
162-
let logs_guard = self.logs.lock().map_err(InMemoryExporterError::from)?;
163-
let resource_guard = self.resource.lock().map_err(InMemoryExporterError::from)?;
164+
pub fn get_emitted_logs(&self) -> Result<Vec<LogDataWithResource>, OTelSdkError> {
165+
let logs_guard = self.logs.lock().map_err(OTelSdkError::from)?;
166+
let resource_guard = self.resource.lock().map_err(OTelSdkError::from)?;
164167
let logs: Vec<LogDataWithResource> = logs_guard
165168
.iter()
166169
.map(|log_data| LogDataWithResource {

opentelemetry-sdk/src/metrics/in_memory_exporter.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::metrics::data::{
44
};
55
use crate::metrics::exporter::PushMetricExporter;
66
use crate::metrics::Temporality;
7-
use crate::InMemoryExporterError;
87
use std::collections::VecDeque;
98
use std::fmt;
109
use std::sync::{Arc, Mutex};
@@ -136,7 +135,7 @@ impl InMemoryMetricExporter {
136135
///
137136
/// # Errors
138137
///
139-
/// Returns a `MetricError` if the internal lock cannot be acquired.
138+
/// Returns an `OTelSdkError`.
140139
///
141140
/// # Example
142141
///
@@ -146,12 +145,12 @@ impl InMemoryMetricExporter {
146145
/// let exporter = InMemoryMetricExporter::default();
147146
/// let finished_metrics = exporter.get_finished_metrics().unwrap();
148147
/// ```
149-
pub fn get_finished_metrics(&self) -> Result<Vec<ResourceMetrics>, InMemoryExporterError> {
148+
pub fn get_finished_metrics(&self) -> Result<Vec<ResourceMetrics>, OTelSdkError> {
150149
let metrics = self
151150
.metrics
152151
.lock()
153152
.map(|metrics_guard| metrics_guard.iter().map(Self::clone_metrics).collect())
154-
.map_err(InMemoryExporterError::from)?;
153+
.map_err(OTelSdkError::from)?;
155154
Ok(metrics)
156155
}
157156

opentelemetry-sdk/src/trace/error.rs

Lines changed: 0 additions & 60 deletions
This file was deleted.

opentelemetry-sdk/src/trace/in_memory_exporter.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::error::{OTelSdkError, OTelSdkResult};
22
use crate::resource::Resource;
33
use crate::trace::{SpanData, SpanExporter};
4-
use crate::InMemoryExporterError;
54
use std::sync::{atomic::AtomicBool, Arc, Mutex};
65
use std::time::Duration;
76

@@ -118,7 +117,7 @@ impl InMemorySpanExporter {
118117
///
119118
/// # Errors
120119
///
121-
/// Returns a `TraceError` if the internal lock cannot be acquired.
120+
/// Returns an `OTelSdkError`.
122121
///
123122
/// # Example
124123
///
@@ -128,12 +127,12 @@ impl InMemorySpanExporter {
128127
/// let exporter = InMemorySpanExporter::default();
129128
/// let finished_spans = exporter.get_finished_spans().unwrap();
130129
/// ```
131-
pub fn get_finished_spans(&self) -> Result<Vec<SpanData>, InMemoryExporterError> {
130+
pub fn get_finished_spans(&self) -> Result<Vec<SpanData>, OTelSdkError> {
132131
let spans = self
133132
.spans
134133
.lock()
135134
.map(|spans_guard| spans_guard.iter().cloned().collect())
136-
.map_err(InMemoryExporterError::from)?;
135+
.map_err(OTelSdkError::from)?;
137136
Ok(spans)
138137
}
139138

opentelemetry-sdk/src/trace/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
//! current operation execution.
88
//! * The [`SdkTracerProvider`] struct which configures and produces [`SdkTracer`]s.
99
mod config;
10-
mod error;
1110
mod events;
1211
mod export;
1312
mod id_generator;
@@ -23,7 +22,6 @@ pub mod span_processor_with_async_runtime;
2322
mod tracer;
2423

2524
pub use config::Config;
26-
pub use error::{TraceError, TraceResult};
2725
pub use events::SpanEvents;
2826
pub use export::{SpanData, SpanExporter};
2927

opentelemetry-sdk/src/trace/sampler/jaeger_remote/sampler.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::runtime::{to_interval_stream, RuntimeChannel};
2-
use crate::trace::error::TraceError;
32
use crate::trace::sampler::jaeger_remote::remote::SamplingStrategyResponse;
43
use crate::trace::sampler::jaeger_remote::sampling_strategy::Inner;
54
use crate::trace::{Sampler, SamplingResult, ShouldSample};
@@ -11,9 +10,17 @@ use opentelemetry_http::HttpClient;
1110
use std::str::FromStr;
1211
use std::sync::Arc;
1312
use std::time::Duration;
13+
use thiserror::Error;
1414

1515
const DEFAULT_REMOTE_SAMPLER_ENDPOINT: &str = "http://localhost:5778/sampling";
1616

17+
#[derive(Error, Debug)]
18+
#[non_exhaustive]
19+
pub enum JaegerRemoteSamplerBuildError {
20+
#[error("Invalid endpoint. Unable to create JaegerRemoteSampler.")]
21+
InvalidEndpoint(String),
22+
}
23+
1724
/// Builder for [`JaegerRemoteSampler`].
1825
/// See [Sampler::jaeger_remote] for details.
1926
#[derive(Debug)]
@@ -100,9 +107,9 @@ where
100107
///
101108
/// - the endpoint provided is empty.
102109
/// - the service name provided is empty.
103-
pub fn build(self) -> Result<Sampler, TraceError> {
110+
pub fn build(self) -> Result<Sampler, JaegerRemoteSamplerBuildError> {
104111
let endpoint = Self::get_endpoint(&self.endpoint, &self.service_name)
105-
.map_err(|err_str| TraceError::Other(err_str.into()))?;
112+
.map_err(JaegerRemoteSamplerBuildError::InvalidEndpoint)?;
106113

107114
Ok(Sampler::JaegerRemote(JaegerRemoteSampler::new(
108115
self.runtime,

opentelemetry-zipkin/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
//! ```no_run
2424
//! use opentelemetry::global;
2525
//! use opentelemetry::trace::Tracer;
26-
//! use opentelemetry_sdk::{trace::{SdkTracerProvider, TraceError}, Resource};
26+
//! use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
2727
//! use opentelemetry_zipkin::{ExporterBuildError,ZipkinExporter};
2828
//!
2929
//! fn main() -> Result<(), ExporterBuildError> {
@@ -114,7 +114,7 @@
114114
//!
115115
//! ```no_run
116116
//! use opentelemetry::{global, InstrumentationScope, KeyValue, trace::Tracer};
117-
//! use opentelemetry_sdk::{trace::{self, RandomIdGenerator, Sampler, TraceError}, Resource};
117+
//! use opentelemetry_sdk::{trace::{self, RandomIdGenerator, Sampler}, Resource};
118118
//! use opentelemetry_http::{HttpClient, HttpError};
119119
//! use opentelemetry_zipkin::{ExporterBuildError, ZipkinExporter};
120120
//! use async_trait::async_trait;

0 commit comments

Comments
 (0)