Skip to content

Commit 1d50b49

Browse files
committed
Decouple OpenTelemetry bean initialization from quarkus.otel.sdk.disabled config value
This is a quick fix, but we should follow up with a fix that ensure that the recorder runs after the OTel recorder - Relates to: quarkiverse/quarkus-langchain4j#1607
1 parent 02ef5fd commit 1d50b49

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package io.quarkus.opentelemetry.deployment;
2+
3+
import static io.restassured.RestAssured.when;
4+
5+
import jakarta.enterprise.inject.spi.CDI;
6+
import jakarta.ws.rs.GET;
7+
import jakarta.ws.rs.Path;
8+
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.extension.RegisterExtension;
11+
12+
import io.opentelemetry.api.OpenTelemetry;
13+
import io.opentelemetry.api.trace.Span;
14+
import io.opentelemetry.api.trace.Tracer;
15+
import io.opentelemetry.context.Scope;
16+
import io.quarkus.test.QuarkusUnitTest;
17+
18+
public class TracerAsBeanWhenOTelSDKDisabledTest {
19+
20+
@RegisterExtension
21+
static final QuarkusUnitTest config = new QuarkusUnitTest()
22+
.withApplicationRoot((jar) -> jar.addClasses(Resource.class))
23+
.overrideRuntimeConfigKey("quarkus.otel.sdk.disabled", "true");
24+
25+
@Test
26+
public void test() {
27+
when().get("resource")
28+
.then()
29+
.statusCode(200);
30+
}
31+
32+
@Path("resource")
33+
public static class Resource {
34+
35+
private final Tracer tracer;
36+
37+
public Resource(Tracer tracer) {
38+
this.tracer = tracer;
39+
}
40+
41+
@GET
42+
public String get() {
43+
Span span = tracer.spanBuilder("dummy").startSpan();
44+
try (Scope scope = span.makeCurrent()) {
45+
var otel = CDI.current().select(OpenTelemetry.class).get();
46+
return otel.toString();// we don't care about the string itself, all we care about is that OTel is initialized
47+
} catch (Throwable t) {
48+
span.recordException(t);
49+
throw t;
50+
} finally {
51+
span.end();
52+
}
53+
}
54+
}
55+
}

extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/InstrumentationRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ public Consumer<VertxOptions> getVertxTracingOptions() {
5454
/* RUNTIME INIT */
5555
@RuntimeInit
5656
public void setupVertxTracer(BeanContainer beanContainer, boolean sqlClientAvailable, boolean redisClientAvailable) {
57+
OpenTelemetry openTelemetry = beanContainer.beanInstance(OpenTelemetry.class); // always force initialization of OTel
5758

5859
if (runtimeConfig.getValue().sdkDisabled()) {
5960
return;
6061
}
6162

62-
OpenTelemetry openTelemetry = beanContainer.beanInstance(OpenTelemetry.class);
6363
List<InstrumenterVertxTracer<?, ?>> tracers = new ArrayList<>(4);
6464
if (runtimeConfig.getValue().instrument().vertxHttp()) {
6565
tracers.add(new HttpInstrumenterVertxTracer(openTelemetry, runtimeConfig.getValue(), buildConfig));

0 commit comments

Comments
 (0)