diff --git a/opentelemetry-zipkin/CHANGELOG.md b/opentelemetry-zipkin/CHANGELOG.md index 9a7e0b2537..3db1b348d8 100644 --- a/opentelemetry-zipkin/CHANGELOG.md +++ b/opentelemetry-zipkin/CHANGELOG.md @@ -2,6 +2,14 @@ ## vNext +- **Breaking** The `ZipkinExporterBuilder::build()` method now returns a + `Result`. 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 diff --git a/opentelemetry-zipkin/examples/zipkin.rs b/opentelemetry-zipkin/examples/zipkin.rs index b88a346007..731e23b992 100644 --- a/opentelemetry-zipkin/examples/zipkin.rs +++ b/opentelemetry-zipkin/examples/zipkin.rs @@ -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; @@ -18,7 +15,7 @@ fn bar() { span.end() } -fn init_traces() -> Result { +fn init_traces() -> Result { let exporter = ZipkinExporter::builder().build()?; Ok(SdkTracerProvider::builder() diff --git a/opentelemetry-zipkin/src/exporter/mod.rs b/opentelemetry-zipkin/src/exporter/mod.rs index fa0386f597..8fb0f84548 100644 --- a/opentelemetry-zipkin/src/exporter/mod.rs +++ b/opentelemetry-zipkin/src/exporter/mod.rs @@ -6,8 +6,7 @@ use http::Uri; 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; @@ -75,7 +74,7 @@ impl ZipkinExporterBuilder { /// 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 { + pub fn build(self) -> Result { let endpoint = Endpoint::new(self.service_addr); if let Some(client) = self.client { @@ -84,18 +83,19 @@ impl ZipkinExporterBuilder { client, self.collector_endpoint .parse() - .map_err::(Into::into)?, + .map_err(ExporterBuildError::InvalidUri)?, ); Ok(exporter) } else { - Err(Error::NoHttpClient.into()) + Err(ExporterBuildError::NoHttpClient) } } /// 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(mut self, client: T) -> Self { self.client = Some(Arc::new(client)); self @@ -140,15 +140,11 @@ impl trace::SpanExporter for ZipkinExporter { /// 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), @@ -156,16 +152,6 @@ pub enum Error { /// 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)] diff --git a/opentelemetry-zipkin/src/lib.rs b/opentelemetry-zipkin/src/lib.rs index 47a6d75636..478a6752b8 100644 --- a/opentelemetry-zipkin/src/lib.rs +++ b/opentelemetry-zipkin/src/lib.rs @@ -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() @@ -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()?; //! @@ -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 _; @@ -157,7 +157,7 @@ //! } //! } //! -//! fn init_traces() -> Result { +//! fn init_traces() -> Result { //! let exporter = ZipkinExporter::builder() //! .with_http_client( //! HyperClient( @@ -168,7 +168,7 @@ //! .with_service_address( //! "127.0.0.1:8080" //! .parse() -//! .map_err::(Into::into)? +//! .map_err::(Into::into)? //! ) //! .with_collector_endpoint("http://localhost:9411/api/v2/spans") //! .build()?; @@ -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};