From 10bfb206e44da223933c8fca991c1e715d91b660 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:36:47 +0200 Subject: [PATCH 1/6] Making pekko modules indy ready --- .../v1_0/server/PekkoHttpServerInstrumentationModule.java | 5 +++++ .../route/PekkoHttpServerRouteInstrumentationModule.java | 5 +++++ .../TapirPekkoHttpServerRouteInstrumentationModule.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerInstrumentationModule.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerInstrumentationModule.java index de6abd2c2934..2aaf5cac7f01 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerInstrumentationModule.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerInstrumentationModule.java @@ -42,4 +42,9 @@ public List typeInstrumentations() { new GraphInterpreterInstrumentation(), new PekkoHttpServerSourceInstrumentation()); } + + @Override + public boolean isIndyReady() { + return true; + } } diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PekkoHttpServerRouteInstrumentationModule.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PekkoHttpServerRouteInstrumentationModule.java index dd897e920999..e0359f069ace 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PekkoHttpServerRouteInstrumentationModule.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PekkoHttpServerRouteInstrumentationModule.java @@ -36,4 +36,9 @@ public List typeInstrumentations() { new PathMatcherStaticInstrumentation(), new RouteConcatenationInstrumentation()); } + + @Override + public boolean isIndyReady() { + return true; + } } diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPekkoHttpServerRouteInstrumentationModule.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPekkoHttpServerRouteInstrumentationModule.java index 8998e62b3191..15aa36dac64c 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPekkoHttpServerRouteInstrumentationModule.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPekkoHttpServerRouteInstrumentationModule.java @@ -35,4 +35,9 @@ public String getModuleGroup() { public List typeInstrumentations() { return singletonList(new TapirPathInstrumentation()); } + + @Override + public boolean isIndyReady() { + return true; + } } From 78e0d684b1108240cbdc4f632cab35cf6a09b9c4 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:43:48 +0200 Subject: [PATCH 2/6] Migrating PathMatcherInstrumentation --- .../pekkohttp/v1_0/server/PekkoHttpServerSingletons.java | 4 ++++ .../v1_0/server/route/PathMatcherInstrumentation.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java index 3c865385e14d..2ce19e3a1710 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java @@ -6,14 +6,18 @@ package io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpServerInstrumenters; import io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.PekkoHttpUtil; import org.apache.pekko.http.scaladsl.model.HttpRequest; import org.apache.pekko.http.scaladsl.model.HttpResponse; +import org.apache.pekko.http.scaladsl.server.PathMatcher; public final class PekkoHttpServerSingletons { private static final Instrumenter INSTRUMENTER; + public static final VirtualField, String> PATH_MATCHER_FIELD = + VirtualField.find(PathMatcher.class, String.class); static { INSTRUMENTER = diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java index 91c9366876a8..114777776df5 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java @@ -5,11 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.route; +import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PATH_MATCHER_FIELD; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import net.bytebuddy.asm.Advice; @@ -41,7 +41,7 @@ public static void onEnter( @Advice.Argument(0) Uri.Path prefix, @Advice.Return PathMatcher result) { // store the path being matched inside a VirtualField on the given matcher, so it can be used // for constructing the route - VirtualField.find(PathMatcher.class, String.class).set(result, prefix.toString()); + PATH_MATCHER_FIELD.set(result, prefix.toString()); } } } From 9e9a0f708bd90a4b3f6cd9aab8fd4d6510be52ef Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:44:45 +0200 Subject: [PATCH 3/6] Migrating PathMatcherStaticInstrumentation --- .../v1_0/server/route/PathMatcherStaticInstrumentation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java index eece74db88af..bfac1126eee9 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java @@ -6,11 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.route; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; +import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PATH_MATCHER_FIELD; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; @@ -53,7 +53,7 @@ public static void onExit( PathMatcher.Matched match = (PathMatcher.Matched) result; // if present use the matched path that was remembered in PathMatcherInstrumentation, // otherwise just use a * - String prefix = VirtualField.find(PathMatcher.class, String.class).get(pathMatcher); + String prefix = PATH_MATCHER_FIELD.get(pathMatcher); if (prefix == null) { if (PathMatchers.Slash$.class == pathMatcher.getClass()) { prefix = "/"; From aa63bb7dffa8bf72b240aa9ee3484ebd1de064bd Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:47:43 +0200 Subject: [PATCH 4/6] Migrating RouteConcatenationInstrumentation --- .../server/route/RouteConcatenationInstrumentation.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/RouteConcatenationInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/RouteConcatenationInstrumentation.java index ea3b5d306fa6..6981d6178743 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/RouteConcatenationInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/RouteConcatenationInstrumentation.java @@ -33,11 +33,11 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class ApplyAdvice { + @Advice.AssignReturned.ToArguments(@Advice.AssignReturned.ToArguments.ToArgument(0)) @Advice.OnMethodEnter(suppress = Throwable.class) - public static void onEnter( - @Advice.Argument(value = 0, readOnly = false) - Function1> route) { - route = new PekkoRouteWrapper(route); + public static Object onEnter( + @Advice.Argument(0) Function1> route) { + return new PekkoRouteWrapper(route); } } } From 9cfd9e4e700e6f65c544aa74d253304a899609fb Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 13:49:42 +0200 Subject: [PATCH 5/6] Migrating TapirPathInstrumentation --- .../v1_0/server/tapir/TapirPathInstrumentation.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPathInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPathInstrumentation.java index 9e7a6d50fffc..a09010aa4c0b 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPathInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/tapir/TapirPathInstrumentation.java @@ -35,11 +35,12 @@ public void transform(TypeTransformer transformer) { @SuppressWarnings("unused") public static class ApplyAdvice { + @Advice.AssignReturned.ToReturned @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void onExit( + public static Object onExit( @Advice.Argument(0) ServerEndpoint endpoint, - @Advice.Return(readOnly = false) Function1> route) { - route = new RouteWrapper(endpoint, route); + @Advice.Return Function1> route) { + return new RouteWrapper(endpoint, route); } } } From f2be2f204f0540f4525167eb48e50efd76a6382b Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:02:43 +0200 Subject: [PATCH 6/6] Renaming virtual field --- .../pekkohttp/v1_0/server/PekkoHttpServerSingletons.java | 2 +- .../v1_0/server/route/PathMatcherInstrumentation.java | 4 ++-- .../v1_0/server/route/PathMatcherStaticInstrumentation.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java index 2ce19e3a1710..f3e92ef074c4 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoHttpServerSingletons.java @@ -16,7 +16,7 @@ public final class PekkoHttpServerSingletons { private static final Instrumenter INSTRUMENTER; - public static final VirtualField, String> PATH_MATCHER_FIELD = + public static final VirtualField, String> PREFIX = VirtualField.find(PathMatcher.class, String.class); static { diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java index 114777776df5..18af901ca2c7 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherInstrumentation.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.route; -import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PATH_MATCHER_FIELD; +import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PREFIX; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -41,7 +41,7 @@ public static void onEnter( @Advice.Argument(0) Uri.Path prefix, @Advice.Return PathMatcher result) { // store the path being matched inside a VirtualField on the given matcher, so it can be used // for constructing the route - PATH_MATCHER_FIELD.set(result, prefix.toString()); + PREFIX.set(result, prefix.toString()); } } } diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java index bfac1126eee9..e93f2699d563 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/route/PathMatcherStaticInstrumentation.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.route; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.extendsClass; -import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PATH_MATCHER_FIELD; +import static io.opentelemetry.javaagent.instrumentation.pekkohttp.v1_0.server.PekkoHttpServerSingletons.PREFIX; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -53,7 +53,7 @@ public static void onExit( PathMatcher.Matched match = (PathMatcher.Matched) result; // if present use the matched path that was remembered in PathMatcherInstrumentation, // otherwise just use a * - String prefix = PATH_MATCHER_FIELD.get(pathMatcher); + String prefix = PREFIX.get(pathMatcher); if (prefix == null) { if (PathMatchers.Slash$.class == pathMatcher.getClass()) { prefix = "/";