Skip to content

Commit d87ab9a

Browse files
committed
redisson 3.17
1 parent 56b179f commit d87ab9a

File tree

3 files changed

+62
-35
lines changed

3 files changed

+62
-35
lines changed

instrumentation/redisson/redisson-3.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/v3_17/RedisCommandDataInstrumentation.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import net.bytebuddy.asm.Advice;
1717
import net.bytebuddy.description.type.TypeDescription;
1818
import net.bytebuddy.matcher.ElementMatcher;
19+
import net.bytebuddy.asm.Advice.AssignReturned;
20+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
1921

2022
public class RedisCommandDataInstrumentation implements TypeInstrumentation {
2123

@@ -35,10 +37,11 @@ public void transform(TypeTransformer transformer) {
3537
@SuppressWarnings("unused")
3638
public static class WrapCompletableFutureAdvice {
3739

40+
@AssignReturned.ToArguments(@ToArgument(0))
3841
@Advice.OnMethodEnter(suppress = Throwable.class)
39-
public static void onEnter(
40-
@Advice.Argument(value = 0, readOnly = false) CompletableFuture<?> completableFuture) {
41-
completableFuture = CompletableFutureWrapper.wrap(completableFuture);
42+
public static CompletableFuture<?> onEnter(
43+
@Advice.Argument(0) CompletableFuture<?> completableFuture) {
44+
return CompletableFutureWrapper.wrap(completableFuture);
4245
}
4346
}
4447
}

instrumentation/redisson/redisson-3.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/v3_17/RedisConnectionInstrumentation.java

Lines changed: 49 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import net.bytebuddy.description.type.TypeDescription;
2323
import net.bytebuddy.matcher.ElementMatcher;
2424
import org.redisson.client.RedisConnection;
25+
import javax.annotation.Nullable;
2526

2627
public class RedisConnectionInstrumentation implements TypeInstrumentation {
2728
@Override
@@ -38,47 +39,64 @@ public void transform(TypeTransformer transformer) {
3839
@SuppressWarnings("unused")
3940
public static class SendAdvice {
4041

41-
@Advice.OnMethodEnter(suppress = Throwable.class)
42-
public static void onEnter(
43-
@Advice.This RedisConnection connection,
44-
@Advice.Argument(0) Object arg,
45-
@Advice.Local("otelRequest") RedissonRequest request,
46-
@Advice.Local("otelContext") Context context,
47-
@Advice.Local("otelScope") Scope scope) {
42+
public static class AdviceScope {
43+
private final RedissonRequest request;
44+
private final Context context;
45+
private final Scope scope;
4846

49-
Context parentContext = currentContext();
50-
InetSocketAddress remoteAddress = (InetSocketAddress) connection.getChannel().remoteAddress();
51-
request = RedissonRequest.create(remoteAddress, arg);
52-
PromiseWrapper<?> promise = request.getPromiseWrapper();
53-
if (promise == null) {
54-
return;
47+
public AdviceScope(RedissonRequest request, Context context, Scope scope) {
48+
this.request = request;
49+
this.context = context;
50+
this.scope = scope;
5551
}
56-
if (!instrumenter().shouldStart(parentContext, request)) {
57-
return;
52+
53+
@Nullable
54+
public static AdviceScope start(RedisConnection connection, Object arg) {
55+
Context parentContext = currentContext();
56+
InetSocketAddress remoteAddress = (InetSocketAddress) connection.getChannel()
57+
.remoteAddress();
58+
RedissonRequest request = RedissonRequest.create(remoteAddress, arg);
59+
PromiseWrapper<?> promise = request.getPromiseWrapper();
60+
if (promise == null) {
61+
return null;
62+
}
63+
if (!instrumenter().shouldStart(parentContext, request)) {
64+
return null;
65+
}
66+
67+
Context context = instrumenter().start(parentContext, request);
68+
Scope scope = context.makeCurrent();
69+
70+
promise.setEndOperationListener(
71+
new EndOperationListener<>(instrumenter(), context, request));
72+
return new AdviceScope(request, context, scope);
5873
}
5974

60-
context = instrumenter().start(parentContext, request);
61-
scope = context.makeCurrent();
75+
public void end(@Nullable Throwable throwable) {
76+
scope.close();
77+
if (throwable != null) {
78+
instrumenter().end(context, request, null, throwable);
79+
}
80+
// span ended in EndOperationListener
81+
}
82+
}
83+
84+
@Nullable
85+
@Advice.OnMethodEnter(suppress = Throwable.class)
86+
public static AdviceScope onEnter(
87+
@Advice.This RedisConnection connection,
88+
@Advice.Argument(0) Object arg) {
89+
return AdviceScope.start(connection, arg);
6290

63-
promise.setEndOperationListener(new EndOperationListener<>(instrumenter(), context, request));
6491
}
6592

6693
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
6794
public static void stopSpan(
68-
@Advice.Thrown Throwable throwable,
69-
@Advice.Local("otelRequest") RedissonRequest request,
70-
@Advice.Local("otelContext") Context context,
71-
@Advice.Local("otelScope") Scope scope) {
72-
73-
if (scope == null) {
74-
return;
75-
}
76-
scope.close();
77-
78-
if (throwable != null) {
79-
instrumenter().end(context, request, null, throwable);
95+
@Advice.Thrown @Nullable Throwable throwable,
96+
@Advice.Enter @Nullable AdviceScope adviceScope) {
97+
if (adviceScope != null) {
98+
adviceScope.end(throwable);
8099
}
81-
// span ended in EndOperationListener
82100
}
83101
}
84102
}

instrumentation/redisson/redisson-3.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/v3_17/RedissonInstrumentationModule.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1414
import java.util.List;
15+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class RedissonInstrumentationModule extends InstrumentationModule {
19+
public class RedissonInstrumentationModule extends InstrumentationModule implements ExperimentalInstrumentationModule {
1920

2021
public RedissonInstrumentationModule() {
2122
super("redisson", "redisson-3.17");
@@ -30,4 +31,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3031
public List<TypeInstrumentation> typeInstrumentations() {
3132
return asList(new RedisConnectionInstrumentation(), new RedisCommandDataInstrumentation());
3233
}
34+
35+
@Override
36+
public boolean isIndyReady() {
37+
return true;
38+
}
3339
}

0 commit comments

Comments
 (0)