From 91853b9bebe58b6b44844ce26d91203029b300d2 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:15:51 +0200 Subject: [PATCH 1/3] Making zio indy ready --- .../instrumentation/zio/v2_0/FiberContext.java | 6 ++++++ .../zio/v2_0/ZioInstrumentationModule.java | 9 ++++++++- .../zio/v2_0/ZioRuntimeInstrumentation.java | 11 ++++------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java index 164a2b1dbfa9..5c48db2ec165 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java @@ -6,8 +6,14 @@ package io.opentelemetry.javaagent.instrumentation.zio.v2_0; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.util.VirtualField; +import zio.Fiber; public final class FiberContext { + @SuppressWarnings("rawtypes") + public static final VirtualField RUNTIME_FIBER_CONTEXT = + VirtualField.find(Fiber.Runtime.class, FiberContext.class); + private Context context; private FiberContext(Context context) { diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioInstrumentationModule.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioInstrumentationModule.java index d0316f462ffb..8b7bd52c0d5f 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioInstrumentationModule.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioInstrumentationModule.java @@ -10,10 +10,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import java.util.List; @AutoService(InstrumentationModule.class) -public class ZioInstrumentationModule extends InstrumentationModule { +public class ZioInstrumentationModule extends InstrumentationModule + implements ExperimentalInstrumentationModule { public ZioInstrumentationModule() { super("zio", "zio-2.0"); @@ -23,4 +25,9 @@ public ZioInstrumentationModule() { public List typeInstrumentations() { return singletonList(new ZioRuntimeInstrumentation()); } + + @Override + public boolean isIndyReady() { + return true; + } } diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java index 049c3403e80b..1b14b8e46fca 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java @@ -5,16 +5,15 @@ package io.opentelemetry.javaagent.instrumentation.zio.v2_0; +import static io.opentelemetry.javaagent.instrumentation.zio.v2_0.FiberContext.RUNTIME_FIBER_CONTEXT; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; -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; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import zio.Fiber; import zio.Supervisor; public class ZioRuntimeInstrumentation implements TypeInstrumentation { @@ -36,11 +35,9 @@ public static final class DefaultSupervisor { private DefaultSupervisor() {} @Advice.OnMethodExit(suppress = Throwable.class) - public static void onExit(@Advice.Return(readOnly = false) Supervisor supervisor) { - @SuppressWarnings("rawtypes") - VirtualField virtualField = - VirtualField.find(Fiber.Runtime.class, FiberContext.class); - supervisor = supervisor.$plus$plus(new TracingSupervisor(virtualField)); + @Advice.AssignReturned.ToReturned + public static Object onExit(@Advice.Return Supervisor supervisor) { + return supervisor.$plus$plus(new TracingSupervisor(RUNTIME_FIBER_CONTEXT)); } } } From 39e220c3acd9ee26e033a8cb68f11b753f6af659 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:35:53 +0200 Subject: [PATCH 2/3] Moving virtualfield --- .../javaagent/instrumentation/zio/v2_0/FiberContext.java | 5 ----- .../instrumentation/zio/v2_0/TracingSupervisor.java | 4 ++++ .../instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java index 5c48db2ec165..7607ddad3c22 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java @@ -6,13 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.zio.v2_0; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.util.VirtualField; -import zio.Fiber; public final class FiberContext { - @SuppressWarnings("rawtypes") - public static final VirtualField RUNTIME_FIBER_CONTEXT = - VirtualField.find(Fiber.Runtime.class, FiberContext.class); private Context context; diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/TracingSupervisor.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/TracingSupervisor.java index f42333e70485..b00a6484c1d9 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/TracingSupervisor.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/TracingSupervisor.java @@ -18,6 +18,10 @@ @SuppressWarnings("unchecked") public final class TracingSupervisor extends Supervisor { + @SuppressWarnings("rawtypes") + public static final VirtualField RUNTIME_FIBER_CONTEXT = + VirtualField.find(Fiber.Runtime.class, FiberContext.class); + @SuppressWarnings("rawtypes") private final VirtualField virtualField; diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java index 1b14b8e46fca..a66cb48c47ff 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioRuntimeInstrumentation.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.zio.v2_0; -import static io.opentelemetry.javaagent.instrumentation.zio.v2_0.FiberContext.RUNTIME_FIBER_CONTEXT; +import static io.opentelemetry.javaagent.instrumentation.zio.v2_0.TracingSupervisor.RUNTIME_FIBER_CONTEXT; import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.named; From 08746608c67d5392f9d0b797504d6bcca6991714 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:37:16 +0200 Subject: [PATCH 3/3] Clean up --- .../javaagent/instrumentation/zio/v2_0/FiberContext.java | 1 - 1 file changed, 1 deletion(-) diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java index 7607ddad3c22..164a2b1dbfa9 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/FiberContext.java @@ -8,7 +8,6 @@ import io.opentelemetry.context.Context; public final class FiberContext { - private Context context; private FiberContext(Context context) {