diff --git a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterChainContextInstrumentation.java b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterChainContextInstrumentation.java index 52f56c2cf24e..03bd36c08d89 100644 --- a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterChainContextInstrumentation.java +++ b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterChainContextInstrumentation.java @@ -53,15 +53,15 @@ public static void onExit(@Advice.Enter Scope scope) { public static class WriteAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static void onEnter(@Advice.Local("otelCallDepth") CallDepth callDepth) { - callDepth = CallDepth.forClass(FilterChainContext.class); + public static CallDepth onEnter() { + CallDepth callDepth = CallDepth.forClass(FilterChainContext.class); callDepth.getAndIncrement(); + return callDepth; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.This FilterChainContext filterChainContext, - @Advice.Local("otelCallDepth") CallDepth callDepth) { + @Advice.This FilterChainContext filterChainContext, @Advice.Enter CallDepth callDepth) { // When exiting the outermost call to write clear context & request from filter chain context. // Write makes a copy of the current filter chain context and passes it on. In older versions // new and old filter chain context share the attributes, but in newer versions the attributes diff --git a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterInstrumentation.java b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterInstrumentation.java index 16fa59955735..3f9bee2228d8 100644 --- a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterInstrumentation.java +++ b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/FilterInstrumentation.java @@ -17,6 +17,7 @@ import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; +import javax.annotation.Nullable; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -52,22 +53,17 @@ public void transform(TypeTransformer transformer) { public static class HandleReadAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) - public static void onEnter( - @Advice.This BaseFilter it, - @Advice.Argument(0) FilterChainContext ctx, - @Advice.Local("otelScope") Scope scope) { + public static Scope onEnter( + @Advice.This BaseFilter it, @Advice.Argument(0) FilterChainContext ctx) { if (Java8BytecodeBridge.currentSpan().getSpanContext().isValid()) { - return; + return null; } - Context context = GrizzlyStateStorage.getContext(ctx); - if (context != null) { - scope = context.makeCurrent(); - } + return context != null ? context.makeCurrent() : null; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) - public static void onExit(@Advice.This BaseFilter it, @Advice.Local("otelScope") Scope scope) { + public static void onExit(@Advice.This BaseFilter it, @Advice.Enter @Nullable Scope scope) { if (scope != null) { scope.close(); } diff --git a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlyInstrumentationModule.java b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlyInstrumentationModule.java index 2042dec43b9d..eba6ffc5de6f 100644 --- a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlyInstrumentationModule.java +++ b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlyInstrumentationModule.java @@ -11,11 +11,13 @@ 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; import net.bytebuddy.matcher.ElementMatcher; @AutoService(InstrumentationModule.class) -public class GrizzlyInstrumentationModule extends InstrumentationModule { +public class GrizzlyInstrumentationModule extends InstrumentationModule + implements ExperimentalInstrumentationModule { public GrizzlyInstrumentationModule() { super("grizzly", "grizzly-2.3"); } @@ -36,4 +38,9 @@ public List typeInstrumentations() { new HttpHandlerInstrumentation(), new FilterChainContextInstrumentation()); } + + @Override + public boolean isIndyReady() { + return true; + } }