Skip to content

Commit 6313391

Browse files
authored
Rewrite @Advice.Enter for indy advice (#9887)
1 parent a3b0e31 commit 6313391

File tree

15 files changed

+231
-132
lines changed

15 files changed

+231
-132
lines changed

instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisInstrumentationModule.java

-10
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,4 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3232
public List<TypeInstrumentation> typeInstrumentations() {
3333
return asList(new JedisConnectionInstrumentation(), new JedisInstrumentation());
3434
}
35-
36-
@Override
37-
public boolean isIndyModule() {
38-
// java.lang.NoClassDefFoundError:
39-
// io/opentelemetry/javaagent/instrumentation/jedis/JedisRequestContext
40-
// at redis.clients.jedis.Jedis.flushAll(Jedis.java:367)
41-
// at io.opentelemetry.javaagent.instrumentation.jedis.v1_4
42-
// .JedisClientTest.setup(JedisClientTest.java:49)
43-
return false;
44-
}
4535
}

instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisInstrumentationModule.java

-10
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,4 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3434
public List<TypeInstrumentation> typeInstrumentations() {
3535
return asList(new JedisConnectionInstrumentation(), new JedisInstrumentation());
3636
}
37-
38-
@Override
39-
public boolean isIndyModule() {
40-
// java.lang.NoClassDefFoundError:
41-
// io/opentelemetry/javaagent/instrumentation/jedis/JedisRequestContext
42-
// at redis.clients.jedis.BinaryJedis.flushAll(BinaryJedis.java:595)
43-
// at io.opentelemetry.javaagent.instrumentation.jedis.v3_0
44-
// .Jedis30ClientTest.setup(Jedis30ClientTest.java:50)
45-
return false;
46-
}
4737
}

instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisInstrumentationModule.java

-10
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,4 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3030
public List<TypeInstrumentation> typeInstrumentations() {
3131
return asList(new JedisConnectionInstrumentation(), new JedisInstrumentation());
3232
}
33-
34-
@Override
35-
public boolean isIndyModule() {
36-
// java.lang.NoClassDefFoundError:
37-
// io/opentelemetry/javaagent/instrumentation/jedis/JedisRequestContext
38-
// at redis.clients.jedis.Jedis.set(Jedis.java:4613)
39-
// at io.opentelemetry.javaagent.instrumentation.jedis
40-
// .v4_0.Jedis40ClientTest.getCommand(Jedis40ClientTest.java:78)
41-
return false;
42-
}
4333
}

instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaClientsInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ public KafkaClientsInstrumentationModule() {
1818
super("kafka-clients", "kafka-clients-0.11", "kafka");
1919
}
2020

21-
@Override
22-
public boolean isIndyModule() {
23-
// OpenTelemetryMetricsReporter is not available in app class loader
24-
return false;
25-
}
26-
2721
@Override
2822
public List<TypeInstrumentation> typeInstrumentations() {
2923
return asList(

instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/metrics/KafkaMetricsInstrumentationModule.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.ClassInjector;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.InjectionMode;
1316
import java.util.List;
1417

1518
@AutoService(InstrumentationModule.class)
16-
public class KafkaMetricsInstrumentationModule extends InstrumentationModule {
19+
public class KafkaMetricsInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1721
public KafkaMetricsInstrumentationModule() {
1822
super(
1923
"kafka-clients-metrics",
@@ -24,9 +28,11 @@ public KafkaMetricsInstrumentationModule() {
2428
}
2529

2630
@Override
27-
public boolean isIndyModule() {
28-
// OpenTelemetryMetricsReporter is not available in app class loader
29-
return false;
31+
public void injectClasses(ClassInjector injector) {
32+
injector
33+
.proxyBuilder(
34+
"io.opentelemetry.instrumentation.kafka.internal.OpenTelemetryMetricsReporter")
35+
.inject(InjectionMode.CLASS_ONLY);
3036
}
3137

3238
@Override

instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsInstrumentationModule.java

-7
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ public KafkaStreamsInstrumentationModule() {
1818
super("kafka-streams", "kafka-streams-0.11", "kafka");
1919
}
2020

21-
@Override
22-
public boolean isIndyModule() {
23-
// java.lang.NoClassDefFoundError:
24-
// io/opentelemetry/javaagent/instrumentation/kafkastreams/StateHolder
25-
return false;
26-
}
27-
2821
@Override
2922
public List<TypeInstrumentation> typeInstrumentations() {
3023
return asList(

instrumentation/quarkus-resteasy-reactive/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quarkus/resteasy/reactive/QuarkusResteasyReactiveInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ public QuarkusResteasyReactiveInstrumentationModule() {
1919
super("quarkus", "jaxrs", "quarkus-resteasy-reactive", "quarkus-resteasy-reactive-3.0");
2020
}
2121

22-
@Override
23-
public boolean isIndyModule() {
24-
// RunAdvice returns OtelRequestContext that is not available to the application class loader
25-
return false;
26-
}
27-
2822
@Override
2923
public List<TypeInstrumentation> typeInstrumentations() {
3024
return asList(

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackInstrumentationModule.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ public RatpackInstrumentationModule() {
2020

2121
@Override
2222
public boolean isIndyModule() {
23-
// StartAdvice uses both @Advice.Argument(readOnly = false) and return value from an
24-
// @OnMethodEnter advice
23+
// java.lang.ClassCastException: class
24+
// io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.AutoValue_ServerContext
25+
// cannot be cast to class
26+
// io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.ServerContext
27+
// (io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.AutoValue_ServerContext is in unnamed module of loader 'app'; io.opentelemetry.javaagent.shaded.instrumentation.netty.v4_1.internal.ServerContext is in unnamed module of loader io.opentelemetry.javaagent.tooling.instrumentation.indy.InstrumentationModuleClassLoader @7f088b5c)
2528
return false;
2629
}
2730

instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ public ReactorKafkaInstrumentationModule() {
1919
super("reactor-kafka", "reactor-kafka-1.0");
2020
}
2121

22-
@Override
23-
public boolean isIndyModule() {
24-
// OpenTelemetryMetricsReporter is not available in app class loader
25-
return false;
26-
}
27-
2822
@Override
2923
public List<TypeInstrumentation> typeInstrumentations() {
3024
return asList(

instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyInstrumentationModule.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
99
import static java.util.Arrays.asList;
10+
import static java.util.Collections.singletonList;
1011

1112
import com.google.auto.service.AutoService;
1213
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1314
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1416
import java.util.List;
1517
import java.util.function.BiConsumer;
1618
import java.util.function.Function;
@@ -24,18 +26,13 @@
2426
* HttpClient#doOnRequest(BiConsumer)} to pass context from the caller to Reactor to Netty.
2527
*/
2628
@AutoService(InstrumentationModule.class)
27-
public class ReactorNettyInstrumentationModule extends InstrumentationModule {
29+
public class ReactorNettyInstrumentationModule extends InstrumentationModule
30+
implements ExperimentalInstrumentationModule {
2831

2932
public ReactorNettyInstrumentationModule() {
3033
super("reactor-netty", "reactor-netty-1.0");
3134
}
3235

33-
@Override
34-
public boolean isIndyModule() {
35-
// ResponseMonoAdvice uses both @Advice.Local and return value from an @OnMethodEnter advice
36-
return false;
37-
}
38-
3936
@Override
4037
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
4138
// Introduced in 1.0.0
@@ -47,6 +44,11 @@ public boolean isHelperClass(String className) {
4744
return className.startsWith("reactor.netty.http.client.HttpClientConfigBuddy");
4845
}
4946

47+
@Override
48+
public List<String> injectedClassNames() {
49+
return singletonList("reactor.netty.http.client.HttpClientConfigBuddy");
50+
}
51+
5052
@Override
5153
public List<TypeInstrumentation> typeInstrumentations() {
5254
return asList(

instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ public SpringKafkaInstrumentationModule() {
1818
super("spring-kafka", "spring-kafka-2.7");
1919
}
2020

21-
@Override
22-
public boolean isIndyModule() {
23-
// OpenTelemetryMetricsReporter is not available in app class loader
24-
return false;
25-
}
26-
2721
@Override
2822
public List<TypeInstrumentation> typeInstrumentations() {
2923
return asList(

instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/SpymemcachedInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ public SpymemcachedInstrumentationModule() {
1919
super("spymemcached", "spymemcached-2.12");
2020
}
2121

22-
@Override
23-
public boolean isIndyModule() {
24-
// SyncOperationAdvice uses both @Advice.Local and return value from an @OnMethodEnter advice
25-
return false;
26-
}
27-
2822
@Override
2923
public List<TypeInstrumentation> typeInstrumentations() {
3024
return singletonList(new MemcachedClientInstrumentation());

instrumentation/spymemcached-2.12/javaagent/src/test/groovy/SpymemcachedTest.groovy

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.google.common.util.concurrent.MoreExecutors
77
import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification
88
import io.opentelemetry.instrumentation.test.asserts.TraceAssert
9-
import io.opentelemetry.javaagent.instrumentation.spymemcached.CompletionListener
109
import io.opentelemetry.semconv.SemanticAttributes
1110
import net.spy.memcached.CASResponse
1211
import net.spy.memcached.ConnectionFactory
@@ -627,15 +626,15 @@ class SpymemcachedTest extends AgentInstrumentationSpecification {
627626
"$SemanticAttributes.DB_OPERATION" operation
628627

629628
if (error == "canceled") {
630-
"${CompletionListener.DB_COMMAND_CANCELLED}" true
629+
"spymemcached.command.cancelled" true
631630
}
632631

633632
if (result == "hit") {
634-
"${CompletionListener.MEMCACHED_RESULT}" CompletionListener.HIT
633+
"spymemcached.result" "hit"
635634
}
636635

637636
if (result == "miss") {
638-
"${CompletionListener.MEMCACHED_RESULT}" CompletionListener.MISS
637+
"spymemcached.result" "miss"
639638
}
640639
}
641640
}

instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaInstrumentationModule.java

-6
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ public VertxKafkaInstrumentationModule() {
1919
super("vertx-kafka-client", "vertx-kafka-client-3.6", "vertx");
2020
}
2121

22-
@Override
23-
public boolean isIndyModule() {
24-
// OpenTelemetryMetricsReporter is not available in app class loader
25-
return false;
26-
}
27-
2822
@Override
2923
public List<TypeInstrumentation> typeInstrumentations() {
3024
return asList(

0 commit comments

Comments
 (0)