Skip to content

Commit d95f01b

Browse files
committed
make async-http-client indy ready
1 parent ec060ad commit d95f01b

File tree

5 files changed

+33
-18
lines changed

5 files changed

+33
-18
lines changed

instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class AsyncHttpClientInstrumentationModule extends InstrumentationModule {
17+
public class AsyncHttpClientInstrumentationModule extends InstrumentationModule implements
18+
ExperimentalInstrumentationModule {
1719
public AsyncHttpClientInstrumentationModule() {
1820
super("async-http-client", "async-http-client-1.9");
1921
}
@@ -22,4 +24,9 @@ public AsyncHttpClientInstrumentationModule() {
2224
public List<TypeInstrumentation> typeInstrumentations() {
2325
return asList(new RequestInstrumentation(), new ResponseInstrumentation());
2426
}
27+
28+
@Override
29+
public boolean isIndyReady() {
30+
return true;
31+
}
2532
}

instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/RequestInstrumentation.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import net.bytebuddy.asm.Advice;
2222
import net.bytebuddy.description.type.TypeDescription;
2323
import net.bytebuddy.matcher.ElementMatcher;
24+
import javax.annotation.Nullable;
2425

2526
public class RequestInstrumentation implements TypeInstrumentation {
2627

@@ -42,24 +43,22 @@ public void transform(TypeTransformer transformer) {
4243
@SuppressWarnings("unused")
4344
public static class ExecuteAdvice {
4445

46+
@Nullable
4547
@Advice.OnMethodEnter(suppress = Throwable.class)
46-
public static void onEnter(
47-
@Advice.Argument(0) Request request,
48-
@Advice.Argument(1) AsyncHandler<?> handler,
49-
@Advice.Local("otelScope") Scope scope) {
48+
public static Scope onEnter(@Advice.Argument(0) Request request, @Advice.Argument(1) AsyncHandler<?> handler) {
5049
Context parentContext = currentContext();
5150
if (!instrumenter().shouldStart(parentContext, request)) {
52-
return;
51+
return null;
5352
}
5453

5554
Context context = instrumenter().start(parentContext, request);
5655
VirtualField.find(AsyncHandler.class, AsyncHandlerData.class)
5756
.set(handler, AsyncHandlerData.create(parentContext, context, request));
58-
scope = context.makeCurrent();
57+
return context.makeCurrent();
5958
}
6059

6160
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
62-
public static void onExit(@Advice.Local("otelScope") Scope scope) {
61+
public static void onExit(@Advice.Enter @Nullable Scope scope) {
6362
if (scope != null) {
6463
scope.close();
6564
}

instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientInstrumentation.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import net.bytebuddy.matcher.ElementMatcher;
2323
import org.asynchttpclient.AsyncHandler;
2424
import org.asynchttpclient.Request;
25+
import javax.annotation.Nullable;
2526

2627
public class AsyncHttpClientInstrumentation implements TypeInstrumentation {
2728

@@ -43,15 +44,14 @@ public void transform(TypeTransformer transformer) {
4344
@SuppressWarnings("unused")
4445
public static class ExecuteRequestAdvice {
4546

47+
@Nullable
4648
@Advice.OnMethodEnter(suppress = Throwable.class)
47-
public static void onEnter(
48-
@Advice.Argument(0) Request request,
49-
@Advice.Argument(1) AsyncHandler<?> handler,
50-
@Advice.Local("otelScope") Scope scope) {
49+
public static Scope onEnter(@Advice.Argument(0) Request request, @Advice.Argument(1) AsyncHandler<?> handler) {
50+
5151
Context parentContext = currentContext();
5252
RequestContext requestContext = new RequestContext(parentContext, request);
5353
if (!instrumenter().shouldStart(parentContext, requestContext)) {
54-
return;
54+
return null;
5555
}
5656

5757
Context context = instrumenter().start(parentContext, requestContext);
@@ -71,11 +71,11 @@ public static void onEnter(
7171
// module introduced)
7272

7373
VirtualField.find(AsyncHandler.class, RequestContext.class).set(handler, requestContext);
74-
scope = context.makeCurrent();
74+
return context.makeCurrent();
7575
}
7676

7777
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
78-
public static void onExit(@Advice.Local("otelScope") Scope scope) {
78+
public static void onExit(@Advice.Enter @Nullable Scope scope) {
7979
if (scope != null) {
8080
scope.close();
8181
}

instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class AsyncHttpClientInstrumentationModule extends InstrumentationModule {
17+
public class AsyncHttpClientInstrumentationModule extends InstrumentationModule implements
18+
ExperimentalInstrumentationModule {
1719
public AsyncHttpClientInstrumentationModule() {
1820
super("async-http-client", "async-http-client-2.0");
1921
}
@@ -26,4 +28,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
2628
new NettyRequestSenderInstrumentation(),
2729
new NettyResponseFutureInstrumentation());
2830
}
31+
32+
@Override
33+
public boolean isIndyReady() {
34+
return true;
35+
}
2936
}

instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/NettyResponseFutureInstrumentation.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1515
import java.util.concurrent.CompletableFuture;
1616
import net.bytebuddy.asm.Advice;
17+
import net.bytebuddy.asm.Advice.AssignReturned;
1718
import net.bytebuddy.description.type.TypeDescription;
1819
import net.bytebuddy.matcher.ElementMatcher;
1920

@@ -34,9 +35,10 @@ public void transform(TypeTransformer transformer) {
3435
@SuppressWarnings("unused")
3536
public static class WrapFutureAdvice {
3637

38+
@AssignReturned.ToReturned
3739
@Advice.OnMethodExit(suppress = Throwable.class)
38-
public static void onExit(@Advice.Return(readOnly = false) CompletableFuture<?> result) {
39-
result = CompletableFutureWrapper.wrap(result, Java8BytecodeBridge.currentContext());
40+
public static CompletableFuture<?> onExit(@Advice.Return CompletableFuture<?> result) {
41+
return CompletableFutureWrapper.wrap(result, Java8BytecodeBridge.currentContext());
4042
}
4143
}
4244
}

0 commit comments

Comments
 (0)