From 3d043195115cfad65c0212dfb6430e4cbc5f03cb Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Mon, 8 Dec 2025 19:13:14 -0300 Subject: [PATCH] Lazy load `GlobalOpenTelemetry` There are cases where the Global OpenTelemetry may not have been initialized yet, so it's better to initialize lazily --- .../mysql/cj/otel/OpenTelemetryHandler.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/core-impl/java/com/mysql/cj/otel/OpenTelemetryHandler.java b/src/main/core-impl/java/com/mysql/cj/otel/OpenTelemetryHandler.java index 82b76eba2..b168f7f93 100644 --- a/src/main/core-impl/java/com/mysql/cj/otel/OpenTelemetryHandler.java +++ b/src/main/core-impl/java/com/mysql/cj/otel/OpenTelemetryHandler.java @@ -50,8 +50,8 @@ public class OpenTelemetryHandler implements TelemetryHandler { otelApiAvaliable = false; } } - private OpenTelemetry openTelemetry = null; - private Tracer tracer = null; + private OpenTelemetry openTelemetry; + private Tracer tracer; private WeakHashMap spans = new WeakHashMap<>(); private List linkTargets = new ArrayList<>(); @@ -63,14 +63,11 @@ public OpenTelemetryHandler() { if (!isOpenTelemetryApiAvailable()) { throw ExceptionFactory.createException(Messages.getString("Connection.OtelApiNotFound")); } - - this.openTelemetry = GlobalOpenTelemetry.get(); - this.tracer = this.openTelemetry.getTracer(Constants.CJ_NAME, Constants.CJ_VERSION); } @Override public TelemetrySpan startSpan(TelemetrySpanName spanName, Object... args) { - SpanBuilder spanBuilder = this.tracer.spanBuilder(spanName.getName(args)).setSpanKind(SpanKind.CLIENT); + SpanBuilder spanBuilder = getTracer().spanBuilder(spanName.getName(args)).setSpanKind(SpanKind.CLIENT); this.linkTargets.stream().map(Span::getSpanContext).forEach(spanBuilder::addLink); Span otelSpan = spanBuilder.startSpan(); TelemetrySpan span = new OpenTelemetrySpan(otelSpan); @@ -96,7 +93,20 @@ public void removeLinkTarget(TelemetrySpan span) { @Override public void propagateContext(BiConsumer traceparentConsumer) { - this.openTelemetry.getPropagators().getTextMapPropagator().inject(Context.current(), traceparentConsumer, BiConsumer::accept); + getOpenTelemetry().getPropagators().getTextMapPropagator().inject(Context.current(), traceparentConsumer, BiConsumer::accept); + } + + private OpenTelemetry getOpenTelemetry() { + if (this.openTelemetry == null) { + this.openTelemetry = GlobalOpenTelemetry.get(); + } + return this.openTelemetry; } -} + private Tracer getTracer() { + if (tracer == null) { + this.tracer = getOpenTelemetry().getTracer(Constants.CJ_NAME, Constants.CJ_VERSION); + } + return this.tracer; + } +} \ No newline at end of file