Skip to content

Commit 0bb815b

Browse files
committed
Remove indy specific handling from muzzle
1 parent 8dc3ead commit 0bb815b

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import java.util.List;
4040
import java.util.concurrent.atomic.AtomicBoolean;
4141
import java.util.function.Function;
42+
import java.util.function.UnaryOperator;
4243
import net.bytebuddy.agent.builder.AgentBuilder;
4344
import net.bytebuddy.description.annotation.AnnotationSource;
4445
import net.bytebuddy.description.type.TypeDescription;
@@ -118,7 +119,17 @@ private AgentBuilder installIndyModule(
118119
.injectClasses(injectedClassesCollector);
119120
}
120121

121-
MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule);
122+
MuzzleMatcher muzzleMatcher =
123+
new MuzzleMatcher(
124+
logger,
125+
instrumentationModule,
126+
cl ->
127+
// In indy modules muzzle searches for types in both application class loader and in
128+
// the agent class loader. Since we allow using agent class in indy instrumentation
129+
// these classes are treated as regular non-helper classes for which muzzle performs
130+
// reference checks.
131+
IndyModuleRegistry.createInstrumentationClassLoaderForMuzzle(
132+
instrumentationModule, cl));
122133

123134
Function<ClassLoader, List<HelperClassDefinition>> helperGenerator =
124135
cl -> {
@@ -187,7 +198,8 @@ private AgentBuilder installInjectingModule(
187198
return parentAgentBuilder;
188199
}
189200

190-
MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule);
201+
MuzzleMatcher muzzleMatcher =
202+
new MuzzleMatcher(logger, instrumentationModule, UnaryOperator.identity());
191203
AgentBuilder.Transformer helperInjector =
192204
new HelperInjector(
193205
instrumentationModule.instrumentationName(),

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@
1414
import io.opentelemetry.javaagent.tooling.TransformSafeLogger;
1515
import io.opentelemetry.javaagent.tooling.Utils;
1616
import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig;
17-
import io.opentelemetry.javaagent.tooling.instrumentation.indy.IndyModuleRegistry;
18-
import io.opentelemetry.javaagent.tooling.instrumentation.indy.InstrumentationModuleClassLoader;
1917
import io.opentelemetry.javaagent.tooling.muzzle.Mismatch;
2018
import io.opentelemetry.javaagent.tooling.muzzle.ReferenceMatcher;
2119
import java.security.ProtectionDomain;
2220
import java.util.List;
2321
import java.util.concurrent.atomic.AtomicBoolean;
22+
import java.util.function.UnaryOperator;
2423
import java.util.logging.Level;
2524
import java.util.logging.Logger;
2625
import net.bytebuddy.agent.builder.AgentBuilder;
@@ -38,15 +37,19 @@ class MuzzleMatcher implements AgentBuilder.RawMatcher {
3837

3938
private final TransformSafeLogger instrumentationLogger;
4039
private final InstrumentationModule instrumentationModule;
40+
private final UnaryOperator<ClassLoader> classLoaderTransformer;
4141
private final Level muzzleLogLevel;
4242
private final AtomicBoolean initialized = new AtomicBoolean(false);
4343
private final Cache<ClassLoader, Boolean> matchCache = Cache.weak();
4444
private volatile ReferenceMatcher referenceMatcher;
4545

4646
MuzzleMatcher(
47-
TransformSafeLogger instrumentationLogger, InstrumentationModule instrumentationModule) {
47+
TransformSafeLogger instrumentationLogger,
48+
InstrumentationModule instrumentationModule,
49+
UnaryOperator<ClassLoader> classLoaderTransformer) {
4850
this.instrumentationLogger = instrumentationLogger;
4951
this.instrumentationModule = instrumentationModule;
52+
this.classLoaderTransformer = classLoaderTransformer;
5053
this.muzzleLogLevel = EarlyInitAgentConfig.get().isDebug() ? WARNING : FINE;
5154
}
5255

@@ -60,18 +63,7 @@ public boolean matches(
6063
if (classLoader == BOOTSTRAP_LOADER) {
6164
classLoader = Utils.getBootstrapProxy();
6265
}
63-
if (instrumentationModule.isIndyModule()) {
64-
return matchCache.computeIfAbsent(
65-
classLoader,
66-
cl -> {
67-
InstrumentationModuleClassLoader moduleCl =
68-
IndyModuleRegistry.createInstrumentationClassLoaderWithoutRegistration(
69-
instrumentationModule, cl);
70-
return doesMatch(moduleCl);
71-
});
72-
} else {
73-
return matchCache.computeIfAbsent(classLoader, this::doesMatch);
74-
}
66+
return matchCache.computeIfAbsent(classLoaderTransformer.apply(classLoader), this::doesMatch);
7567
}
7668

7769
private boolean doesMatch(ClassLoader classLoader) {

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/IndyModuleRegistry.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,8 @@ public static InstrumentationModuleClassLoader getInstrumentationClassLoader(
9595
* modules from the same module group (see {@link #getModuleGroup(InstrumentationModule)}) will
9696
* not be installed in this class loader.
9797
*/
98-
public static InstrumentationModuleClassLoader
99-
createInstrumentationClassLoaderWithoutRegistration(
100-
InstrumentationModule module, ClassLoader instrumentedClassLoader) {
98+
public static InstrumentationModuleClassLoader createInstrumentationClassLoaderForMuzzle(
99+
InstrumentationModule module, ClassLoader instrumentedClassLoader) {
101100
// TODO: remove this method and replace usages with a custom TypePool implementation instead
102101
ClassLoader agentOrExtensionCl = module.getClass().getClassLoader();
103102
InstrumentationModuleClassLoader cl =

0 commit comments

Comments
 (0)