SkipClassLoaderMatcher use str-switch in shouldSkipClass(ClassLoader)
This commit is contained in:
parent
352469afde
commit
52e0eb9d37
|
@ -2,13 +2,9 @@ package datadog.trace.agent.tooling;
|
||||||
|
|
||||||
import static datadog.trace.bootstrap.WeakMap.Provider.newWeakMap;
|
import static datadog.trace.bootstrap.WeakMap.Provider.newWeakMap;
|
||||||
|
|
||||||
import datadog.trace.bootstrap.DatadogClassLoader;
|
|
||||||
import datadog.trace.bootstrap.PatchLogger;
|
import datadog.trace.bootstrap.PatchLogger;
|
||||||
import datadog.trace.bootstrap.WeakMap;
|
import datadog.trace.bootstrap.WeakMap;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
|
|
||||||
|
@ -36,18 +32,8 @@ public class ClassLoaderMatcher {
|
||||||
public static final SkipClassLoaderMatcher INSTANCE = new SkipClassLoaderMatcher();
|
public static final SkipClassLoaderMatcher INSTANCE = new SkipClassLoaderMatcher();
|
||||||
/* Cache of classloader-instance -> (true|false). True = skip instrumentation. False = safe to instrument. */
|
/* Cache of classloader-instance -> (true|false). True = skip instrumentation. False = safe to instrument. */
|
||||||
private static final WeakMap<ClassLoader, Boolean> SKIP_CACHE = newWeakMap();
|
private static final WeakMap<ClassLoader, Boolean> SKIP_CACHE = newWeakMap();
|
||||||
private static final Set<String> CLASSLOADER_CLASSES_TO_SKIP;
|
private static final String DATADOG_CLASSLOADER_NAME =
|
||||||
|
"datadog.trace.bootstrap.DatadogClassLoader";
|
||||||
static {
|
|
||||||
final Set<String> classesToSkip = new HashSet<>();
|
|
||||||
classesToSkip.add("org.codehaus.groovy.runtime.callsite.CallSiteClassLoader");
|
|
||||||
classesToSkip.add("sun.reflect.DelegatingClassLoader");
|
|
||||||
classesToSkip.add("jdk.internal.reflect.DelegatingClassLoader");
|
|
||||||
classesToSkip.add("clojure.lang.DynamicClassLoader");
|
|
||||||
classesToSkip.add("org.apache.cxf.common.util.ASMHelper$TypeHelperClassLoader");
|
|
||||||
classesToSkip.add(DatadogClassLoader.class.getName());
|
|
||||||
CLASSLOADER_CLASSES_TO_SKIP = Collections.unmodifiableSet(classesToSkip);
|
|
||||||
}
|
|
||||||
|
|
||||||
private SkipClassLoaderMatcher() {}
|
private SkipClassLoaderMatcher() {}
|
||||||
|
|
||||||
|
@ -61,7 +47,17 @@ public class ClassLoaderMatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldSkipClass(final ClassLoader loader) {
|
private boolean shouldSkipClass(final ClassLoader loader) {
|
||||||
return CLASSLOADER_CLASSES_TO_SKIP.contains(loader.getClass().getName());
|
switch (loader.getClass().getName()) {
|
||||||
|
case "org.codehaus.groovy.runtime.callsite.CallSiteClassLoader":
|
||||||
|
case "sun.reflect.DelegatingClassLoader":
|
||||||
|
case "jdk.internal.reflect.DelegatingClassLoader":
|
||||||
|
case "clojure.lang.DynamicClassLoader":
|
||||||
|
case "org.apache.cxf.common.util.ASMHelper$TypeHelperClassLoader":
|
||||||
|
case "sun.misc.Launcher$ExtClassLoader":
|
||||||
|
case DATADOG_CLASSLOADER_NAME:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldSkipInstance(final ClassLoader loader) {
|
private boolean shouldSkipInstance(final ClassLoader loader) {
|
||||||
|
|
|
@ -33,6 +33,11 @@ class ClassLoaderMatcherTest extends DDSpecification {
|
||||||
!ClassLoaderMatcher.skipClassLoader().matches(null)
|
!ClassLoaderMatcher.skipClassLoader().matches(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def "DatadogClassLoader class name is hardcoded in ClassLoaderMatcher"() {
|
||||||
|
expect:
|
||||||
|
DatadogClassLoader.name == "datadog.trace.bootstrap.DatadogClassLoader"
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A URLClassloader which only delegates java.* classes
|
* A URLClassloader which only delegates java.* classes
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue