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 <[email protected]>
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;
}