Skip to content

Commit dbbc759

Browse files
committed
fix the trace_provider shutdown
1 parent 83065ea commit dbbc759

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

rust/cubestore/cubestore/src/bin/cubestored.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use cubestore::util::{metrics, spawn_malloc_trim_loop};
88
use cubestore::{app_metrics, CubeError};
99
use datafusion::cube_ext;
1010
use log::debug;
11+
use opentelemetry_sdk::trace::TracerProvider;
1112
use serde_json::Value;
1213
use std::collections::HashMap;
1314
use std::time::Duration;
@@ -80,8 +81,13 @@ fn main() {
8081
}
8182
let runtime = tokio_builder.build().unwrap();
8283
runtime.block_on(async move {
84+
// Holding trace_provider to automatically flush spans during drop.
85+
// opentelemetry::global::shutdown_tracer_provider() doesn't work correctly in v0.26
86+
// @see https://github.com/open-telemetry/opentelemetry-rust/issues/1961
87+
let mut tracer_provider: Option<TracerProvider> = None;
88+
8389
if enable_telemetry {
84-
init_tracing_telemetry(version);
90+
tracer_provider = Some(init_tracing_telemetry(version));
8591
}
8692
// TODO: Should this be avoided if otel is configured?
8793
init_agent_sender().await;
@@ -101,10 +107,8 @@ fn main() {
101107
stop_on_ctrl_c(&services).await;
102108
services.wait_processing_loops().await.unwrap();
103109

104-
if enable_telemetry {
105-
// This still doesn't prevent errors:
106-
// OpenTelemetry trace error occurred. cannot send message to batch processor as the channel is closed
107-
opentelemetry::global::shutdown_tracer_provider();
110+
if let Some(provider) = tracer_provider {
111+
let _ = provider.shutdown();
108112
}
109113
});
110114
}

rust/cubestore/cubestore/src/telemetry/otel_tracing.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use log::{Log, Metadata, Record};
22
use opentelemetry::trace::TracerProvider;
33
use opentelemetry::KeyValue;
4+
use opentelemetry_sdk::trace::TracerProvider as TracerProviderSDK;
45
use opentelemetry_sdk::Resource;
56
use tracing_log::LogTracer;
67
use tracing_subscriber::layer::SubscriberExt;
78
use tracing_subscriber::Registry;
89

910
const OTEL_SERVICE_NAME: &str = "cubestore";
1011

11-
pub fn init_tracing_telemetry(version: String) {
12+
pub fn init_tracing_telemetry(version: String) -> TracerProviderSDK {
1213
let otlp_exporter = opentelemetry_otlp::new_exporter()
1314
.http()
1415
.with_http_client(reqwest::Client::new());
@@ -31,6 +32,8 @@ pub fn init_tracing_telemetry(version: String) {
3132

3233
tracing::subscriber::set_global_default(subscriber)
3334
.expect("setting default tracing subscriber failed");
35+
36+
tracer_provider
3437
}
3538

3639
pub struct OpenTelemetryLogger {

0 commit comments

Comments
 (0)