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()));