Skip to content

Commit

Permalink
Move TracerProvider::force_flush to SDK
Browse files Browse the repository at this point in the history
Co-authored-by: Rohith VenkataRamanaNanthan <rohith.v@thoughtworks.com>
  • Loading branch information
jtescher and rohithv-tw committed Mar 14, 2022
1 parent 535a1d9 commit 1805f70
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 54 deletions.
5 changes: 2 additions & 3 deletions opentelemetry-api/src/global/mod.rs
Expand Up @@ -157,7 +157,6 @@ pub use propagation::{get_text_map_propagator, set_text_map_propagator};
#[cfg(feature = "trace")]
#[cfg_attr(docsrs, doc(cfg(feature = "trace")))]
pub use trace::{
force_flush_tracer_provider, set_tracer_provider, shutdown_tracer_provider, tracer,
tracer_provider, BoxedSpan, BoxedTracer, GlobalTracerProvider, ObjectSafeTracer,
ObjectSafeTracerProvider,
set_tracer_provider, shutdown_tracer_provider, tracer, tracer_provider, BoxedSpan, BoxedTracer,
GlobalTracerProvider, ObjectSafeTracer, ObjectSafeTracerProvider,
};
33 changes: 1 addition & 32 deletions opentelemetry-api/src/global/trace.rs
@@ -1,5 +1,4 @@
use crate::global::handle_error;
use crate::trace::{noop::NoopTracerProvider, SpanContext, Status, TraceResult};
use crate::trace::{noop::NoopTracerProvider, SpanContext, Status};
use crate::{trace, trace::TracerProvider, Context, KeyValue};
use std::borrow::Cow;
use std::fmt;
Expand Down Expand Up @@ -287,9 +286,6 @@ pub trait ObjectSafeTracerProvider {
version: Option<&'static str>,
schema_url: Option<&'static str>,
) -> Box<dyn ObjectSafeTracer + Send + Sync>;

/// Force flush all remaining spans in span processors and return results.
fn force_flush(&self) -> Vec<TraceResult<()>>;
}

impl<S, T, P> ObjectSafeTracerProvider for P
Expand All @@ -307,10 +303,6 @@ where
) -> Box<dyn ObjectSafeTracer + Send + Sync> {
Box::new(self.versioned_tracer(name, version, schema_url))
}

fn force_flush(&self) -> Vec<TraceResult<()>> {
self.force_flush()
}
}

/// Represents the globally configured [`TracerProvider`] instance for this
Expand Down Expand Up @@ -358,11 +350,6 @@ impl trace::TracerProvider for GlobalTracerProvider {
.versioned_tracer_boxed(name.into(), version, schema_url),
)
}

/// Force flush all remaining spans in span processors and return results.
fn force_flush(&self) -> Vec<TraceResult<()>> {
self.provider.force_flush()
}
}

lazy_static::lazy_static! {
Expand Down Expand Up @@ -426,21 +413,3 @@ pub fn shutdown_tracer_provider() {
GlobalTracerProvider::new(NoopTracerProvider::new()),
);
}

/// Force flush all remaining spans in span processors.
///
/// Use the [`global::handle_error`] to handle errors happened during force flush.
///
/// [`global::handle_error`]: crate::global::handle_error
pub fn force_flush_tracer_provider() {
let tracer_provider = GLOBAL_TRACER_PROVIDER
.write()
.expect("GLOBAL_TRACER_PROVIDER RwLock poisoned");

let results = trace::TracerProvider::force_flush(&*tracer_provider);
for result in results {
if let Err(err) = result {
handle_error(err)
}
}
}
6 changes: 0 additions & 6 deletions opentelemetry-api/src/trace/noop.rs
Expand Up @@ -3,7 +3,6 @@
//! This implementation is returned as the global tracer if no `Tracer`
//! has been set. It is also useful for testing purposes as it is intended
//! to have minimal resource utilization and runtime impact.
use crate::trace::TraceResult;
use crate::{
propagation::{text_map_propagator::FieldIter, Extractor, Injector, TextMapPropagator},
trace,
Expand Down Expand Up @@ -38,11 +37,6 @@ impl trace::TracerProvider for NoopTracerProvider {
) -> Self::Tracer {
NoopTracer::new()
}

/// Return an empty `Vec` as there isn't any span processors in `NoopTracerProvider`
fn force_flush(&self) -> Vec<TraceResult<()>> {
Vec::new()
}
}

/// A no-op instance of a `Span`.
Expand Down
5 changes: 1 addition & 4 deletions opentelemetry-api/src/trace/tracer_provider.rs
@@ -1,4 +1,4 @@
use crate::trace::{TraceResult, Tracer};
use crate::trace::Tracer;
use std::borrow::Cow;

/// Types that can create instances of [`Tracer`].
Expand Down Expand Up @@ -67,7 +67,4 @@ pub trait TracerProvider {
version: Option<&'static str>,
schema_url: Option<&'static str>,
) -> Self::Tracer;

/// Force flush all remaining spans in span processors and return results.
fn force_flush(&self) -> Vec<TraceResult<()>>;
}
18 changes: 9 additions & 9 deletions opentelemetry-sdk/src/trace/provider.rs
Expand Up @@ -69,6 +69,14 @@ impl TracerProvider {
pub fn config(&self) -> &crate::trace::Config {
&self.inner.config
}

/// Force flush all remaining spans in span processors and return results.
pub fn force_flush(&self) -> Vec<TraceResult<()>> {
self.span_processors()
.iter()
.map(|processor| processor.force_flush())
.collect()
}
}

impl opentelemetry_api::trace::TracerProvider for TracerProvider {
Expand Down Expand Up @@ -97,14 +105,6 @@ impl opentelemetry_api::trace::TracerProvider for TracerProvider {

Tracer::new(instrumentation_lib, Arc::downgrade(&self.inner))
}

/// Force flush all remaining spans in span processors and return results.
fn force_flush(&self) -> Vec<TraceResult<()>> {
self.span_processors()
.iter()
.map(|processor| processor.force_flush())
.collect()
}
}

/// Builder for provider attributes.
Expand Down Expand Up @@ -200,7 +200,7 @@ mod tests {
use crate::trace::provider::TracerProviderInner;
use crate::trace::{Config, Span, SpanProcessor};
use crate::Resource;
use opentelemetry_api::trace::{TraceError, TraceResult, TracerProvider};
use opentelemetry_api::trace::{TraceError, TraceResult};
use opentelemetry_api::{Context, Key, KeyValue};
use std::env;
use std::sync::Arc;
Expand Down

0 comments on commit 1805f70

Please sign in to comment.