Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions opentelemetry-zipkin/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

## vNext

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

## 0.28.0

Released 2025-Feb-10
Expand Down
9 changes: 3 additions & 6 deletions opentelemetry-zipkin/examples/zipkin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@ use opentelemetry::{
trace::{Span, Tracer},
InstrumentationScope, KeyValue,
};
use opentelemetry_sdk::{
trace::{SdkTracerProvider, TraceError},
Resource,
};
use opentelemetry_zipkin::ZipkinExporter;
use opentelemetry_sdk::{trace::SdkTracerProvider, Resource};
use opentelemetry_zipkin::{ExporterBuildError, ZipkinExporter};
use std::thread;
use std::time::Duration;

Expand All @@ -18,7 +15,7 @@ fn bar() {
span.end()
}

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

Ok(SdkTracerProvider::builder()
Expand Down
30 changes: 8 additions & 22 deletions opentelemetry-zipkin/src/exporter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
use model::endpoint::Endpoint;
use opentelemetry_http::HttpClient;
use opentelemetry_sdk::error::OTelSdkResult;
use opentelemetry_sdk::trace::TraceError;
use opentelemetry_sdk::{trace, ExportError};
use opentelemetry_sdk::trace;
use std::net::{AddrParseError, SocketAddr};
use std::sync::Arc;

Expand Down Expand Up @@ -75,7 +74,7 @@
/// Creates a new [ZipkinExporter] from this configuration.
///
/// Returns error if the endpoint is not valid or if no http client is provided.
pub fn build(self) -> Result<ZipkinExporter, TraceError> {
pub fn build(self) -> Result<ZipkinExporter, ExporterBuildError> {

Check warning on line 77 in opentelemetry-zipkin/src/exporter/mod.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-zipkin/src/exporter/mod.rs#L77

Added line #L77 was not covered by tests
let endpoint = Endpoint::new(self.service_addr);

if let Some(client) = self.client {
Expand All @@ -84,18 +83,19 @@
client,
self.collector_endpoint
.parse()
.map_err::<Error, _>(Into::into)?,
.map_err(ExporterBuildError::InvalidUri)?,

Check warning on line 86 in opentelemetry-zipkin/src/exporter/mod.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-zipkin/src/exporter/mod.rs#L86

Added line #L86 was not covered by tests
);
Ok(exporter)
} else {
Err(Error::NoHttpClient.into())
Err(ExporterBuildError::NoHttpClient)

Check warning on line 90 in opentelemetry-zipkin/src/exporter/mod.rs

View check run for this annotation

Codecov / codecov/patch

opentelemetry-zipkin/src/exporter/mod.rs#L90

Added line #L90 was not covered by tests
}
}

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

/// Http requests failed
#[error("http request failed with {0}")]
RequestFailed(#[from] http::Error),

/// The uri provided is invalid
#[error("invalid uri")]
InvalidUri(#[from] http::uri::InvalidUri),

/// The IP/socket address provided is invalid
#[error("invalid address")]
InvalidAddress(#[from] AddrParseError),

/// Other errors
#[error("export error: {0}")]
Other(String),
}

impl ExportError for Error {
fn exporter_name(&self) -> &'static str {
"zipkin"
}
}

#[cfg(test)]
Expand Down
16 changes: 8 additions & 8 deletions opentelemetry-zipkin/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
//! use opentelemetry::global;
//! use opentelemetry::trace::Tracer;
//! use opentelemetry_sdk::{trace::{SdkTracerProvider, TraceError}, Resource};
//! use opentelemetry_zipkin::ZipkinExporter;
//! use opentelemetry_zipkin::{ExporterBuildError,ZipkinExporter};
//!
//! fn main() -> Result<(), TraceError> {
//! fn main() -> Result<(), ExporterBuildError> {
//! global::set_text_map_propagator(opentelemetry_zipkin::Propagator::new());
//!
//! let exporter = ZipkinExporter::builder()
Expand Down Expand Up @@ -68,9 +68,9 @@
//! },
//! Resource,
//! };
//! use opentelemetry_zipkin::ZipkinExporter;
//! use opentelemetry_zipkin::{ExporterBuildError,ZipkinExporter};
//!
//! fn main() -> Result<(), opentelemetry_sdk::trace::TraceError> {
//! fn main() -> Result<(), ExporterBuildError> {
//! let exporter = ZipkinExporter::builder()
//! .build()?;
//!
Expand Down Expand Up @@ -116,7 +116,7 @@
//! use opentelemetry::{global, InstrumentationScope, KeyValue, trace::Tracer};
//! use opentelemetry_sdk::{trace::{self, RandomIdGenerator, Sampler, TraceError}, Resource};
//! use opentelemetry_http::{HttpClient, HttpError};
//! use opentelemetry_zipkin::{Error as ZipkinError, ZipkinExporter};
//! use opentelemetry_zipkin::{ExporterBuildError, ZipkinExporter};
//! use async_trait::async_trait;
//! use bytes::Bytes;
//! use futures_util::io::AsyncReadExt as _;
Expand Down Expand Up @@ -157,7 +157,7 @@
//! }
//! }
//!
//! fn init_traces() -> Result<trace::SdkTracerProvider, TraceError> {
//! fn init_traces() -> Result<trace::SdkTracerProvider, ExporterBuildError> {
//! let exporter = ZipkinExporter::builder()
//! .with_http_client(
//! HyperClient(
Expand All @@ -168,7 +168,7 @@
//! .with_service_address(
//! "127.0.0.1:8080"
//! .parse()
//! .map_err::<ZipkinError, _>(Into::into)?
//! .map_err::<ExporterBuildError, _>(Into::into)?
//! )
//! .with_collector_endpoint("http://localhost:9411/api/v2/spans")
//! .build()?;
Expand Down Expand Up @@ -257,5 +257,5 @@ extern crate typed_builder;
mod exporter;
mod propagator;

pub use exporter::{Error, ZipkinExporter, ZipkinExporterBuilder};
pub use exporter::{ExporterBuildError, ZipkinExporter, ZipkinExporterBuilder};
pub use propagator::{B3Encoding, Propagator};