Skip to content

Commit c624d37

Browse files
committed
refactor(coprocessor): collapse OTEL runtime to single guard
1 parent aabb2e9 commit c624d37

File tree

1 file changed

+25
-44
lines changed
  • coprocessor/fhevm-engine/fhevm-engine-common/src

1 file changed

+25
-44
lines changed

coprocessor/fhevm-engine/fhevm-engine-common/src/telemetry.rs

Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,51 +21,38 @@ use tracing::{debug, info, warn};
2121
pub const TXN_ID_ATTR_KEY: &str = "txn_id";
2222

2323
/// Calls provider shutdown exactly once when dropped.
24-
pub struct TracerProviderGuard {
25-
provider: Option<SdkTracerProvider>,
24+
pub struct OtelGuard {
25+
tracer_provider: Option<SdkTracerProvider>,
26+
tracer: Option<opentelemetry_sdk::trace::Tracer>,
2627
}
2728

28-
impl TracerProviderGuard {
29-
fn new(provider: SdkTracerProvider) -> Self {
29+
impl OtelGuard {
30+
fn new(
31+
trace_provider: SdkTracerProvider,
32+
tracer: Option<opentelemetry_sdk::trace::Tracer>,
33+
) -> Self {
3034
Self {
31-
provider: Some(provider),
35+
tracer_provider: Some(trace_provider),
36+
tracer,
3237
}
3338
}
3439

3540
fn shutdown_once(&mut self) {
36-
if let Some(provider) = self.provider.take() {
41+
if let Some(provider) = self.tracer_provider.take() {
3742
if let Err(err) = provider.shutdown() {
3843
warn!(error = %err, "Failed to shutdown OTLP tracer provider");
3944
}
4045
}
4146
}
42-
}
4347

44-
impl Drop for TracerProviderGuard {
45-
fn drop(&mut self) {
46-
self.shutdown_once();
48+
pub fn tracer(&self) -> Option<opentelemetry_sdk::trace::Tracer> {
49+
self.tracer.clone()
4750
}
4851
}
4952

50-
/// Runtime OTLP handles that must stay alive for the process lifetime.
51-
pub struct OtelGuard {
52-
tracer: Option<opentelemetry_sdk::trace::Tracer>,
53-
_shutdown_guard: TracerProviderGuard,
54-
}
55-
56-
impl OtelGuard {
57-
fn new(
58-
tracer: Option<opentelemetry_sdk::trace::Tracer>,
59-
shutdown_guard: TracerProviderGuard,
60-
) -> Self {
61-
Self {
62-
tracer,
63-
_shutdown_guard: shutdown_guard,
64-
}
65-
}
66-
67-
pub fn tracer(&self) -> Option<opentelemetry_sdk::trace::Tracer> {
68-
self.tracer.clone()
53+
impl Drop for OtelGuard {
54+
fn drop(&mut self) {
55+
self.shutdown_once();
6956
}
7057
}
7158

@@ -96,10 +83,7 @@ pub fn init_otel(
9683

9784
let (_tracer, trace_provider) = build_tracer_provider(service_name, "otlp-layer")?;
9885
install_global_tracer_provider(trace_provider.clone());
99-
Ok(Some(OtelGuard::new(
100-
None,
101-
TracerProviderGuard::new(trace_provider),
102-
)))
86+
Ok(Some(OtelGuard::new(trace_provider, None)))
10387
}
10488

10589
pub fn init_otel_tracing(
@@ -112,10 +96,7 @@ pub fn init_otel_tracing(
11296

11397
let (tracer, trace_provider) = build_tracer_provider(service_name, tracer_name)?;
11498
install_global_tracer_provider(trace_provider.clone());
115-
Ok(Some(OtelGuard::new(
116-
Some(tracer),
117-
TracerProviderGuard::new(trace_provider),
118-
)))
99+
Ok(Some(OtelGuard::new(trace_provider, Some(tracer))))
119100
}
120101

121102
fn build_tracer_provider(
@@ -611,32 +592,32 @@ mod tests {
611592
use super::*;
612593

613594
#[test]
614-
fn tracer_provider_guard_shutdown_once_disarms_provider() {
595+
fn otel_guard_shutdown_once_disarms_provider() {
615596
let provider = SdkTracerProvider::builder().build();
616-
let mut guard = TracerProviderGuard::new(provider);
617-
assert!(guard.provider.is_some());
597+
let mut guard = OtelGuard::new(provider, None);
598+
assert!(guard.tracer_provider.is_some());
618599

619600
guard.shutdown_once();
620-
assert!(guard.provider.is_none());
601+
assert!(guard.tracer_provider.is_none());
621602

622603
// A second shutdown is a no-op.
623604
guard.shutdown_once();
624-
assert!(guard.provider.is_none());
605+
assert!(guard.tracer_provider.is_none());
625606
}
626607

627608
#[test]
628609
fn otel_guard_keeps_tracer_when_present() {
629610
let provider = SdkTracerProvider::builder().build();
630611
let tracer = provider.tracer("test-tracer");
631-
let runtime = OtelGuard::new(Some(tracer), TracerProviderGuard::new(provider));
612+
let runtime = OtelGuard::new(provider, Some(tracer));
632613

633614
assert!(runtime.tracer().is_some());
634615
}
635616

636617
#[test]
637618
fn otel_guard_handles_absent_tracer() {
638619
let provider = SdkTracerProvider::builder().build();
639-
let runtime = OtelGuard::new(None, TracerProviderGuard::new(provider));
620+
let runtime = OtelGuard::new(provider, None);
640621

641622
assert!(runtime.tracer().is_none());
642623
}

0 commit comments

Comments
 (0)