From 2a3ea458b346b98e5f9585435113e4f9a6f3b5f4 Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 7 Nov 2025 11:34:42 +0100 Subject: [PATCH 1/2] Fix spurious "Failed to set parent context on span" error This would happen when the `info` log level is surpressed, and therefore the request span would not be enabled and fail to set the parent OTEL context. --- crates/cli/src/server.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/cli/src/server.rs b/crates/cli/src/server.rs index 4279e7e4a..9d65aeb62 100644 --- a/crates/cli/src/server.rs +++ b/crates/cli/src/server.rs @@ -143,11 +143,13 @@ fn make_http_span(req: &Request) -> Span { propagator.extract_with_context(&context, &extractor) }); - if let Err(err) = span.set_parent(parent_context) { - tracing::error!( - error = &err as &dyn std::error::Error, - "Failed to set parent context on span" - ); + if !span.is_disabled() { + if let Err(err) = span.set_parent(parent_context) { + tracing::error!( + error = &err as &dyn std::error::Error, + "Failed to set parent context on span" + ); + } } span From eeb5d61fe06189493c9762e91bbd6a9ba677f96e Mon Sep 17 00:00:00 2001 From: Quentin Gliech Date: Fri, 7 Nov 2025 13:37:26 +0100 Subject: [PATCH 2/2] Don't extract the parent context if the span is disabled --- crates/cli/src/server.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/cli/src/server.rs b/crates/cli/src/server.rs index 9d65aeb62..58d3672e0 100644 --- a/crates/cli/src/server.rs +++ b/crates/cli/src/server.rs @@ -136,14 +136,17 @@ fn make_http_span(req: &Request) -> Span { span.record(USER_AGENT_ORIGINAL, user_agent); } - // Extract the parent span context from the request headers - let parent_context = opentelemetry::global::get_text_map_propagator(|propagator| { - let extractor = HeaderExtractor(req.headers()); - let context = opentelemetry::Context::new(); - propagator.extract_with_context(&context, &extractor) - }); - + // In case the span is disabled by any of tracing layers, e.g. if `RUST_LOG` + // is set to `warn`, `set_parent` will fail. So we only try to set the + // parent context if the span is not disabled. if !span.is_disabled() { + // Extract the parent span context from the request headers + let parent_context = opentelemetry::global::get_text_map_propagator(|propagator| { + let extractor = HeaderExtractor(req.headers()); + let context = opentelemetry::Context::new(); + propagator.extract_with_context(&context, &extractor) + }); + if let Err(err) = span.set_parent(parent_context) { tracing::error!( error = &err as &dyn std::error::Error,