This is an automated email from the ASF dual-hosted git repository.

sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 11f86e5da58 TracingJDBCExecutorCallbackAdvice (#23690)
11f86e5da58 is described below

commit 11f86e5da580dc2c3082849a739f5a2ccaae1cdc
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jan 21 15:49:31 2023 +0800

    TracingJDBCExecutorCallbackAdvice (#23690)
    
    * Add TracingCommandExecutorTaskAdvice
    
    * Add TracingCommandExecutorTaskAdvice
    
    * For checkstyle
    
    * For checkstyle
    
    * Fix test cases
    
    * Add TracingJDBCExecutorCallbackAdvice
---
 .../advice/TracingJDBCExecutorCallbackAdvice.java} | 38 +++++-----------------
 .../advice/JaegerJDBCExecutorCallbackAdvice.java   | 21 ++----------
 .../OpenTelemetryJDBCExecutorCallbackAdvice.java   | 20 ++----------
 .../OpenTracingJDBCExecutorCallbackAdvice.java     | 20 +++++-------
 .../OpenTracingJDBCExecutorCallbackAdviceTest.java | 24 ++++----------
 .../advice/ZipkinJDBCExecutorCallbackAdvice.java   | 27 +++------------
 6 files changed, 35 insertions(+), 115 deletions(-)

diff --git 
a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
 
b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingJDBCExecutorCallbackAdvice.java
similarity index 53%
copy from 
agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
copy to 
agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingJDBCExecutorCallbackAdvice.java
index bf6a5ca5fc0..555e30a13e9 100644
--- 
a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
+++ 
b/agent/plugins/tracing/core/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/core/advice/TracingJDBCExecutorCallbackAdvice.java
@@ -15,15 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
+package org.apache.shardingsphere.agent.plugin.tracing.core.advice;
 
-import brave.Span;
-import brave.Tracing;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
 import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
 import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtil;
-import 
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
 import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -36,41 +33,24 @@ import java.sql.SQLException;
 import java.util.Map;
 
 /**
- * Zipkin JDBC executor callback advice executor.
+ * Tracing JDBC executor callback advice executor.
+ * 
+ * @param <T> type of root span
  */
-public final class ZipkinJDBCExecutorCallbackAdvice implements 
InstanceMethodAdvice {
+public abstract class TracingJDBCExecutorCallbackAdvice<T> implements 
InstanceMethodAdvice {
     
-    private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
+    protected static final String OPERATION_NAME = 
"/ShardingSphere/executeSQL/";
     
     @Override
     @SneakyThrows({ReflectiveOperationException.class, SQLException.class})
-    public void beforeMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final String pluginType) {
-        Span span = RootSpanContext.isEmpty()
-                ? Tracing.currentTracer().nextSpan().name(OPERATION_NAME)
-                : 
Tracing.currentTracer().newChild(RootSpanContext.<Span>get().context()).name(OPERATION_NAME);
-        span.tag(ZipkinConstants.Tags.COMPONENT, 
ZipkinConstants.COMPONENT_NAME);
-        span.tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE);
+    public final void beforeMethod(final TargetAdviceObject target, final 
Method method, final Object[] args, final String pluginType) {
         JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
         Map<String, DatabaseType> storageTypes = 
AgentReflectionUtil.getFieldValue(target, "storageTypes");
         DataSourceMetaData metaData = AgentReflectionUtil.invokeMethod(
                 
JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", 
DatabaseMetaData.class, DatabaseType.class),
                 target, 
executionUnit.getStorageResource().getConnection().getMetaData(), 
storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
-        span.tag(ZipkinConstants.Tags.DB_INSTANCE, 
executionUnit.getExecutionUnit().getDataSourceName());
-        span.tag(ZipkinConstants.Tags.PEER_HOSTNAME, metaData.getHostname());
-        span.tag(ZipkinConstants.Tags.PEER_PORT, 
String.valueOf(metaData.getPort()));
-        span.tag(ZipkinConstants.Tags.DB_STATEMENT, 
executionUnit.getExecutionUnit().getSqlUnit().getSql());
-        span.tag(ZipkinConstants.Tags.DB_BIND_VARIABLES, 
executionUnit.getExecutionUnit().getSqlUnit().getParameters().toString());
-        span.start();
-        target.setAttachment(span);
+        recordExecuteInfo(RootSpanContext.get(), target, executionUnit, 
(boolean) args[1], metaData);
     }
     
-    @Override
-    public void afterMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final Object result, final String pluginType) {
-        ((Span) target.getAttachment()).finish();
-    }
-    
-    @Override
-    public void onThrowing(final TargetAdviceObject target, final Method 
method, final Object[] args, final Throwable throwable, final String 
pluginType) {
-        ((Span) target.getAttachment()).error(throwable);
-    }
+    protected abstract void recordExecuteInfo(T rootSpan, TargetAdviceObject 
target, JDBCExecutionUnit executionUnit, boolean isTrunkThread, 
DataSourceMetaData metaData);
 }
diff --git 
a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JaegerJDBCExecutorCallbackAdvice.java
 
b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JaegerJDBCExecutorCallbackAdvice.java
index 551a1ef9966..a111f9aed7e 100644
--- 
a/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JaegerJDBCExecutorCallbackAdvice.java
+++ 
b/agent/plugins/tracing/type/jaeger/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/jaeger/advice/JaegerJDBCExecutorCallbackAdvice.java
@@ -22,42 +22,27 @@ import io.opentracing.Span;
 import io.opentracing.Tracer;
 import io.opentracing.tag.Tags;
 import io.opentracing.util.GlobalTracer;
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtil;
 import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
+import 
org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingJDBCExecutorCallbackAdvice;
 import 
org.apache.shardingsphere.agent.plugin.tracing.jaeger.constant.JaegerConstants;
 import 
org.apache.shardingsphere.agent.plugin.tracing.jaeger.span.JaegerErrorSpan;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 
 import java.lang.reflect.Method;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
-import java.util.Map;
 
 /**
  * JDBC executor callback advice executor.
  */
-public final class JaegerJDBCExecutorCallbackAdvice implements 
InstanceMethodAdvice {
-    
-    private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
+public final class JaegerJDBCExecutorCallbackAdvice extends 
TracingJDBCExecutorCallbackAdvice<Span> {
     
     @Override
-    @SneakyThrows({ReflectiveOperationException.class, SQLException.class})
-    public void beforeMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final String pluginType) {
+    protected void recordExecuteInfo(final Span rootSpan, final 
TargetAdviceObject target, final JDBCExecutionUnit executionUnit, final boolean 
isTrunkThread, final DataSourceMetaData metaData) {
         Tracer.SpanBuilder builder = 
GlobalTracer.get().buildSpan(OPERATION_NAME);
         if (!RootSpanContext.isEmpty()) {
             builder = builder.asChildOf(RootSpanContext.<Span>get());
         }
-        JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-        Map<String, DatabaseType> storageTypes = 
AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = AgentReflectionUtil.invokeMethod(
-                
JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", 
DatabaseMetaData.class, DatabaseType.class),
-                target, 
executionUnit.getStorageResource().getConnection().getMetaData(), 
storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
         builder.withTag(Tags.COMPONENT.getKey(), 
JaegerConstants.COMPONENT_NAME)
                 .withTag(Tags.DB_TYPE.getKey(), JaegerConstants.DB_TYPE_VALUE)
                 .withTag(Tags.DB_INSTANCE.getKey(), 
executionUnit.getExecutionUnit().getDataSourceName())
diff --git 
a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryJDBCExecutorCallbackAdvice.java
 
b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryJDBCExecutorCallbackAdvice.java
index f845c1428b7..3fa329e72cd 100644
--- 
a/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryJDBCExecutorCallbackAdvice.java
+++ 
b/agent/plugins/tracing/type/opentelemetry/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentelemetry/advice/OpenTelemetryJDBCExecutorCallbackAdvice.java
@@ -23,32 +23,22 @@ import io.opentelemetry.api.trace.SpanBuilder;
 import io.opentelemetry.api.trace.StatusCode;
 import io.opentelemetry.api.trace.Tracer;
 import io.opentelemetry.context.Context;
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtil;
 import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
+import 
org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingJDBCExecutorCallbackAdvice;
 import 
org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.constant.OpenTelemetryConstants;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 
 import java.lang.reflect.Method;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
-import java.util.Map;
 
 /**
  * OpenTelemetry JDBC executor callback advice executor.
  */
-public class OpenTelemetryJDBCExecutorCallbackAdvice implements 
InstanceMethodAdvice {
-    
-    private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
+public class OpenTelemetryJDBCExecutorCallbackAdvice extends 
TracingJDBCExecutorCallbackAdvice<Span> {
     
     @Override
-    @SneakyThrows({ReflectiveOperationException.class, SQLException.class})
-    public void beforeMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final String pluginType) {
+    protected void recordExecuteInfo(final Span rootSpan, final 
TargetAdviceObject target, final JDBCExecutionUnit executionUnit, final boolean 
isTrunkThread, final DataSourceMetaData metaData) {
         Tracer tracer = GlobalOpenTelemetry.getTracer("shardingsphere-agent");
         SpanBuilder spanBuilder = tracer.spanBuilder(OPERATION_NAME);
         if (!RootSpanContext.isEmpty()) {
@@ -56,10 +46,6 @@ public class OpenTelemetryJDBCExecutorCallbackAdvice 
implements InstanceMethodAd
         }
         spanBuilder.setAttribute(OpenTelemetryConstants.COMPONENT, 
OpenTelemetryConstants.COMPONENT_NAME);
         spanBuilder.setAttribute(OpenTelemetryConstants.DB_TYPE, 
OpenTelemetryConstants.DB_TYPE_VALUE);
-        JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-        Map<String, DatabaseType> storageTypes = 
AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = 
AgentReflectionUtil.invokeMethod(JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData",
 DatabaseMetaData.class, DatabaseType.class),
-                target, 
executionUnit.getStorageResource().getConnection().getMetaData(), 
storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
         spanBuilder.setAttribute(OpenTelemetryConstants.DB_INSTANCE, 
executionUnit.getExecutionUnit().getDataSourceName())
                 .setAttribute(OpenTelemetryConstants.PEER_HOSTNAME, 
metaData.getHostname())
                 .setAttribute(OpenTelemetryConstants.PEER_PORT, 
String.valueOf(metaData.getPort()))
diff --git 
a/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdvice.java
 
b/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdvice.java
index d25ad655755..0c3e40899be 100644
--- 
a/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdvice.java
+++ 
b/agent/plugins/tracing/type/opentracing/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdvice.java
@@ -23,11 +23,11 @@ import io.opentracing.Tracer;
 import io.opentracing.tag.Tags;
 import io.opentracing.util.GlobalTracer;
 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
 import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
+import 
org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingJDBCExecutorCallbackAdvice;
 import 
org.apache.shardingsphere.agent.plugin.tracing.opentracing.constant.ShardingSphereTags;
 import 
org.apache.shardingsphere.agent.plugin.tracing.opentracing.span.OpenTracingErrorSpan;
-import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
+import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 
 import java.lang.reflect.Method;
@@ -35,24 +35,20 @@ import java.lang.reflect.Method;
 /**
  * OpenTracing JDBC executor callback advice executor.
  */
-public final class OpenTracingJDBCExecutorCallbackAdvice implements 
InstanceMethodAdvice {
-    
-    private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
+public final class OpenTracingJDBCExecutorCallbackAdvice extends 
TracingJDBCExecutorCallbackAdvice<Span> {
     
     @Override
-    public void beforeMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final String pluginType) {
+    protected void recordExecuteInfo(final Span rootSpan, final 
TargetAdviceObject target, final JDBCExecutionUnit executionUnit, final boolean 
isTrunkThread, final DataSourceMetaData metaData) {
         Tracer.SpanBuilder builder = 
GlobalTracer.get().buildSpan(OPERATION_NAME);
-        if ((boolean) args[1]) {
+        if (isTrunkThread) {
             builder.asChildOf(RootSpanContext.<Span>get());
         } else {
-            JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-            ExecutionUnit unit = executionUnit.getExecutionUnit();
             builder.withTag(Tags.COMPONENT.getKey(), 
ShardingSphereTags.COMPONENT_NAME)
                     .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)
                     .withTag(Tags.DB_TYPE.getKey(), "sql")
-                    .withTag(Tags.DB_INSTANCE.getKey(), 
unit.getDataSourceName())
-                    .withTag(Tags.DB_STATEMENT.getKey(), 
unit.getSqlUnit().getSql())
-                    .withTag(ShardingSphereTags.DB_BIND_VARIABLES.getKey(), 
unit.getSqlUnit().getParameters().toString());
+                    .withTag(Tags.DB_INSTANCE.getKey(), 
executionUnit.getExecutionUnit().getDataSourceName())
+                    .withTag(Tags.DB_STATEMENT.getKey(), 
executionUnit.getExecutionUnit().getSqlUnit().getSql())
+                    .withTag(ShardingSphereTags.DB_BIND_VARIABLES.getKey(), 
executionUnit.getExecutionUnit().getSqlUnit().getParameters().toString());
         }
         target.setAttachment(builder.startActive(true));
     }
diff --git 
a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdviceTest.java
 
b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdviceTest.java
index db53a966339..ec2b892a5d6 100644
--- 
a/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdviceTest.java
+++ 
b/agent/plugins/tracing/type/opentracing/src/test/java/org/apache/shardingsphere/agent/plugin/tracing/opentracing/advice/OpenTracingJDBCExecutorCallbackAdviceTest.java
@@ -20,9 +20,8 @@ package 
org.apache.shardingsphere.agent.plugin.tracing.opentracing.advice;
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.util.GlobalTracer;
+import 
org.apache.shardingsphere.agent.plugin.tracing.advice.AbstractJDBCExecutorCallbackAdviceTest;
 import 
org.apache.shardingsphere.agent.plugin.tracing.opentracing.constant.ErrorLogTagKeys;
-import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
-import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 import org.junit.Before;
@@ -39,10 +38,8 @@ import java.util.Map;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
-public final class OpenTracingJDBCExecutorCallbackAdviceTest {
+public final class OpenTracingJDBCExecutorCallbackAdviceTest extends 
AbstractJDBCExecutorCallbackAdviceTest {
     
     private static MockTracer tracer;
     
@@ -64,13 +61,9 @@ public final class OpenTracingJDBCExecutorCallbackAdviceTest 
{
     
     @Test
     public void assertMethod() {
-        MockTargetAdviceObject targetObject = new MockTargetAdviceObject();
-        Map<String, Object> extraMap = Collections.singletonMap("_root_span_", 
null);
-        JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
-        when(executionUnit.getExecutionUnit()).thenReturn(new 
ExecutionUnit("mock.db", new SQLUnit("select 1", Collections.emptyList())));
         OpenTracingJDBCExecutorCallbackAdvice advice = new 
OpenTracingJDBCExecutorCallbackAdvice();
-        advice.beforeMethod(targetObject, executeMethod, new 
Object[]{executionUnit, false, extraMap}, "OpenTracing");
-        advice.afterMethod(targetObject, executeMethod, new 
Object[]{executionUnit, false, extraMap}, null, "OpenTracing");
+        advice.beforeMethod(getTargetObject(), executeMethod, new 
Object[]{getExecutionUnit(), false, Collections.emptyList()}, "OpenTracing");
+        advice.afterMethod(getTargetObject(), executeMethod, new 
Object[]{getExecutionUnit(), false, Collections.emptyList()}, null, 
"OpenTracing");
         List<MockSpan> spans = tracer.finishedSpans();
         assertThat(spans.size(), is(1));
         MockSpan span = spans.get(0);
@@ -85,14 +78,11 @@ public final class 
OpenTracingJDBCExecutorCallbackAdviceTest {
     
     @Test
     public void assertExceptionHandle() {
-        MockTargetAdviceObject targetObject = new MockTargetAdviceObject();
         Map<String, Object> extraMap = Collections.singletonMap("_root_span_", 
null);
-        JDBCExecutionUnit executionUnit = mock(JDBCExecutionUnit.class);
-        when(executionUnit.getExecutionUnit()).thenReturn(new 
ExecutionUnit("mock.db", new SQLUnit("select 1", Collections.emptyList())));
         OpenTracingJDBCExecutorCallbackAdvice advice = new 
OpenTracingJDBCExecutorCallbackAdvice();
-        advice.beforeMethod(targetObject, executeMethod, new 
Object[]{executionUnit, false, extraMap}, "OpenTracing");
-        advice.onThrowing(targetObject, executeMethod, new 
Object[]{executionUnit, false, extraMap}, new IOException(), "OpenTracing");
-        advice.afterMethod(targetObject, executeMethod, new 
Object[]{executionUnit, false, extraMap}, null, "OpenTracing");
+        advice.beforeMethod(getTargetObject(), executeMethod, new 
Object[]{getExecutionUnit(), false, extraMap}, "OpenTracing");
+        advice.onThrowing(getTargetObject(), executeMethod, new 
Object[]{getExecutionUnit(), false, extraMap}, new IOException(), 
"OpenTracing");
+        advice.afterMethod(getTargetObject(), executeMethod, new 
Object[]{getExecutionUnit(), false, extraMap}, null, "OpenTracing");
         List<MockSpan> spans = tracer.finishedSpans();
         assertThat(spans.size(), is(1));
         MockSpan span = spans.get(0);
diff --git 
a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
 
b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
index bf6a5ca5fc0..275aff37071 100644
--- 
a/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
+++ 
b/agent/plugins/tracing/type/zipkin/src/main/java/org/apache/shardingsphere/agent/plugin/tracing/zipkin/advice/ZipkinJDBCExecutorCallbackAdvice.java
@@ -19,42 +19,25 @@ package 
org.apache.shardingsphere.agent.plugin.tracing.zipkin.advice;
 
 import brave.Span;
 import brave.Tracing;
-import lombok.SneakyThrows;
 import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
-import org.apache.shardingsphere.agent.api.advice.type.InstanceMethodAdvice;
-import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtil;
-import 
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
 import org.apache.shardingsphere.agent.plugin.tracing.core.RootSpanContext;
+import 
org.apache.shardingsphere.agent.plugin.tracing.core.advice.TracingJDBCExecutorCallbackAdvice;
+import 
org.apache.shardingsphere.agent.plugin.tracing.zipkin.constant.ZipkinConstants;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 
 import java.lang.reflect.Method;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLException;
-import java.util.Map;
 
 /**
  * Zipkin JDBC executor callback advice executor.
  */
-public final class ZipkinJDBCExecutorCallbackAdvice implements 
InstanceMethodAdvice {
-    
-    private static final String OPERATION_NAME = "/ShardingSphere/executeSQL/";
+public final class ZipkinJDBCExecutorCallbackAdvice extends 
TracingJDBCExecutorCallbackAdvice<Span> {
     
     @Override
-    @SneakyThrows({ReflectiveOperationException.class, SQLException.class})
-    public void beforeMethod(final TargetAdviceObject target, final Method 
method, final Object[] args, final String pluginType) {
-        Span span = RootSpanContext.isEmpty()
-                ? Tracing.currentTracer().nextSpan().name(OPERATION_NAME)
-                : 
Tracing.currentTracer().newChild(RootSpanContext.<Span>get().context()).name(OPERATION_NAME);
+    protected void recordExecuteInfo(final Span rootSpan, final 
TargetAdviceObject target, final JDBCExecutionUnit executionUnit, final boolean 
isTrunkThread, final DataSourceMetaData metaData) {
+        Span span = null == rootSpan ? 
Tracing.currentTracer().nextSpan().name(OPERATION_NAME) : 
Tracing.currentTracer().newChild(RootSpanContext.<Span>get().context()).name(OPERATION_NAME);
         span.tag(ZipkinConstants.Tags.COMPONENT, 
ZipkinConstants.COMPONENT_NAME);
         span.tag(ZipkinConstants.Tags.DB_TYPE, ZipkinConstants.DB_TYPE_VALUE);
-        JDBCExecutionUnit executionUnit = (JDBCExecutionUnit) args[0];
-        Map<String, DatabaseType> storageTypes = 
AgentReflectionUtil.getFieldValue(target, "storageTypes");
-        DataSourceMetaData metaData = AgentReflectionUtil.invokeMethod(
-                
JDBCExecutorCallback.class.getDeclaredMethod("getDataSourceMetaData", 
DatabaseMetaData.class, DatabaseType.class),
-                target, 
executionUnit.getStorageResource().getConnection().getMetaData(), 
storageTypes.get(executionUnit.getExecutionUnit().getDataSourceName()));
         span.tag(ZipkinConstants.Tags.DB_INSTANCE, 
executionUnit.getExecutionUnit().getDataSourceName());
         span.tag(ZipkinConstants.Tags.PEER_HOSTNAME, metaData.getHostname());
         span.tag(ZipkinConstants.Tags.PEER_PORT, 
String.valueOf(metaData.getPort()));

Reply via email to