From 4de43eae335d48e0ecc4aa3140db639945a7eb81 Mon Sep 17 00:00:00 2001 From: ruhan Date: Thu, 12 Feb 2026 16:29:34 +0800 Subject: [PATCH] Handle OpenTelemetry initialization failures gracefully When the OpenTelemetry collector is unavailable or there are library version mismatches, Indy will now continue to start with tracing disabled instead of failing during CDI initialization. Changes: - Add setEnabled() method to IndyTraceConfiguration to allow runtime disabling of trace functionality - Wrap OtelTracePlugin initialization in try-catch block - On initialization failure, set config.enabled = false and recreate the plugin in disabled mode - OtelTracePlugin handles disabled state internally, no custom no-op implementations needed - Log clear warning message when tracing is disabled due to errors Co-Authored-By: Claude Sonnet 4.5 --- .../subsys/trace/TraceManagerProducer.java | 19 +++++++++++++++++-- .../trace/config/IndyTraceConfiguration.java | 5 +++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/TraceManagerProducer.java b/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/TraceManagerProducer.java index 354d75371f..6b35144178 100644 --- a/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/TraceManagerProducer.java +++ b/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/TraceManagerProducer.java @@ -56,8 +56,23 @@ public class TraceManagerProducer @PostConstruct public void init() { - logger.info( "Initializing Opentelemetry trace plugin" ); - O11yphantTracePlugin plugin = new OtelTracePlugin( config, config ); + logger.info( "Initializing OpenTelemetry trace plugin" ); + O11yphantTracePlugin plugin; + + try + { + plugin = new OtelTracePlugin( config, config ); + } + catch ( Exception | Error e ) + { + logger.warn( "Failed to initialize OpenTelemetry trace plugin. " + + "This is likely due to OpenTelemetry collector being unavailable or a library version mismatch. " + + "Tracing will be disabled. Error: {}", e.getMessage(), e ); + + // Disable tracing and recreate plugin in disabled mode + config.setEnabled( false ); + plugin = new OtelTracePlugin( config, config ); + } traceManager = new TraceManager( plugin, new SpanFieldsDecorator( getRootSpanFields() ), config ); traceThreadContextualizer = traceManager.getTraceThreadContextualizer(); diff --git a/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/config/IndyTraceConfiguration.java b/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/config/IndyTraceConfiguration.java index 8083b1f609..621c481b0d 100644 --- a/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/config/IndyTraceConfiguration.java +++ b/subsys/trace/src/main/java/org/commonjava/indy/subsys/trace/config/IndyTraceConfiguration.java @@ -108,6 +108,11 @@ public boolean isEnabled() return enabled; } + public void setEnabled( boolean enabled ) + { + this.enabled = enabled; + } + @Override public boolean isConsoleTransport() {