Skip to content

Commit 626c296

Browse files
authored
make ratpack indy-ready (#14679)
1 parent 2caff62 commit 626c296

File tree

8 files changed

+60
-22
lines changed

8 files changed

+60
-22
lines changed

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/ContinuationInstrumentation.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1515
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1616
import net.bytebuddy.asm.Advice;
17+
import net.bytebuddy.asm.Advice.AssignReturned;
18+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1719
import net.bytebuddy.description.type.TypeDescription;
1820
import net.bytebuddy.matcher.ElementMatcher;
1921
import ratpack.func.Block;
@@ -41,9 +43,10 @@ public void transform(TypeTransformer transformer) {
4143
@SuppressWarnings("unused")
4244
public static class ResumeAdvice {
4345

46+
@AssignReturned.ToArguments(@ToArgument(0))
4447
@Advice.OnMethodEnter(suppress = Throwable.class)
45-
public static void wrap(@Advice.Argument(value = 0, readOnly = false) Block block) {
46-
block = BlockWrapper.wrapIfNeeded(block);
48+
public static Block wrap(@Advice.Argument(0) Block block) {
49+
return BlockWrapper.wrapIfNeeded(block);
4750
}
4851
}
4952
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/ContinuationStreamInstrumentation.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1515
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1616
import net.bytebuddy.asm.Advice;
17+
import net.bytebuddy.asm.Advice.AssignReturned;
18+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1719
import net.bytebuddy.description.type.TypeDescription;
1820
import net.bytebuddy.matcher.ElementMatcher;
1921
import ratpack.func.Block;
@@ -40,9 +42,10 @@ public void transform(TypeTransformer transformer) {
4042
@SuppressWarnings("unused")
4143
public static class WrapBlockAdvice {
4244

45+
@AssignReturned.ToArguments(@ToArgument(0))
4346
@Advice.OnMethodEnter(suppress = Throwable.class)
44-
public static void wrap(@Advice.Argument(value = 0, readOnly = false) Block block) {
45-
block = BlockWrapper.wrapIfNeeded(block);
47+
public static Block wrap(@Advice.Argument(0) Block block) {
48+
return BlockWrapper.wrapIfNeeded(block);
4649
}
4750
}
4851
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/DefaultExecStarterInstrumentation.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1818
import net.bytebuddy.asm.Advice;
19+
import net.bytebuddy.asm.Advice.AssignReturned;
20+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1921
import net.bytebuddy.description.type.TypeDescription;
2022
import net.bytebuddy.matcher.ElementMatcher;
2123
import ratpack.func.Action;
@@ -41,22 +43,31 @@ public void transform(TypeTransformer transformer) {
4143

4244
@SuppressWarnings("unused")
4345
public static class WrapActionAdvice {
46+
@AssignReturned.ToArguments(@ToArgument(0))
4447
@Advice.OnMethodEnter(suppress = Throwable.class)
45-
public static void wrapAction(@Advice.Argument(value = 0, readOnly = false) Action<?> action) {
46-
action = ActionWrapper.wrapIfNeeded(action);
48+
public static Action<?> wrapAction(@Advice.Argument(0) Action<?> action) {
49+
return ActionWrapper.wrapIfNeeded(action);
4750
}
4851
}
4952

5053
@SuppressWarnings("unused")
5154
public static class StartAdvice {
55+
@AssignReturned.ToArguments(@ToArgument(value = 0, index = 1))
5256
@Advice.OnMethodEnter(suppress = Throwable.class)
53-
public static Scope enter(@Advice.Argument(value = 0, readOnly = false) Action<?> action) {
54-
action = ActionWrapper.wrapIfNeeded(action);
55-
return Java8BytecodeBridge.rootContext().makeCurrent();
57+
public static Object[] enter(@Advice.Argument(0) Action<?> action) {
58+
59+
// wrapping method is relying on current context
60+
// thus we must wrap first to avoid using the root context
61+
Action<?> wrappedAction = ActionWrapper.wrapIfNeeded(action);
62+
63+
// root context scope must be made current after wrapping
64+
Scope scope = Java8BytecodeBridge.rootContext().makeCurrent();
65+
return new Object[] {scope, wrappedAction};
5666
}
5767

5868
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
59-
public static void exit(@Advice.Enter Scope scope) {
69+
public static void exit(@Advice.Enter Object[] enterResult) {
70+
Scope scope = (Scope) enterResult[0];
6071
if (scope != null) {
6172
scope.close();
6273
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/DefaultExecutionInstrumentation.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1414
import net.bytebuddy.asm.Advice;
15+
import net.bytebuddy.asm.Advice.AssignReturned;
16+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1517
import net.bytebuddy.description.type.TypeDescription;
1618
import net.bytebuddy.matcher.ElementMatcher;
1719
import ratpack.exec.internal.Continuation;
@@ -36,12 +38,18 @@ public void transform(TypeTransformer transformer) {
3638
@SuppressWarnings("unused")
3739
public static class DelimitAdvice {
3840

41+
@AssignReturned.ToArguments({
42+
@ToArgument(value = 0, index = 0),
43+
@ToArgument(value = 1, index = 1)
44+
})
3945
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static void wrap(
41-
@Advice.Argument(value = 0, readOnly = false) Action<? super Throwable> onError,
42-
@Advice.Argument(value = 1, readOnly = false) Action<? super Continuation> segment) {
43-
onError = ActionWrapper.wrapIfNeeded(onError);
44-
segment = ActionWrapper.wrapIfNeeded(segment);
46+
public static Object[] wrap(
47+
@Advice.Argument(0) Action<? super Throwable> originalOnError,
48+
@Advice.Argument(1) Action<? super Continuation> originalSegment) {
49+
50+
Action<? super Throwable> onError = ActionWrapper.wrapIfNeeded(originalOnError);
51+
Action<? super Continuation> segment = ActionWrapper.wrapIfNeeded(originalSegment);
52+
return new Object[] {onError, segment};
4553
}
4654
}
4755
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/ExecutionBoundPublisherInstrumentation.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1515
import net.bytebuddy.asm.Advice;
16+
import net.bytebuddy.asm.Advice.AssignReturned;
17+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1618
import net.bytebuddy.description.type.TypeDescription;
1719
import net.bytebuddy.matcher.ElementMatcher;
1820
import org.reactivestreams.Subscriber;
@@ -36,10 +38,10 @@ public void transform(TypeTransformer transformer) {
3638
@SuppressWarnings("unused")
3739
public static class SubscribeAdvice {
3840

41+
@AssignReturned.ToArguments(@ToArgument(0))
3942
@Advice.OnMethodEnter(suppress = Throwable.class)
40-
public static <T> void wrap(
41-
@Advice.Argument(value = 0, readOnly = false) Subscriber<T> subscriber) {
42-
subscriber = new TracingSubscriber<>(subscriber, Java8BytecodeBridge.currentContext());
43+
public static <T> Subscriber<T> wrap(@Advice.Argument(0) Subscriber<T> subscriber) {
44+
return new TracingSubscriber<>(subscriber, Java8BytecodeBridge.currentContext());
4345
}
4446
}
4547
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3737
new ServerErrorHandlerInstrumentation(),
3838
new ServerRegistryInstrumentation());
3939
}
40+
41+
@Override
42+
public boolean isIndyReady() {
43+
return true;
44+
}
4045
}

instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/ServerRegistryInstrumentation.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1414
import net.bytebuddy.asm.Advice;
15+
import net.bytebuddy.asm.Advice.AssignReturned;
1516
import net.bytebuddy.description.type.TypeDescription;
1617
import net.bytebuddy.matcher.ElementMatcher;
1718
import ratpack.handling.HandlerDecorator;
@@ -34,11 +35,11 @@ public void transform(TypeTransformer transformer) {
3435
@SuppressWarnings("unused")
3536
public static class BuildAdvice {
3637

38+
@AssignReturned.ToReturned
3739
@Advice.OnMethodExit(suppress = Throwable.class)
38-
public static void injectTracing(@Advice.Return(readOnly = false) Registry registry) {
39-
registry =
40-
registry.join(
41-
Registry.builder().add(HandlerDecorator.prepend(TracingHandler.INSTANCE)).build());
40+
public static Registry injectTracing(@Advice.Return Registry registry) {
41+
return registry.join(
42+
Registry.builder().add(HandlerDecorator.prepend(TracingHandler.INSTANCE)).build());
4243
}
4344
}
4445
}

instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
4141
new HttpClientInstrumentation(),
4242
new RequestActionSupportInstrumentation());
4343
}
44+
45+
@Override
46+
public boolean isIndyReady() {
47+
return true;
48+
}
4449
}

0 commit comments

Comments
 (0)