Skip to content

Commit 239d9a9

Browse files
authored
Align classLoaderMatcher signature with OpenTelemetry (#7125)
* Align classLoaderMatcher signature with OpenTelemetry to avoid need for bridge method * Improve mapping of AgentElementMatchers * Fix resource leak in RequestImplementationClassLoaderMatcher
1 parent 244260b commit 239d9a9

File tree

45 files changed

+100
-60
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+100
-60
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package datadog.opentelemetry.tooling;
2+
3+
import datadog.trace.agent.tooling.bytebuddy.matcher.ClassLoaderMatchers;
4+
import datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers;
5+
import net.bytebuddy.description.method.MethodDescription;
6+
import net.bytebuddy.description.type.TypeDescription;
7+
import net.bytebuddy.matcher.ElementMatcher;
8+
import net.bytebuddy.matcher.ElementMatchers;
9+
10+
/** Replaces OpenTelemetry's {@code AgentElementMatchers} when mapping extensions. */
11+
public final class OtelElementMatchers {
12+
13+
public static ElementMatcher.Junction<TypeDescription> extendsClass(
14+
ElementMatcher<TypeDescription> matcher) {
15+
return HierarchyMatchers.extendsClass(matcher);
16+
}
17+
18+
public static ElementMatcher.Junction<TypeDescription> implementsInterface(
19+
ElementMatcher<TypeDescription> matcher) {
20+
return HierarchyMatchers.implementsInterface(matcher);
21+
}
22+
23+
public static ElementMatcher.Junction<TypeDescription> hasSuperType(
24+
ElementMatcher<TypeDescription> matcher) {
25+
return HierarchyMatchers.hasSuperType(matcher);
26+
}
27+
28+
public static ElementMatcher.Junction<MethodDescription> methodIsDeclaredByType(
29+
ElementMatcher<? super TypeDescription> matcher) {
30+
return ElementMatchers.isDeclaredBy(matcher);
31+
}
32+
33+
public static ElementMatcher.Junction<MethodDescription> hasSuperMethod(
34+
ElementMatcher<? super MethodDescription> matcher) {
35+
return HierarchyMatchers.hasSuperMethod(matcher);
36+
}
37+
38+
public static ElementMatcher.Junction<ClassLoader> hasClassesNamed(String... classNames) {
39+
return ClassLoaderMatchers.hasClassNamedOneOf(classNames);
40+
}
41+
42+
private OtelElementMatchers() {}
43+
}

dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,10 @@ public void visit(
4545
@Override
4646
public MethodVisitor visitMethod(
4747
int access, String name, String descriptor, String signature, String[] exceptions) {
48-
if (!UNSUPPORTED_METHODS.contains(name)) {
49-
return super.visitMethod(access, name, descriptor, signature, exceptions);
50-
} else {
48+
if (UNSUPPORTED_METHODS.contains(name)) {
5149
return null; // remove unsupported method
5250
}
51+
return super.visitMethod(access, name, descriptor, signature, exceptions);
5352
}
5453

5554
private String[] removeUnsupportedTypes(String[] interfaces) {
@@ -84,12 +83,12 @@ static final class Renamer extends Remapper {
8483
RENAMED_TYPES.put(
8584
"io/opentelemetry/javaagent/extension/instrumentation/TypeTransformer",
8685
"datadog/opentelemetry/tooling/OtelTransformer");
86+
RENAMED_TYPES.put(
87+
"io/opentelemetry/javaagent/extension/matcher/AgentElementMatchers",
88+
"datadog/opentelemetry/tooling/OtelElementMatchers");
8789
RENAMED_TYPES.put(
8890
"io/opentelemetry/javaagent/bootstrap/Java8BytecodeBridge",
8991
"datadog/trace/bootstrap/otel/Java8BytecodeBridge");
90-
RENAMED_TYPES.put(
91-
"io/opentelemetry/javaagent/extension/matcher/AgentElementMatchers",
92-
"datadog/trace/agent/tooling/bytebuddy/matcher/HierarchyMatchers");
9392
}
9493

9594
@Override

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public String muzzleDirective() {
142142
}
143143

144144
/** Override this to supply additional class-loader requirements. */
145-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
145+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
146146
return ANY_CLASS_LOADER;
147147
}
148148

dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/ClassLoaderMatchers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
public final class ClassLoaderMatchers {
2323
private static final Logger log = LoggerFactory.getLogger(ClassLoaderMatchers.class);
2424

25-
public static final ElementMatcher<ClassLoader> ANY_CLASS_LOADER = any();
25+
public static final ElementMatcher.Junction<ClassLoader> ANY_CLASS_LOADER = any();
2626

2727
private static final ClassLoader BOOTSTRAP_CLASSLOADER = null;
2828

dd-java-agent/instrumentation/armeria-jetty/src/main/java/datadog/trace/instrumentation/armeria/jetty/ArmeriaHttpConnectionInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public String instrumentedType() {
2424
}
2525

2626
@Override
27-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
27+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
2828
return hasClassNamed("com.linecorp.armeria.server.ServiceRequestContext");
2929
}
3030

dd-java-agent/instrumentation/cxf-2.1/src/main/java/datadog/trace/instrumentation/cxf/InvokerInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public InvokerInstrumentation() {
2424
}
2525

2626
@Override
27-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
27+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
2828
return ClassLoaderMatchers.hasClassNamed("javax.servlet.ServletRequest")
2929
.or(ClassLoaderMatchers.hasClassNamed("jakarta.servlet.ServletRequest"));
3030
}

dd-java-agent/instrumentation/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/CassandraClusterInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Map<String, String> contextStore() {
3636
}
3737

3838
@Override
39-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
39+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
4040
return hasClassNamed("com.datastax.driver.core.EndPoint");
4141
}
4242

dd-java-agent/instrumentation/datastax-cassandra-3/src/main/java/datadog/trace/instrumentation/datastax/cassandra/CassandraClusterInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public Map<String, String> contextStore() {
3737
}
3838

3939
@Override
40-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
40+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
4141
return not(hasClassNamed("com.datastax.driver.core.EndPoint"));
4242
}
4343

dd-java-agent/instrumentation/elasticsearch/rest-7/src/main/java/datadog/trace/instrumentation/elasticsearch7/Elasticsearch7RestClientInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public Elasticsearch7RestClientInstrumentation() {
3131
}
3232

3333
@Override
34-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
34+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3535
// Avoid matching pre-ES7 releases which have their own instrumentations.
3636
return hasClassNamed("org.elasticsearch.client.RestClient$InternalRequest");
3737
}

dd-java-agent/instrumentation/elasticsearch/transport-7.3/src/main/java/datadog/trace/instrumentation/elasticsearch7_3/Elasticsearch73TransportClientInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Elasticsearch73TransportClientInstrumentation() {
3232
}
3333

3434
@Override
35-
public ElementMatcher<ClassLoader> classLoaderMatcher() {
35+
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3636
// Avoid matching pre-ES7 releases which have their own instrumentations.
3737
return hasClassNamed("org.elasticsearch.action.ActionType");
3838
}

0 commit comments

Comments
 (0)