From 1c0f236923d72bdda109c9d111d017ebd42188f7 Mon Sep 17 00:00:00 2001 From: snek Date: Mon, 9 Dec 2024 22:33:07 +0100 Subject: [PATCH] fix(unstable): don't unwrap optional state in otel (#27292) otel global state may not be initialized if otel is not enabled, so bail out instead of panicking. Fixes: https://github.com/denoland/deno/issues/27272 --- ext/telemetry/lib.rs | 14 +++++++------- ext/telemetry/telemetry.ts | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ext/telemetry/lib.rs b/ext/telemetry/lib.rs index 9612401014..06210a70e7 100644 --- a/ext/telemetry/lib.rs +++ b/ext/telemetry/lib.rs @@ -732,9 +732,9 @@ fn op_otel_instrumentation_scope_enter( #[op2(fast)] fn op_otel_instrumentation_scope_enter_builtin(state: &mut OpState) { - state.put(InstrumentationScope( - BUILT_IN_INSTRUMENTATION_SCOPE.get().unwrap().clone(), - )); + if let Some(scope) = BUILT_IN_INSTRUMENTATION_SCOPE.get() { + state.put(InstrumentationScope(scope.clone())); + } } #[op2(fast)] @@ -749,6 +749,9 @@ fn op_otel_log( let Some(Processors { logs, .. }) = OTEL_PROCESSORS.get() else { return; }; + let Some(instrumentation_scope) = BUILT_IN_INSTRUMENTATION_SCOPE.get() else { + return; + }; // Convert the integer log level that ext/console uses to the corresponding // OpenTelemetry log severity. @@ -776,10 +779,7 @@ fn op_otel_log( ); } - logs.emit( - &mut log_record, - BUILT_IN_INSTRUMENTATION_SCOPE.get().unwrap(), - ); + logs.emit(&mut log_record, instrumentation_scope); } fn owned_string<'s>( diff --git a/ext/telemetry/telemetry.ts b/ext/telemetry/telemetry.ts index e9e38d1592..acdfd4d715 100644 --- a/ext/telemetry/telemetry.ts +++ b/ext/telemetry/telemetry.ts @@ -220,6 +220,7 @@ function submitSpan( startTime: number, endTime: number, ) { + if (!TRACING_ENABLED) return; if (!(traceFlags & TRACE_FLAG_SAMPLED)) return; // TODO(@lucacasonato): `resource` is ignored for now, should we implement it?