This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/skywalking-java.git
The following commit(s) were added to refs/heads/main by this push: new eebc4512ec Convert the Redisson lock span into an async span (#667) eebc4512ec is described below commit eebc4512ece8a27a67f48191f14f753b1c8477d7 Author: peachisai <96932958+peachi...@users.noreply.github.com> AuthorDate: Sun Jan 21 12:10:39 2024 +0800 Convert the Redisson lock span into an async span (#667) --- CHANGES.md | 3 ++- .../redisson/v3/RedissonHighLevelLockInterceptor.java | 14 ++++++++++++++ .../apm/plugin/redisson/v3/RedissonLockInterceptor.java | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 90ece6d118..bd249be6e3 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,8 +10,9 @@ Release Notes. * Support for tracing spring-cloud-gateway 4.x in gateway-4.x-plugin. * Fix re-transform bug when plugin enhanced class proxy parent method. * Fix error HTTP status codes not recording as SLA failures in Vert.x plugins. -* Support for HttpExchange request tracing +* Support for HttpExchange request tracing. * Support tracing for async producing, batch sync consuming, and batch async consuming in rocketMQ-client-java-5.x-plugin. +* Convert the Redisson span into an async span. #### Documentation diff --git a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonHighLevelLockInterceptor.java b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonHighLevelLockInterceptor.java index ef0a0585f5..99229d62fb 100644 --- a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonHighLevelLockInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonHighLevelLockInterceptor.java @@ -26,9 +26,11 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.redisson.api.RFuture; import org.redisson.api.RLock; import java.lang.reflect.Method; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class RedissonHighLevelLockInterceptor implements InstanceMethodsAroundInterceptor { @@ -48,7 +50,19 @@ public class RedissonHighLevelLockInterceptor implements InstanceMethodsAroundIn @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable { + AbstractSpan span = ContextManager.activeSpan(); + span.prepareForAsync(); ContextManager.stopSpan(); + + RFuture<Object> future = (RFuture) ret; + CompletableFuture<Object> completableFuture = future.toCompletableFuture(); + completableFuture.whenComplete((res, ex) -> { + if (ex != null) { + span.errorOccurred(); + span.log(ex); + } + span.asyncFinish(); + }); return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonLockInterceptor.java b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonLockInterceptor.java index 77a31a28a4..b8159d9a00 100644 --- a/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonLockInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/redisson-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/redisson/v3/RedissonLockInterceptor.java @@ -26,9 +26,11 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; +import org.redisson.api.RFuture; import org.redisson.api.RLock; import java.lang.reflect.Method; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class RedissonLockInterceptor implements InstanceMethodsAroundInterceptor { @@ -48,7 +50,19 @@ public class RedissonLockInterceptor implements InstanceMethodsAroundInterceptor @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable { + AbstractSpan span = ContextManager.activeSpan(); + span.prepareForAsync(); ContextManager.stopSpan(); + + RFuture<Object> future = (RFuture) ret; + CompletableFuture<Object> completableFuture = future.toCompletableFuture(); + completableFuture.whenComplete((res, ex) -> { + if (ex != null) { + span.errorOccurred(); + span.log(ex); + } + span.asyncFinish(); + }); return ret; }