From 4bab9db1a03a07e558614a6ca7e969650953404c Mon Sep 17 00:00:00 2001 From: Ladislav Thon Date: Wed, 15 Apr 2020 11:42:04 +0200 Subject: [PATCH] fix Jaeger metrics initialization Creation of the correct `MetricsFactory` is moved from runtime to build time, which also means that it's created during native image compilation. Therefore, the MicroProfile Metrics API and SmallRye Metrics are not required to be present at runtime. Which, in the end, means that native image compilation no longer fails when the `quarkus-smallrye-opentracing` extension is present but `quarkus-smallrye-metrics` is not. --- .../quarkus/jaeger/deployment/JaegerProcessor.java | 6 +++++- .../jaeger/runtime/JaegerDeploymentRecorder.java | 14 ++++++++++++-- .../jaeger/runtime/QuarkusJaegerTracer.java | 10 +++------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/extensions/jaeger/deployment/src/main/java/io/quarkus/jaeger/deployment/JaegerProcessor.java b/extensions/jaeger/deployment/src/main/java/io/quarkus/jaeger/deployment/JaegerProcessor.java index 5a44493fa4c54..1c754e3cb1f2d 100644 --- a/extensions/jaeger/deployment/src/main/java/io/quarkus/jaeger/deployment/JaegerProcessor.java +++ b/extensions/jaeger/deployment/src/main/java/io/quarkus/jaeger/deployment/JaegerProcessor.java @@ -30,7 +30,11 @@ void setupTracer(JaegerDeploymentRecorder jdr, JaegerBuildTimeConfig buildTimeCo if (buildTimeConfig.enabled) { boolean metricsEnabled = capabilities.isCapabilityPresent(Capabilities.METRICS); - jdr.registerTracer(jaeger, appConfig, metricsEnabled); + if (metricsEnabled) { + jdr.registerTracerWithMetrics(jaeger, appConfig); + } else { + jdr.registerTracerWithoutMetrics(jaeger, appConfig); + } } } diff --git a/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/JaegerDeploymentRecorder.java b/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/JaegerDeploymentRecorder.java index 5481c0d9b22c5..c025cb1ca2c15 100644 --- a/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/JaegerDeploymentRecorder.java +++ b/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/JaegerDeploymentRecorder.java @@ -5,6 +5,8 @@ import org.jboss.logging.Logger; +import io.jaegertracing.internal.metrics.NoopMetricsFactory; +import io.jaegertracing.spi.MetricsFactory; import io.opentracing.util.GlobalTracer; import io.quarkus.runtime.ApplicationConfig; import io.quarkus.runtime.annotations.Recorder; @@ -15,7 +17,15 @@ public class JaegerDeploymentRecorder { private static final Optional UNKNOWN_SERVICE_NAME = Optional.of("quarkus/unknown"); private static final QuarkusJaegerTracer quarkusTracer = new QuarkusJaegerTracer(); - synchronized public void registerTracer(JaegerConfig jaeger, ApplicationConfig appConfig, boolean metricsEnabled) { + synchronized public void registerTracerWithoutMetrics(JaegerConfig jaeger, ApplicationConfig appConfig) { + registerTracer(jaeger, appConfig, new NoopMetricsFactory()); + } + + synchronized public void registerTracerWithMetrics(JaegerConfig jaeger, ApplicationConfig appConfig) { + registerTracer(jaeger, appConfig, new QuarkusJaegerMetricsFactory()); + } + + private void registerTracer(JaegerConfig jaeger, ApplicationConfig appConfig, MetricsFactory metricsFactory) { if (!jaeger.serviceName.isPresent()) { if (appConfig.name.isPresent()) { jaeger.serviceName = appConfig.name; @@ -24,7 +34,7 @@ synchronized public void registerTracer(JaegerConfig jaeger, ApplicationConfig a } } initTracerConfig(jaeger); - quarkusTracer.setMetricsEnabled(metricsEnabled); + quarkusTracer.setMetricsFactory(metricsFactory); quarkusTracer.reset(); // register Quarkus tracer to GlobalTracer. // Usually the tracer will be registered only here, although consumers diff --git a/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/QuarkusJaegerTracer.java b/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/QuarkusJaegerTracer.java index 7764e7fbc9133..3a67636bf2b7b 100644 --- a/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/QuarkusJaegerTracer.java +++ b/extensions/jaeger/runtime/src/main/java/io/quarkus/jaeger/runtime/QuarkusJaegerTracer.java @@ -2,7 +2,6 @@ import io.jaegertracing.Configuration; import io.jaegertracing.internal.JaegerTracer; -import io.jaegertracing.internal.metrics.NoopMetricsFactory; import io.jaegertracing.spi.MetricsFactory; import io.opentracing.ScopeManager; import io.opentracing.Span; @@ -16,14 +15,14 @@ public class QuarkusJaegerTracer implements Tracer { private volatile JaegerTracer tracer; private boolean logTraceContext; - private boolean metricsEnabled; + private MetricsFactory metricsFactory; void setLogTraceContext(boolean logTraceContext) { this.logTraceContext = logTraceContext; } - void setMetricsEnabled(boolean metricsEnabled) { - this.metricsEnabled = metricsEnabled; + void setMetricsFactory(MetricsFactory metricsFactory) { + this.metricsFactory = metricsFactory; } @Override @@ -42,9 +41,6 @@ private Tracer tracer() { if (tracer == null) { synchronized (this) { if (tracer == null) { - MetricsFactory metricsFactory = metricsEnabled - ? new QuarkusJaegerMetricsFactory() - : new NoopMetricsFactory(); tracer = Configuration.fromEnv() .withMetricsFactory(metricsFactory) .getTracerBuilder()