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;
     }
 

Reply via email to