Move Trie back to javaagent-tooling (#4300)
* Move Trie back to javaagent-tooling * Code review comments
This commit is contained in:
parent
4be3583c20
commit
3e93dc8f29
|
@ -6,7 +6,7 @@
|
||||||
package io.opentelemetry.javaagent.instrumentation.api.internal;
|
package io.opentelemetry.javaagent.instrumentation.api.internal;
|
||||||
|
|
||||||
import io.opentelemetry.instrumentation.api.config.Config;
|
import io.opentelemetry.instrumentation.api.config.Config;
|
||||||
import io.opentelemetry.javaagent.instrumentation.api.util.Trie;
|
import java.util.function.Predicate;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ public final class InstrumentedTaskClasses {
|
||||||
@Override
|
@Override
|
||||||
protected Boolean computeValue(Class<?> taskClass) {
|
protected Boolean computeValue(Class<?> taskClass) {
|
||||||
// do not instrument ignored task classes
|
// do not instrument ignored task classes
|
||||||
if (ignoredTaskClasses.getOrDefault(taskClass.getName(), false)) {
|
if (ignoredTaskClassesPredicate.test(taskClass.getName())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Don't trace runnables from libraries that are packaged inside the agent.
|
// Don't trace runnables from libraries that are packaged inside the agent.
|
||||||
|
@ -38,18 +38,18 @@ public final class InstrumentedTaskClasses {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private static volatile Trie<Boolean> ignoredTaskClasses;
|
private static volatile Predicate<String> ignoredTaskClassesPredicate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the configured ignored tasks trie. This method is called internally from the agent
|
* Sets the configured ignored tasks predicate. This method is called internally from the agent
|
||||||
* classloader.
|
* classloader.
|
||||||
*/
|
*/
|
||||||
public static void setIgnoredTaskClasses(Trie<Boolean> ignoredTasksTrie) {
|
public static void setIgnoredTaskClassesPredicate(Predicate<String> ignoredTasksTriePredicate) {
|
||||||
if (InstrumentedTaskClasses.ignoredTaskClasses != null) {
|
if (InstrumentedTaskClasses.ignoredTaskClassesPredicate != null) {
|
||||||
logger.warn("Ignored task classes were already set earlier; returning.");
|
logger.warn("Ignored task classes were already set earlier; returning.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
InstrumentedTaskClasses.ignoredTaskClasses = ignoredTasksTrie;
|
InstrumentedTaskClasses.ignoredTaskClassesPredicate = ignoredTasksTriePredicate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,6 +31,7 @@ import io.opentelemetry.javaagent.tooling.ignore.IgnoredClassLoadersMatcher;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesBuilderImpl;
|
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesBuilderImpl;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesMatcher;
|
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesMatcher;
|
||||||
import io.opentelemetry.javaagent.tooling.muzzle.AgentTooling;
|
import io.opentelemetry.javaagent.tooling.muzzle.AgentTooling;
|
||||||
|
import io.opentelemetry.javaagent.tooling.util.Trie;
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -209,7 +210,8 @@ public class AgentInstaller {
|
||||||
configurer.configure(config, builder);
|
configurer.configure(config, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstrumentedTaskClasses.setIgnoredTaskClasses(builder.buildIgnoredTasksTrie());
|
Trie<Boolean> ignoredTasksTrie = builder.buildIgnoredTasksTrie();
|
||||||
|
InstrumentedTaskClasses.setIgnoredTaskClassesPredicate(ignoredTasksTrie::contains);
|
||||||
|
|
||||||
return agentBuilder
|
return agentBuilder
|
||||||
.ignore(any(), new IgnoredClassLoadersMatcher(builder.buildIgnoredClassLoadersTrie()))
|
.ignore(any(), new IgnoredClassLoadersMatcher(builder.buildIgnoredClassLoadersTrie()))
|
||||||
|
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.javaagent.tooling.ignore;
|
||||||
|
|
||||||
import io.opentelemetry.instrumentation.api.caching.Cache;
|
import io.opentelemetry.instrumentation.api.caching.Cache;
|
||||||
import io.opentelemetry.javaagent.bootstrap.PatchLogger;
|
import io.opentelemetry.javaagent.bootstrap.PatchLogger;
|
||||||
import io.opentelemetry.javaagent.instrumentation.api.util.Trie;
|
import io.opentelemetry.javaagent.tooling.util.Trie;
|
||||||
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
|
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
package io.opentelemetry.javaagent.tooling.ignore;
|
package io.opentelemetry.javaagent.tooling.ignore;
|
||||||
|
|
||||||
import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
|
import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder;
|
||||||
import io.opentelemetry.javaagent.instrumentation.api.util.Trie;
|
import io.opentelemetry.javaagent.tooling.util.Trie;
|
||||||
|
|
||||||
public class IgnoredTypesBuilderImpl implements IgnoredTypesBuilder {
|
public class IgnoredTypesBuilderImpl implements IgnoredTypesBuilder {
|
||||||
private final Trie.Builder<IgnoreAllow> ignoredTypesTrie = Trie.newBuilder();
|
private final Trie.Builder<IgnoreAllow> ignoredTypesTrie = Trie.newBuilder();
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.tooling.ignore;
|
package io.opentelemetry.javaagent.tooling.ignore;
|
||||||
|
|
||||||
import io.opentelemetry.javaagent.instrumentation.api.util.Trie;
|
import io.opentelemetry.javaagent.tooling.util.Trie;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.api.util;
|
package io.opentelemetry.javaagent.tooling.util;
|
||||||
|
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
|
@ -32,6 +32,11 @@ public interface Trie<V> {
|
||||||
*/
|
*/
|
||||||
V getOrDefault(CharSequence str, V defaultValue);
|
V getOrDefault(CharSequence str, V defaultValue);
|
||||||
|
|
||||||
|
/** Returns {@code true} if this trie contains the prefix {@code str}. */
|
||||||
|
default boolean contains(CharSequence str) {
|
||||||
|
return getOrNull(str) != null;
|
||||||
|
}
|
||||||
|
|
||||||
interface Builder<V> {
|
interface Builder<V> {
|
||||||
|
|
||||||
/** Associate {@code value} with the string {@code str}. */
|
/** Associate {@code value} with the string {@code str}. */
|
|
@ -3,7 +3,7 @@
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.api.util;
|
package io.opentelemetry.javaagent.tooling.util;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
|
@ -3,10 +3,12 @@
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.api.util;
|
package io.opentelemetry.javaagent.tooling.util;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -17,9 +19,11 @@ class TrieTest {
|
||||||
Trie.<Integer>newBuilder().put("abc", 0).put("abcd", 10).put("abcde", 20).build();
|
Trie.<Integer>newBuilder().put("abc", 0).put("abcd", 10).put("abcde", 20).build();
|
||||||
|
|
||||||
assertNull(trie.getOrNull("ab"));
|
assertNull(trie.getOrNull("ab"));
|
||||||
|
assertFalse(trie.contains("ab"));
|
||||||
assertEquals(0, trie.getOrNull("abc"));
|
assertEquals(0, trie.getOrNull("abc"));
|
||||||
assertEquals(10, trie.getOrNull("abcd"));
|
assertEquals(10, trie.getOrNull("abcd"));
|
||||||
assertEquals(20, trie.getOrNull("abcde"));
|
assertEquals(20, trie.getOrNull("abcde"));
|
||||||
|
assertTrue(trie.contains("abcde"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
|
@ -7,12 +7,12 @@ package io.opentelemetry.javaagent.testing.bytebuddy;
|
||||||
|
|
||||||
import io.opentelemetry.instrumentation.api.config.Config;
|
import io.opentelemetry.instrumentation.api.config.Config;
|
||||||
import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
|
import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer;
|
||||||
import io.opentelemetry.javaagent.instrumentation.api.util.Trie;
|
|
||||||
import io.opentelemetry.javaagent.tooling.SafeServiceLoader;
|
import io.opentelemetry.javaagent.tooling.SafeServiceLoader;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.AdditionalLibraryIgnoredTypesConfigurer;
|
import io.opentelemetry.javaagent.tooling.ignore.AdditionalLibraryIgnoredTypesConfigurer;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.GlobalIgnoredTypesConfigurer;
|
import io.opentelemetry.javaagent.tooling.ignore.GlobalIgnoredTypesConfigurer;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.IgnoreAllow;
|
import io.opentelemetry.javaagent.tooling.ignore.IgnoreAllow;
|
||||||
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesBuilderImpl;
|
import io.opentelemetry.javaagent.tooling.ignore.IgnoredTypesBuilderImpl;
|
||||||
|
import io.opentelemetry.javaagent.tooling.util.Trie;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
Loading…
Reference in New Issue