Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move force_flush from tracer provider API to SDK #588 #658

Merged
merged 1 commit into from Mar 20, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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() {
TommyCpp marked this conversation as resolved.
Show resolved Hide resolved
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<()>>;
}
2 changes: 1 addition & 1 deletion opentelemetry-jaeger/tests/integration_test.rs
@@ -1,7 +1,7 @@
#[cfg(feature = "integration_test")]
mod tests {
use opentelemetry::sdk::trace::Tracer as SdkTracer;
use opentelemetry::trace::{Status, TraceContextExt, Tracer, TracerProvider};
use opentelemetry::trace::{Status, TraceContextExt, Tracer};
use opentelemetry::KeyValue;
use opentelemetry_jaeger::testing::{
jaeger_api_v2 as jaeger_api, jaeger_client::JaegerTestClient,
Expand Down
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