Skip to content

Commit 969bedf

Browse files
authored
fix: Cleanup zipkin build error (#2839)
1 parent 702c61d commit 969bedf

File tree

4 files changed

+27
-36
lines changed

4 files changed

+27
-36
lines changed

opentelemetry-zipkin/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## vNext
44

5+
- **Breaking** The `ZipkinExporterBuilder::build()` method now returns a
6+
`Result<ZipkinExporter, ExporterBuildError>`. The `ExporterBuildError` enum
7+
lists possible failures specific to the Zipkin exporter and was renamed from
8+
`opentelemetry_zipkin::Error`. Previously, this method returned a `TraceError`
9+
from the `opentelemetry_sdk` crate, which was unrelated to Zipkin builder
10+
failures.
11+
[2839](https://github.com/open-telemetry/opentelemetry-rust/pull/2839)
12+
513
## 0.28.0
614

715
Released 2025-Feb-10

opentelemetry-zipkin/examples/zipkin.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ use opentelemetry::{
33
trace::{Span, Tracer},
44
InstrumentationScope, KeyValue,
55
};
6-
use opentelemetry_sdk::{
7-
trace::{SdkTracerProvider, TraceError},
8-
Resource,
9-
};
10-
use opentelemetry_zipkin::ZipkinExporter;
6+
use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
7+
use opentelemetry_zipkin::{ExporterBuildError, ZipkinExporter};
118
use std::thread;
129
use std::time::Duration;
1310

@@ -18,7 +15,7 @@ fn bar() {
1815
span.end()
1916
}
2017

21-
fn init_traces() -> Result<SdkTracerProvider, TraceError> {
18+
fn init_traces() -> Result<SdkTracerProvider, ExporterBuildError> {
2219
let exporter = ZipkinExporter::builder().build()?;
2320

2421
Ok(SdkTracerProvider::builder()

opentelemetry-zipkin/src/exporter/mod.rs

+8-22
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ use http::Uri;
66
use model::endpoint::Endpoint;
77
use opentelemetry_http::HttpClient;
88
use opentelemetry_sdk::error::OTelSdkResult;
9-
use opentelemetry_sdk::trace::TraceError;
10-
use opentelemetry_sdk::{trace, ExportError};
9+
use opentelemetry_sdk::trace;
1110
use std::net::{AddrParseError, SocketAddr};
1211
use std::sync::Arc;
1312

@@ -75,7 +74,7 @@ impl ZipkinExporterBuilder {
7574
/// Creates a new [ZipkinExporter] from this configuration.
7675
///
7776
/// Returns error if the endpoint is not valid or if no http client is provided.
78-
pub fn build(self) -> Result<ZipkinExporter, TraceError> {
77+
pub fn build(self) -> Result<ZipkinExporter, ExporterBuildError> {
7978
let endpoint = Endpoint::new(self.service_addr);
8079

8180
if let Some(client) = self.client {
@@ -84,18 +83,19 @@ impl ZipkinExporterBuilder {
8483
client,
8584
self.collector_endpoint
8685
.parse()
87-
.map_err::<Error, _>(Into::into)?,
86+
.map_err(ExporterBuildError::InvalidUri)?,
8887
);
8988
Ok(exporter)
9089
} else {
91-
Err(Error::NoHttpClient.into())
90+
Err(ExporterBuildError::NoHttpClient)
9291
}
9392
}
9493

9594
/// Assign client implementation
9695
///
97-
/// Note: Programmatically setting the timeout will override any value
98-
/// set via the environment variable `OTEL_EXPORTER_ZIPKIN_TIMEOUT`.
96+
/// When using this method, the export timeout will depend on the provided
97+
/// client implementation and may not respect the timeout set via the
98+
/// environment variable `OTEL_EXPORTER_ZIPKIN_TIMEOUT`.
9999
pub fn with_http_client<T: HttpClient + 'static>(mut self, client: T) -> Self {
100100
self.client = Some(Arc::new(client));
101101
self
@@ -140,32 +140,18 @@ impl trace::SpanExporter for ZipkinExporter {
140140
/// Wrap type for errors from opentelemetry zipkin
141141
#[derive(thiserror::Error, Debug)]
142142
#[non_exhaustive]
143-
pub enum Error {
143+
pub enum ExporterBuildError {
144144
/// No http client implementation found. User should provide one or enable features.
145145
#[error("http client must be set, users can enable reqwest feature to use http client implementation within create")]
146146
NoHttpClient,
147147

148-
/// Http requests failed
149-
#[error("http request failed with {0}")]
150-
RequestFailed(#[from] http::Error),
151-
152148
/// The uri provided is invalid
153149
#[error("invalid uri")]
154150
InvalidUri(#[from] http::uri::InvalidUri),
155151

156152
/// The IP/socket address provided is invalid
157153
#[error("invalid address")]
158154
InvalidAddress(#[from] AddrParseError),
159-
160-
/// Other errors
161-
#[error("export error: {0}")]
162-
Other(String),
163-
}
164-
165-
impl ExportError for Error {
166-
fn exporter_name(&self) -> &'static str {
167-
"zipkin"
168-
}
169155
}
170156

171157
#[cfg(test)]

opentelemetry-zipkin/src/lib.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
//! use opentelemetry::global;
2525
//! use opentelemetry::trace::Tracer;
2626
//! use opentelemetry_sdk::{trace::{SdkTracerProvider, TraceError}, Resource};
27-
//! use opentelemetry_zipkin::ZipkinExporter;
27+
//! use opentelemetry_zipkin::{ExporterBuildError,ZipkinExporter};
2828
//!
29-
//! fn main() -> Result<(), TraceError> {
29+
//! fn main() -> Result<(), ExporterBuildError> {
3030
//! global::set_text_map_propagator(opentelemetry_zipkin::Propagator::new());
3131
//!
3232
//! let exporter = ZipkinExporter::builder()
@@ -68,9 +68,9 @@
6868
//! },
6969
//! Resource,
7070
//! };
71-
//! use opentelemetry_zipkin::ZipkinExporter;
71+
//! use opentelemetry_zipkin::{ExporterBuildError,ZipkinExporter};
7272
//!
73-
//! fn main() -> Result<(), opentelemetry_sdk::trace::TraceError> {
73+
//! fn main() -> Result<(), ExporterBuildError> {
7474
//! let exporter = ZipkinExporter::builder()
7575
//! .build()?;
7676
//!
@@ -116,7 +116,7 @@
116116
//! use opentelemetry::{global, InstrumentationScope, KeyValue, trace::Tracer};
117117
//! use opentelemetry_sdk::{trace::{self, RandomIdGenerator, Sampler, TraceError}, Resource};
118118
//! use opentelemetry_http::{HttpClient, HttpError};
119-
//! use opentelemetry_zipkin::{Error as ZipkinError, ZipkinExporter};
119+
//! use opentelemetry_zipkin::{ExporterBuildError, ZipkinExporter};
120120
//! use async_trait::async_trait;
121121
//! use bytes::Bytes;
122122
//! use futures_util::io::AsyncReadExt as _;
@@ -157,7 +157,7 @@
157157
//! }
158158
//! }
159159
//!
160-
//! fn init_traces() -> Result<trace::SdkTracerProvider, TraceError> {
160+
//! fn init_traces() -> Result<trace::SdkTracerProvider, ExporterBuildError> {
161161
//! let exporter = ZipkinExporter::builder()
162162
//! .with_http_client(
163163
//! HyperClient(
@@ -168,7 +168,7 @@
168168
//! .with_service_address(
169169
//! "127.0.0.1:8080"
170170
//! .parse()
171-
//! .map_err::<ZipkinError, _>(Into::into)?
171+
//! .map_err::<ExporterBuildError, _>(Into::into)?
172172
//! )
173173
//! .with_collector_endpoint("http://localhost:9411/api/v2/spans")
174174
//! .build()?;
@@ -257,5 +257,5 @@ extern crate typed_builder;
257257
mod exporter;
258258
mod propagator;
259259

260-
pub use exporter::{Error, ZipkinExporter, ZipkinExporterBuilder};
260+
pub use exporter::{ExporterBuildError, ZipkinExporter, ZipkinExporterBuilder};
261261
pub use propagator::{B3Encoding, Propagator};

0 commit comments

Comments
 (0)