Skip to content

Commit 0e62949

Browse files
lauritotelbot[bot]
andauthored
Simplify boot prefix handling (#14850)
Co-authored-by: otelbot <[email protected]>
1 parent 35ccc0e commit 0e62949

File tree

5 files changed

+12
-57
lines changed

5 files changed

+12
-57
lines changed

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/BootDelegationInstrumentation.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1818
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1919

20+
import io.opentelemetry.javaagent.bootstrap.BootstrapPackagePrefixesHolder;
2021
import io.opentelemetry.javaagent.bootstrap.CallDepth;
2122
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2223
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
24+
import java.util.List;
2325
import net.bytebuddy.asm.Advice;
2426
import net.bytebuddy.asm.Advice.AssignReturned;
2527
import net.bytebuddy.description.method.MethodDescription;
@@ -68,7 +70,13 @@ public void transform(TypeTransformer transformer) {
6870
public static class LoadClassAdvice {
6971

7072
@Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class)
71-
public static Class<?> onEnter(@Advice.Argument(0) String name) {
73+
public static Class<?> onEnter(
74+
@Advice.This ClassLoader classLoader, @Advice.Argument(0) String name) {
75+
// must be read before call depth is incremented as setting the call depth prevents the class
76+
// loader of the instrumented class from loading BootstrapPackagePrefixesHolder itself
77+
List<String> bootstrapPackagePrefixes =
78+
BootstrapPackagePrefixesHolder.getBootstrapPackagePrefixes();
79+
7280
// need to use call depth here to prevent re-entry from call to Class.forName() below
7381
// because on some JVMs (e.g. IBM's, though IBM bootstrap loader is explicitly excluded above)
7482
// Class.forName() ends up calling loadClass() on the bootstrap loader which would then come
@@ -80,7 +88,7 @@ public static Class<?> onEnter(@Advice.Argument(0) String name) {
8088
}
8189

8290
try {
83-
for (String prefix : BootstrapPackagesHelper.bootstrapPackagesPrefixes) {
91+
for (String prefix : bootstrapPackagePrefixes) {
8492
if (name.startsWith(prefix)) {
8593
try {
8694
return Class.forName(name, false, null);

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/BootstrapPackagesHelper.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1313
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1414
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
15-
import java.util.Arrays;
1615
import java.util.List;
1716

1817
@AutoService(InstrumentationModule.class)
@@ -28,13 +27,6 @@ public boolean defaultEnabled(ConfigProperties config) {
2827
return true;
2928
}
3029

31-
@Override
32-
public List<String> getAdditionalHelperClassNames() {
33-
return Arrays.asList(
34-
"io.opentelemetry.javaagent.instrumentation.internal.classloader.BootstrapPackagesHelper",
35-
"io.opentelemetry.javaagent.tooling.Constants");
36-
}
37-
3830
@Override
3931
public List<String> injectedClassNames() {
4032
return getAdditionalHelperClassNames();

javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/BootstrapPackagePrefixesHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public final class BootstrapPackagePrefixesHolder {
2020

2121
private static volatile List<String> bootstrapPackagePrefixes;
2222

23-
public static List<String> getBoostrapPackagePrefixes() {
23+
public static List<String> getBootstrapPackagePrefixes() {
2424
return bootstrapPackagePrefixes;
2525
}
2626

testing-common/integration-tests/src/test/java/instrumentation/AgentInstrumentationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class AgentInstrumentationTest {
3939

4040
private static final ClassLoader BOOTSTRAP_CLASSLOADER = null;
4141
private static final List<String> BOOTSTRAP_PACKAGE_PREFIXES =
42-
BootstrapPackagePrefixesHolder.getBoostrapPackagePrefixes();
42+
BootstrapPackagePrefixesHolder.getBootstrapPackagePrefixes();
4343

4444
@RegisterExtension
4545
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();

0 commit comments

Comments
 (0)