From f125fb0c02a204f924845fa2cbb9564a713db8a5 Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Wed, 22 Apr 2026 23:47:15 +0800 Subject: [PATCH] fix(adminrpc): pass otel_enabled as defer arg to avoid double-init When OTLP is enabled, init_tracing_subscriber() must defer so that init_otlp() is the sole caller of try_init(). Without this, the adminrpc binary crashes with "global default trace dispatcher already set". --- apps/adminrpc/src/main.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/adminrpc/src/main.rs b/apps/adminrpc/src/main.rs index 58938ad..7258d28 100644 --- a/apps/adminrpc/src/main.rs +++ b/apps/adminrpc/src/main.rs @@ -15,7 +15,8 @@ use args::Args; async fn main() -> anyhow::Result<()> { let cfg = AppConfig::load(); let log_level = cfg.log_level().unwrap_or_else(|_| "info".to_string()); - observability::init_tracing_subscriber(&log_level, false); + let otel_enabled = cfg.otel_enabled().unwrap_or(false); + observability::init_tracing_subscriber(&log_level, otel_enabled); let args = Args::parse(); let grpc_addr: SocketAddr = args @@ -34,7 +35,7 @@ async fn main() -> anyhow::Result<()> { "Starting admin RPC server" ); - let _otel_guard = if cfg.otel_enabled().unwrap_or(false) { + let _otel_guard = if otel_enabled { let endpoint = cfg .otel_endpoint() .unwrap_or_else(|_| "http://localhost:4317".to_string());