From 7a6fcb7393db5c2220aaeba9d6e44e2cdbaf929c Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Wed, 4 Oct 2023 12:20:50 +0200 Subject: [PATCH 1/4] Added support for virtual thread executors --- .../executors/ExecutorMatchers.java | 1 + .../ExecutorInstrumentationTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java b/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java index 40d2e50c1ae1..1c3d7497ab35 100644 --- a/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java +++ b/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java @@ -78,6 +78,7 @@ final class ExecutorMatchers { "java.util.concurrent.ForkJoinPool", "java.util.concurrent.ScheduledThreadPoolExecutor", "java.util.concurrent.ThreadPoolExecutor", + "java.util.concurrent.ThreadPerTaskExecutor", "org.apache.tomcat.util.threads.ThreadPoolExecutor", "org.eclipse.jetty.util.thread.QueuedThreadPool", // dispatch() covered in the jetty // module diff --git a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java index aa05c1b6af0f..c7ba78e84320 100644 --- a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java +++ b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java @@ -7,6 +7,8 @@ import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -24,6 +26,8 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledForJreRange; +import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.extension.RegisterExtension; abstract class ExecutorInstrumentationTest @@ -47,6 +51,23 @@ static class ThreadPoolExecutorTest extends ExecutorInstrumentationTest { + VirtualThreadExecutorTest() { + super(newVirtualThreadPerAskExecutor()); + } + + private static ExecutorService newVirtualThreadPerAskExecutor() { + Method newVirtualThreadPerTaskExecutor; + try { + newVirtualThreadPerTaskExecutor = Executors.class.getMethod("newVirtualThreadPerTaskExecutor"); + ExecutorService executor = (ExecutorService) newVirtualThreadPerTaskExecutor.invoke(null); + return executor; + } catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException e) { + throw new IllegalStateException("Should not happen on Java 21+", e); + } + } + } static class WorkStealingPoolTest extends ExecutorInstrumentationTest { public WorkStealingPoolTest() { super(Executors.newWorkStealingPool(2)); From f8906c2cc239495ada1f9d0377a12963da6e7e7d Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Fri, 6 Oct 2023 12:08:33 +0200 Subject: [PATCH 2/4] Fix lambda instrumentation --- .../javaagent/tooling/ignore/IgnoredTypesMatcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcher.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcher.java index 9fdf09356df8..c864f4c5fd2b 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcher.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcher.java @@ -29,7 +29,7 @@ public boolean matches(TypeDescription target) { } // bytecode proxies typically have $$ in their name - if (name.contains("$$") && !name.contains("$$Lambda$")) { + if (name.contains("$$") && !name.contains("$$Lambda$") && !name.endsWith("$$Lambda")) { // allow scala anonymous classes return !name.contains("$$anon$"); } From aa25eb4ede57f87183cf9dd03eebd952fd98b7c0 Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Tue, 10 Oct 2023 09:54:21 +0200 Subject: [PATCH 3/4] spotless fix --- .../executors/ExecutorInstrumentationTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java index c7ba78e84320..b062e1bf9440 100644 --- a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java +++ b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java @@ -60,14 +60,15 @@ static class VirtualThreadExecutorTest extends ExecutorInstrumentationTest { public WorkStealingPoolTest() { super(Executors.newWorkStealingPool(2)); From 11cb22d90af4e2b446083c3c28ecfbd00817b9fe Mon Sep 17 00:00:00 2001 From: Jonas Kunz Date: Tue, 10 Oct 2023 10:24:27 +0200 Subject: [PATCH 4/4] Typo fix --- .../executors/ExecutorInstrumentationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java index b062e1bf9440..77a3d0ad7636 100644 --- a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java +++ b/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorInstrumentationTest.java @@ -54,10 +54,10 @@ static class ThreadPoolExecutorTest extends ExecutorInstrumentationTest { VirtualThreadExecutorTest() { - super(newVirtualThreadPerAskExecutor()); + super(newVirtualThreadPerTaskExecutor()); } - private static ExecutorService newVirtualThreadPerAskExecutor() { + private static ExecutorService newVirtualThreadPerTaskExecutor() { Method newVirtualThreadPerTaskExecutor; try { newVirtualThreadPerTaskExecutor =